Bug 284536 - crash in expression parser when visit() of node without associated context is set, e.g. DefaultVisitor::visitTypeIdentification
Summary: crash in expression parser when visit() of node without associated context is...
Status: RESOLVED FIXED
Alias: None
Product: kdevelop
Classification: Applications
Component: Language Support: CPP (old) (show other bugs)
Version: git master
Platform: Ubuntu Linux
: VHI crash
Target Milestone: 4.2.3
Assignee: kdevelop-bugs-null
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-10-20 10:11 UTC by janitor048
Modified: 2013-03-31 00:55 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
Console output prior to crash (5.38 KB, text/plain)
2011-10-20 10:11 UTC, janitor048
Details
Header "functional" that causes the parser to crash (2.60 KB, text/plain)
2011-10-21 10:46 UTC, janitor048
Details
CLI output of duchainify run on "functional" header (12.83 KB, text/plain)
2011-10-21 10:46 UTC, janitor048
Details
CLI output log of kdevelop session with triggered crash (58.22 KB, application/x-gzip)
2011-10-21 10:49 UTC, janitor048
Details
Header "functional" that causes the parser to crash (63.66 KB, text/plain)
2011-10-21 11:23 UTC, janitor048
Details

Note You need to log in before you can comment on or make changes to this bug.
Description janitor048 2011-10-20 10:11:33 UTC
Created attachment 64729 [details]
Console output prior to crash

Version:           git master (using KDE 4.5.5) 
OS:                Linux

When opening (certain) projects kdevelop (compiled from git master) crashes when starting to parse the code. This can be reproduced every time. In order to enable a clean start, I've removed the .kdevduchain directory, $HOME/.kde/share/config/kdev*rc, $HOME/.kde/share/apps/kdev*

Here's the backtrace (from gdb, the KDE crash handler is not starting in this case). Attached you'll also find some of the console debugging output.

#0  0x00007ffff2652ba5 in raise (sig=<value optimised out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1  0x00007ffff26566b0 in abort () at abort.c:92
#2  0x00007ffff430d864 in qt_message_output(QtMsgType, char const*) () from /usr/lib/libQtCore.so.4
#3  0x00007ffff430da42 in ?? () from /usr/lib/libQtCore.so.4
#4  0x00007ffff430dbf5 in qFatal(char const*, ...) () from /usr/lib/libQtCore.so.4
#5  0x00007fffc5be6b96 in Cpp::ExpressionVisitor::visitName (this=0x7fffc488a680, node=0x7fffca25bc68)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppduchain/expressionvisitor.cpp:485
#6  0x00007fffc58c256e in DefaultVisitor::visitTypeIdentification (this=0x74bf, node=0x7fffca25be58)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/default_visitor.cpp:434
#7  0x00007fffc5be0e71 in Cpp::ExpressionVisitor::parse (this=0x7fffc488a680, ast=0x7fffca25be58)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppduchain/expressionvisitor.cpp:249
#8  0x00007fffc5bdfe8a in Cpp::ExpressionParser::evaluateType (this=<value optimised out>, ast=<value optimised out>, session=<value optimised out>, source=0x7fffc9f5dd40)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppduchain/expressionparser.cpp:114
#9  0x00007fffc5be049e in Cpp::ExpressionParser::evaluateType (this=0x7fffc488b550, unit=<value optimised out>, context=<value optimised out>, source=<value optimised out>, 
    forceExpression=<value optimised out>) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppduchain/expressionparser.cpp:93
#10 0x00007fffc5be0572 in Cpp::ExpressionParser::evaluateExpression (this=0x7fffc488b550, expression=..., context=<value optimised out>, source=<value optimised out>)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppduchain/expressionparser.cpp:101
#11 0x00007fffc5bdce09 in DelayedTypeResolver::exchange(TypePtr<KDevelop::AbstractType> const&) () from /home/fochler/usr/kdev4dbg/lib/libkdev4cppduchain.so
#12 0x00007fffc5bd572e in Cpp::resolveDelayedTypes (type=DWARF-2 expression error: DW_OP_reg operations must be used either alone or in conjuction with DW_OP_piece or DW_OP_bit_piece.
) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppduchain/templatedeclaration.cpp:1034
#13 0x00007fffc5b7accf in Cpp::CppDUContext<KDevelop::DUContext>::findDeclarationsInternal (this=<value optimised out>, identifier=<value optimised out>, 
    position=<value optimised out>, dataType=<value optimised out>, ret=<value optimised out>, source=<value optimised out>, basicFlags=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppduchain/cppducontext.h:345
#14 0x00007fffc5b7b48a in Cpp::CppDUContext<KDevelop::DUContext>::findDeclarationsInternal (this=<value optimised out>, identifiers=<value optimised out>, 
    position=<value optimised out>, dataType=<value optimised out>, ret=<value optimised out>, source=<value optimised out>, basicFlags=..., depth=0)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppduchain/cppducontext.h:286
#15 0x00007ffff09f83d7 in KDevelop::DUContext::findDeclarations (this=0x7fffca241de0, identifier=<value optimised out>, position=..., dataType=<value optimised out>, 
    topContext=0x7fffc9f5dd40, flags=...) at /home/fochler/software/KDevelop/kdevplatform/language/duchain/ducontext.cpp:857
#16 0x00007fffc5ba8251 in TypeBuilder::openTypeFromName (this=0x7fffc488dbd0, name=0x7fffca10f7a0, modifiers=<value optimised out>, needClass=<value optimised out>)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppduchain/typebuilder.cpp:468
#17 0x00007fffc5ba8b48 in TypeBuilder::visitSimpleTypeSpecifier (this=0x7fffc488dbd0, node=0x7fffca10f7d0)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppduchain/typebuilder.cpp:390
#18 0x00007fffc5b6dd6b in ContextBuilder::visitFunctionDeclaration (this=0x7fffc488dbd0, node=0x7fffca111998)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppduchain/contextbuilder.cpp:606
#19 0x00007fffc5b84123 in DeclarationBuilder::visitFunctionDeclaration (this=0x7fffc488dbd0, node=0x7fffca111998)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppduchain/declarationbuilder.cpp:177
#20 0x00007fffc5b6f723 in ContextBuilder::visitFunctionDefinition (this=0x7fffc488dbd0, node=0x7fffca111998)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppduchain/contextbuilder.cpp:576
#21 0x00007fffc5b6f3d3 in ContextBuilder::visitTemplateDeclaration (this=0x7fffc488dbd0, ast=0x7fffca111a08)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppduchain/contextbuilder.cpp:292
#22 0x00007fffc58c2e2d in visitNodes<DeclarationAST*> (v=0x7fffc488dc30, nodes=<value optimised out>)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/visitor.h:138
#23 0x00007fffc5b737b8 in KDevelop::AbstractContextBuilder<AST, NameAST>::supportBuild (this=0x7fffc488dbd0, node=0x7fffc9fe6a00, context=0x7fffc9f5dd40)
    at /home/fochler/usr/kdev4dbg/include/kdevplatform/language/duchain/builders/abstractcontextbuilder.h:133
#24 0x00007fffc5b71028 in ContextBuilder::buildContexts (this=<value optimised out>, file=<value optimised out>, node=<value optimised out>, includes=0x7fffc488d770, 
    updateContext=<value optimised out>, removeOldImports=false) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppduchain/contextbuilder.cpp:421
#25 0x00007fffc5b84579 in DeclarationBuilder::buildDeclarations (this=0x7fffc488dbd0, file=<value optimised out>, node=0x7fffc9fe6a00, includes=<value optimised out>, 
    updateContext=<value optimised out>, removeOldImports=false) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppduchain/declarationbuilder.cpp:92
#26 0x00007fffc60a72f5 in CPPInternalParseJob::run (this=0x7fffc9c77a80) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppparsejob.cpp:637
#27 0x00007fffc60b0795 in PreprocessJob::sourceNeeded (this=0x7fffc8ebea50, _fileName=<value optimised out>, type=<value optimised out>, sourceLine=69, 
    skipCurrentPath=<value optimised out>) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:579
#28 0x00007fffc5e5c5fb in rpp::pp::handle_include (this=0x7fffc488f9e0, skip_current_path=<value optimised out>, input=..., output=<value optimised out>)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:213
#29 0x00007fffc5e5c94e in rpp::pp::handle_directive (this=0x7fffc488f9e0, directive=98960, input=..., output=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:131
#30 0x00007fffc5e5cc28 in rpp::pp::operator() (this=0x7fffc488f9e0, input=..., output=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:266
#31 0x00007fffc5e5ceb9 in rpp::pp::processFileInternal (this=0x7fffc488f9e0, fileName=<value optimised out>, fileContents=<value optimised out>, result=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:98
#32 0x00007fffc5e5cf4a in rpp::pp::processFile (this=0x7fffc488f9e0, fileName=..., data=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:85
#33 0x00007fffc60aee54 in PreprocessJob::run (this=0x7fffc8ebea50) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:245
#34 0x00007fffc60a5db4 in CPPParseJob::parseForeground (this=0x7fffc98cef60) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppparsejob.cpp:174
---Type <return> to continue, or q <return> to quit---
#35 0x00007fffc60b0795 in PreprocessJob::sourceNeeded (this=0x7fffc9c89460, _fileName=<value optimised out>, type=<value optimised out>, sourceLine=69, 
    skipCurrentPath=<value optimised out>) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:579
#36 0x00007fffc5e5c5fb in rpp::pp::handle_include (this=0x7fffc4891d30, skip_current_path=<value optimised out>, input=..., output=<value optimised out>)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:213
#37 0x00007fffc5e5c94e in rpp::pp::handle_directive (this=0x7fffc4891d30, directive=98960, input=..., output=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:131
#38 0x00007fffc5e5cc28 in rpp::pp::operator() (this=0x7fffc4891d30, input=..., output=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:266
#39 0x00007fffc5e5ceb9 in rpp::pp::processFileInternal (this=0x7fffc4891d30, fileName=<value optimised out>, fileContents=<value optimised out>, result=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:98
#40 0x00007fffc5e5cf4a in rpp::pp::processFile (this=0x7fffc4891d30, fileName=..., data=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:85
#41 0x00007fffc60aee54 in PreprocessJob::run (this=0x7fffc9c89460) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:245
#42 0x00007fffc60a5db4 in CPPParseJob::parseForeground (this=0x7fffc98cfcf0) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppparsejob.cpp:174
#43 0x00007fffc60b0795 in PreprocessJob::sourceNeeded (this=0x7fffc9782b90, _fileName=<value optimised out>, type=<value optimised out>, sourceLine=18, 
    skipCurrentPath=<value optimised out>) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:579
#44 0x00007fffc5e5c5fb in rpp::pp::handle_include (this=0x7fffc4894080, skip_current_path=<value optimised out>, input=..., output=<value optimised out>)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:213
#45 0x00007fffc5e5c94e in rpp::pp::handle_directive (this=0x7fffc4894080, directive=98960, input=..., output=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:131
#46 0x00007fffc5e5cc28 in rpp::pp::operator() (this=0x7fffc4894080, input=..., output=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:266
#47 0x00007fffc5e5ceb9 in rpp::pp::processFileInternal (this=0x7fffc4894080, fileName=<value optimised out>, fileContents=<value optimised out>, result=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:98
#48 0x00007fffc5e5cf4a in rpp::pp::processFile (this=0x7fffc4894080, fileName=..., data=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:85
#49 0x00007fffc60aee54 in PreprocessJob::run (this=0x7fffc9782b90) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:245
#50 0x00007fffc60a5db4 in CPPParseJob::parseForeground (this=0x7fffc9cd31c0) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppparsejob.cpp:174
#51 0x00007fffc60b0795 in PreprocessJob::sourceNeeded (this=0x7fffc9c7d970, _fileName=<value optimised out>, type=<value optimised out>, sourceLine=13, 
    skipCurrentPath=<value optimised out>) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:579
#52 0x00007fffc5e5c5fb in rpp::pp::handle_include (this=0x7fffc48963d0, skip_current_path=<value optimised out>, input=..., output=<value optimised out>)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:213
#53 0x00007fffc5e5c94e in rpp::pp::handle_directive (this=0x7fffc48963d0, directive=98960, input=..., output=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:131
#54 0x00007fffc5e5cc28 in rpp::pp::operator() (this=0x7fffc48963d0, input=..., output=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:266
#55 0x00007fffc5e5ceb9 in rpp::pp::processFileInternal (this=0x7fffc48963d0, fileName=<value optimised out>, fileContents=<value optimised out>, result=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:98
#56 0x00007fffc5e5cf4a in rpp::pp::processFile (this=0x7fffc48963d0, fileName=..., data=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:85
#57 0x00007fffc60aee54 in PreprocessJob::run (this=0x7fffc9c7d970) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:245
#58 0x00007fffc60a5db4 in CPPParseJob::parseForeground (this=0x7fffc97206f0) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppparsejob.cpp:174
#59 0x00007fffc60b0795 in PreprocessJob::sourceNeeded (this=0x7fffc971ec20, _fileName=<value optimised out>, type=<value optimised out>, sourceLine=50, 
    skipCurrentPath=<value optimised out>) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:579
#60 0x00007fffc5e5c5fb in rpp::pp::handle_include (this=0x7fffc4898720, skip_current_path=<value optimised out>, input=..., output=<value optimised out>)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:213
#61 0x00007fffc5e5c94e in rpp::pp::handle_directive (this=0x7fffc4898720, directive=98960, input=..., output=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:131
#62 0x00007fffc5e5cc28 in rpp::pp::operator() (this=0x7fffc4898720, input=..., output=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:266
#63 0x00007fffc5e5ceb9 in rpp::pp::processFileInternal (this=0x7fffc4898720, fileName=<value optimised out>, fileContents=<value optimised out>, result=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:98
#64 0x00007fffc5e5cf4a in rpp::pp::processFile (this=0x7fffc4898720, fileName=..., data=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:85
#65 0x00007fffc60aee54 in PreprocessJob::run (this=0x7fffc971ec20) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:245
#66 0x00007fffc60a5db4 in CPPParseJob::parseForeground (this=0x7fffc971e8c0) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppparsejob.cpp:174
#67 0x00007fffc60b0795 in PreprocessJob::sourceNeeded (this=0x7fffc9712c40, _fileName=<value optimised out>, type=<value optimised out>, sourceLine=29, 
    skipCurrentPath=<value optimised out>) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:579
#68 0x00007fffc5e5c5fb in rpp::pp::handle_include (this=0x7fffc489aa70, skip_current_path=<value optimised out>, input=..., output=<value optimised out>)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:213
#69 0x00007fffc5e5c94e in rpp::pp::handle_directive (this=0x7fffc489aa70, directive=98960, input=..., output=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:131
#70 0x00007fffc5e5cc28 in rpp::pp::operator() (this=0x7fffc489aa70, input=..., output=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:266
#71 0x00007fffc5e5ceb9 in rpp::pp::processFileInternal (this=0x7fffc489aa70, fileName=<value optimised out>, fileContents=<value optimised out>, result=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:98
#72 0x00007fffc5e5cf4a in rpp::pp::processFile (this=0x7fffc489aa70, fileName=..., data=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:85
#73 0x00007fffc60aee54 in PreprocessJob::run (this=0x7fffc9712c40) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:245
#74 0x00007fffc60a5db4 in CPPParseJob::parseForeground (this=0x7fffc9712830) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppparsejob.cpp:174
---Type <return> to continue, or q <return> to quit---
#75 0x00007fffc60b0795 in PreprocessJob::sourceNeeded (this=0x7fffc95696a0, _fileName=<value optimised out>, type=<value optimised out>, sourceLine=28, 
    skipCurrentPath=<value optimised out>) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:579
#76 0x00007fffc5e5c5fb in rpp::pp::handle_include (this=0x7fffc489cdc0, skip_current_path=<value optimised out>, input=..., output=<value optimised out>)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:213
#77 0x00007fffc5e5c94e in rpp::pp::handle_directive (this=0x7fffc489cdc0, directive=98960, input=..., output=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:131
#78 0x00007fffc5e5cc28 in rpp::pp::operator() (this=0x7fffc489cdc0, input=..., output=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:266
#79 0x00007fffc5e5ceb9 in rpp::pp::processFileInternal (this=0x7fffc489cdc0, fileName=<value optimised out>, fileContents=<value optimised out>, result=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:98
#80 0x00007fffc5e5cf4a in rpp::pp::processFile (this=0x7fffc489cdc0, fileName=..., data=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:85
#81 0x00007fffc60aee54 in PreprocessJob::run (this=0x7fffc95696a0) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:245
#82 0x00007fffc60a5db4 in CPPParseJob::parseForeground (this=0x7fffc9551280) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppparsejob.cpp:174
#83 0x00007fffc60b0795 in PreprocessJob::sourceNeeded (this=0x7fffc8d77cd0, _fileName=<value optimised out>, type=<value optimised out>, sourceLine=40, 
    skipCurrentPath=<value optimised out>) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:579
#84 0x00007fffc5e5c5fb in rpp::pp::handle_include (this=0x7fffc489f110, skip_current_path=<value optimised out>, input=..., output=<value optimised out>)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:213
#85 0x00007fffc5e5c94e in rpp::pp::handle_directive (this=0x7fffc489f110, directive=98960, input=..., output=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:131
#86 0x00007fffc5e5cc28 in rpp::pp::operator() (this=0x7fffc489f110, input=..., output=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:266
#87 0x00007fffc5e5ceb9 in rpp::pp::processFileInternal (this=0x7fffc489f110, fileName=<value optimised out>, fileContents=<value optimised out>, result=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:98
#88 0x00007fffc5e5cf4a in rpp::pp::processFile (this=0x7fffc489f110, fileName=..., data=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:85
#89 0x00007fffc60aee54 in PreprocessJob::run (this=0x7fffc8d77cd0) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:245
#90 0x00007fffc60a5db4 in CPPParseJob::parseForeground (this=0x7fffc8d77d60) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppparsejob.cpp:174
#91 0x00007fffc60b0795 in PreprocessJob::sourceNeeded (this=0x7fffc817a7c0, _fileName=<value optimised out>, type=<value optimised out>, sourceLine=20, 
    skipCurrentPath=<value optimised out>) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:579
#92 0x00007fffc5e5c5fb in rpp::pp::handle_include (this=0x7fffc48a1460, skip_current_path=<value optimised out>, input=..., output=<value optimised out>)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:213
#93 0x00007fffc5e5c94e in rpp::pp::handle_directive (this=0x7fffc48a1460, directive=98960, input=..., output=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:131
#94 0x00007fffc5e5cc28 in rpp::pp::operator() (this=0x7fffc48a1460, input=..., output=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:266
#95 0x00007fffc5e5ceb9 in rpp::pp::processFileInternal (this=0x7fffc48a1460, fileName=<value optimised out>, fileContents=<value optimised out>, result=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:98
#96 0x00007fffc5e5cf4a in rpp::pp::processFile (this=0x7fffc48a1460, fileName=..., data=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:85
#97 0x00007fffc60aee54 in PreprocessJob::run (this=0x7fffc817a7c0) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:245
#98 0x00007fffc60a5db4 in CPPParseJob::parseForeground (this=0x7fffc800f7f0) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/cppparsejob.cpp:174
#99 0x00007fffc60b0795 in PreprocessJob::sourceNeeded (this=0x41adca0, _fileName=<value optimised out>, type=<value optimised out>, sourceLine=20, 
    skipCurrentPath=<value optimised out>) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:579
#100 0x00007fffc5e5c5fb in rpp::pp::handle_include (this=0x7fffc48a37b0, skip_current_path=<value optimised out>, input=..., output=<value optimised out>)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:213
#101 0x00007fffc5e5c94e in rpp::pp::handle_directive (this=0x7fffc48a37b0, directive=98960, input=..., output=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:131
#102 0x00007fffc5e5cc28 in rpp::pp::operator() (this=0x7fffc48a37b0, input=..., output=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:266
#103 0x00007fffc5e5ceb9 in rpp::pp::processFileInternal (this=0x7fffc48a37b0, fileName=<value optimised out>, fileContents=<value optimised out>, result=...)
    at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:98
#104 0x00007fffc5e5cf4a in rpp::pp::processFile (this=0x7fffc48a37b0, fileName=..., data=...) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/parser/rpp/pp-engine.cpp:85
#105 0x00007fffc60aee54 in PreprocessJob::run (this=0x41adca0) at /home/fochler/software/KDevelop/kdevelop/languages/cpp/preprocessjob.cpp:245
#106 0x00007ffff63f6981 in ?? () from /usr/lib/libthreadweaver.so.4
#107 0x00007ffff63f6c7e in ThreadWeaver::Job::execute(ThreadWeaver::Thread*) () from /usr/lib/libthreadweaver.so.4
#108 0x00007ffff63f8083 in ?? () from /usr/lib/libthreadweaver.so.4
#109 0x00007ffff63f5c6f in ?? () from /usr/lib/libthreadweaver.so.4
#110 0x00007ffff63f61f8 in ThreadWeaver::Thread::run() () from /usr/lib/libthreadweaver.so.4
#111 0x00007ffff431627e in ?? () from /usr/lib/libQtCore.so.4
#112 0x00007ffff408b971 in start_thread (arg=<value optimised out>) at pthread_create.c:304
#113 0x00007ffff270592d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#114 0x0000000000000000 in ?? ()


Reproducible: Always

Steps to Reproduce:
- start kdevelop
- open project (either by opening the existing .kdev4 file or by importing the CMakeLists.txt)

Actual Results:  
kdevelop crashes when parsing the code (the progress bar at first quickly goes from 0 to 100%, then starts at 0% again and progresses more slowly, crashes at about 2%) 

Expected Results:  
no crash

Qt: 4.7.0
KDE Development Platform: 4.5.5 (KDE 4.5.5)
KDevelop: 4.2.60
2.6.35-30-generic #59-Ubuntu SMP Tue Aug 30 19:00:03 UTC 2011 x86_64 GNU/Linux
Comment 1 Milian Wolff 2011-10-20 20:55:28 UTC
already reported on irc by comawhite and I tried to analyse it.

reason is that no proper context gets set in m_currentContext because the typeId node that is visited doesn't have it set and the expressionvisitor has mCurrentContext set to 0 by default.

really must be debugged, I'm particularly stunned at not being able to reproduce it. apparently the functional header in stl was the reason for comawhite. personally I could always parse that one just fine using duchainify :(
Comment 2 Milian Wolff 2011-10-20 20:58:27 UTC
@janitor: please try this:

run kdevelop in gdb:

gdb kdevelop
run
# wait for crash
up
# repeat until you are in Cpp::ExpressionVisitor::visitName
print m_session->dumpNode(node)

and then tell us what the last line shows.
Comment 3 janitor048 2011-10-21 08:31:53 UTC
Here's what I get, when inspecting node in Cpp::ExpressionVisitor::visitName

(gdb) print m_session->dumpNode(node)
_Maybe_wrap_member_pointer<_Functor>::type
$1 = void

Does this help? Let me know if I can add more debug information or the like.

Cheers,
Oliver
Comment 4 Milian Wolff 2011-10-21 09:30:14 UTC
can you grep your "functional" header for "_Maybe_warp_member_pointer\s*<\s_Functor\s*>\s*::\s*type"? or better yet grep recursively in all of /usr/include/ .

If you find the header that has that code, try to parse that using duchainify and see if that helps:

kdebugdialog #enable all cpp + language debug areas
./path/to/kdevplatform-build-dir/util/duchainify --verbose /path/to/functional

does that work?

also, with enabled cpp debug areas, please start kdevelop from the cli and &> pipe all debug output to a file, trigger the crash, and then attach the cli log to this bugreport please.

thanks
Comment 5 janitor048 2011-10-21 10:46:07 UTC
Created attachment 64750 [details]
Header "functional" that causes the parser to crash
Comment 6 janitor048 2011-10-21 10:46:57 UTC
Created attachment 64751 [details]
CLI output of duchainify run on "functional" header
Comment 7 janitor048 2011-10-21 10:49:20 UTC
Created attachment 64752 [details]
CLI output log of kdevelop session with triggered crash

I needed to gzip the file as it would have exceeded the size limits of the bug tracker otherwise..
Comment 8 janitor048 2011-10-21 10:52:38 UTC
Ok. The offending header is c++/4.4/tr1_impl/functional (either line 1354 or line 1342). I've attached this header such that you can inspect this version.

Running duchainify on this header seem to be ok. That's to say, it does not crash - but I can't really tell much from the output. I've therefore added an attachment with the CLI output of the duchainify run.
Running kdevelop after duchainify of the functional header causes the same crash however.

As requested, I've also attached the CLI output log of a debug kdevelop session (with previously cleaned .kdevduchain etc.). Hope that helps.
Comment 9 janitor048 2011-10-21 11:23:32 UTC
Created attachment 64755 [details]
Header "functional" that causes the parser to crash

Sorry, I somehow attached the wrong header the last time. This is the offending one /usr/include/c++/4.4/tr1_impl/functional (on my system)
Comment 10 Milian Wolff 2011-10-25 00:22:13 UTC
ok, to reproduce one just has to download the last attachement and save it as functional.cpp then run it through duchainify to trigger the crash.
Comment 11 András Manţia 2011-10-25 08:52:19 UTC
I have a similar crash, seems to be only in master. There rev 9551523c8634f158205b0c51570842e7cc70a349 doesn't crash.
Comment 12 Milian Wolff 2011-10-25 19:31:56 UTC
Git commit 5a68522b2197da7442ca34bd31a89dd7db013d66 by Milian Wolff.
Committed on 25/10/2011 at 21:26.
Pushed by mwolff into branch 'master'.

make it simpler to extend the ast without introducing nasty crashes by improving the expressionvisitor api

a) no longer do we have to overload all visit*() functions just to add the PushPositiveContext,
instead we overload visit() centrally and handle it there
b) we explicitly mark visit() private, users are supposed to use .parse() - this showed
a bug in the name visitor leading to the crash in bug 284536

Future work ideas:
- go even farther and expect a required currentContext argument in the parse() method
that makes the assertion for node->duContext a compile-time check and removes quite
some duplicated code where the expression visitor is used
- clean m_context <-> m_localContext in TypeASTVisitor and NameASTVisitor. a quick
check showed no actual difference as far as I could see, hence this should be probably
merge.
- furthermore I wonder whether the visit() overload of the expr. visitor should not
also be done in the TypeASTVisitor and NameASTVisitor as well?

BUG: 284536

M  +8    -86   languages/cpp/cppduchain/expressionvisitor.cpp
M  +1    -5    languages/cpp/cppduchain/expressionvisitor.h
M  +3    -2    languages/cpp/cppduchain/name_visitor.cpp
M  +1    -0    languages/cpp/cppduchain/tests/test_duchain.h
M  +13   -0    languages/cpp/cppduchain/tests/test_duchain_cpp2011.cpp

http://commits.kde.org/kdevelop/5a68522b2197da7442ca34bd31a89dd7db013d66
Comment 13 Milian Wolff 2011-10-25 20:39:38 UTC
*** Bug 275730 has been marked as a duplicate of this bug. ***
Comment 14 Aleix Pol 2013-03-31 00:55:43 UTC
Moving all the bugs from the CPP Parser. It was not well defined the difference between it and C++ Language Support and people kept reporting in both places indistinctively