https://bugs.kde.org/show_bug.cgi?id=431811
Bug ID: 431811 Summary: KDevelop crashes when parsing projects that use wxWidgets-3.1.4 Product: kdevelop Version: git master Platform: Compiled Sources OS: Linux Status: REPORTED Severity: crash Priority: NOR Component: general Assignee: kdevelop-bugs-n...@kde.org Reporter: kogiokkaf...@gmail.com Target Milestone: --- Created attachment 134991 --> https://bugs.kde.org/attachment.cgi?id=134991&action=edit An wxWidgets example project for reproducing the bug SUMMARY KDevelop crashes when parsing projects using wxWidgets-3.1.4, but has no issue with projects using wxWidgets-3.0.4. I'm not sure if there are any more libraries will cause this issue. STEPS TO REPRODUCE 1. Get wxWidgets-3.1.4. I built the library from source. 2. Create CMake cache of the attachment project with "cmake -Bbuild -DCMAKE_PREFIX_PATH=<path-to-wxWidgets-3.1.4>" 3. Execute "kdevelop --ps" and Create New Session 4. Open Project and choose the attachment project 5. Before the parsing is finished, KDevelop will crash silently OBSERVED RESULT I did some tests and found out that it is caused by "clang_getFieldDeclBitWidth" in "plugins/clang/duchain/builder.cpp": https://invent.kde.org/kdevelop/kdevelop/-/blob/e2595310efbd6ec5f9c3c1ce49b46d80b07aecb7/plugins/clang/duchain/builder.cpp#L1090 If I change decl->setBitWidth(clang_getFieldDeclBitWidth(cursor)); to decl->setBitWidth(-1); , KDevelop will finish the parsing without issue. BACKTRACE #0 __memmove_avx_unaligned_erms () at ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:498 #1 0x00007fff5e074c0b in llvm::APInt::APInt(llvm::APInt const&) (that=..., this=0x7fff5cab2600) at /usr/include/llvm/ADT/APInt.h:325 #2 llvm::APSInt::APSInt(llvm::APSInt const&) (this=0x7fff5cab2600) at /usr/include/llvm/ADT/APSInt.h:21 #3 clang::Expr::EvaluateKnownConstInt(clang::ASTContext const&, llvm::SmallVectorImpl<std::pair<clang::SourceLocation, clang::PartialDiagnostic> >*) const (this=0x7fff1b680f10, Ctx=..., Diag=Diag@entry=0x0) at ../lib/AST/ExprConstant.cpp:13991 #4 0x00007fff5dfe4736 in clang::FieldDecl::getBitWidthValue(clang::ASTContext const&) const (this=<optimized out>, Ctx=...) at ../include/clang/AST/Decl.h:2864 #5 0x00007fff69892a3a in (anonymous namespace)::Visitor::setDeclData<(CXCursorKind)6>(CXCursor, KDevelop::ClassMemberDeclaration*) (cursor=..., decl=decl@entry=0x7fff52a70720, this=0x7fff5cab53f0) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/cursorkindtraits.h:199 #6 0x00007fff6989fc66 in (anonymous namespace)::Visitor::createDeclarationCommon<(CXCursorKind)6, KDevelop::ClassMemberDeclaration>(CXCursor, KDevelop::Identifier const&) (this=this@entry=0x7fff5cab53f0, cursor=..., id=...) at /usr/include/c++/10/bits/atomic_base.h:333 #7 0x00007fff698b7209 in (anonymous namespace)::Visitor::createDeclaration<(CXCursorKind)6, KDevelop::ClassMemberDeclaration> (context=0x0, id=..., cursor=..., this=0x7fff5cab53f0) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/builder.cpp:466 #8 (anonymous namespace)::Visitor::buildDeclaration<(CXCursorKind)6, KDevelop::ClassMemberDeclaration, false> (cursor=..., this=0x7fff5cab53f0) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/builder.cpp:1224 #9 (anonymous namespace)::Visitor::dispatchCursor<(CXCursorKind)6> (parent=..., cursor=..., this=0x7fff5cab53f0) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/builder.cpp:991 #10 (anonymous namespace)::visitCursor(CXCursor, CXCursor, CXClientData) (cursor=..., parent=..., data=0x7fff5cab53f0) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/builder.cpp:1561 #11 0x00007fff5df43a86 in clang::cxcursor::CursorVisitor::Visit(CXCursor, bool) (this=this@entry=0x7fff5cab2d10, Cursor=..., CheckedRegionOfInterest=CheckedRegionOfInterest@entry=true) at ../tools/libclang/CIndex.cpp:214 #12 0x00007fff5df4444d in clang::cxcursor::CursorVisitor::handleDeclForVisitation(clang::Decl const*) (this=this@entry=0x7fff5cab2d10, D=0x7fff1b680f60) at ../tools/libclang/CIndex.cpp:676 #13 0x00007fff5df44648 in clang::cxcursor::CursorVisitor::VisitDeclContext(clang::DeclContext*) (this=0x7fff5cab2d10, DC=0x7fff1b680c98) at ../tools/libclang/CIndex.cpp:637 #14 0x00007fff5df435a7 in clang::cxcursor::CursorVisitor::VisitChildren(CXCursor) (this=0x7fff5cab2d10, Cursor=...) at ../tools/libclang/CIndex.cpp:507 #15 0x00007fff5df4b22d in clang_visitChildren(CXCursor, CXCursorVisitor, CXClientData) (parent=..., visitor=<optimized out>, client_data=<optimized out>) at ../tools/libclang/CIndex.cpp:4441 #16 0x00007fff698a24b3 in (anonymous namespace)::Visitor::buildDeclaration<(CXCursorKind)2, KDevelop::ClassDeclaration, true>(CXCursor) (this=0x7fff5cab53f0, cursor=...) at /usr/include/c++/10/bits/move.h:101 #17 0x00007fff698b8c88 in (anonymous namespace)::Visitor::dispatchCursor<(CXCursorKind)2> (parent=..., cursor=..., this=0x7fff5cab53f0) at /home/luis/kde/src/kdevelop/kdevplatform/language/duchain/types/typepointer.h:39 #18 (anonymous namespace)::visitCursor(CXCursor, CXCursor, CXClientData) (cursor=..., parent=..., data=0x7fff5cab53f0) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/builder.cpp:1557 #19 0x00007fff5df43a86 in clang::cxcursor::CursorVisitor::Visit(CXCursor, bool) (this=this@entry=0x7fff5cab3800, Cursor=..., CheckedRegionOfInterest=CheckedRegionOfInterest@entry=false) at ../tools/libclang/CIndex.cpp:214 #20 0x00007fff5df491b4 in clang::cxcursor::CursorVisitor::RunVisitorWorkList(llvm::SmallVector<clang::cxcursor::VisitorJob, 10u>&) (this=0x7fff5cab3800, WL=...) at ../tools/libclang/CIndex.cpp:3046 #21 0x00007fff5df4991b in clang::cxcursor::CursorVisitor::Visit(clang::Stmt const*) (this=this@entry=0x7fff5cab3800, S=0x7fff1b681180) at ../tools/libclang/CIndex.cpp:3248 #22 0x00007fff5df4356f in clang::cxcursor::CursorVisitor::VisitChildren(CXCursor) (this=0x7fff5cab3800, Cursor=...) at ../tools/libclang/CIndex.cpp:515 #23 0x00007fff5df4b22d in clang_visitChildren(CXCursor, CXCursorVisitor, CXClientData) (parent=..., visitor=<optimized out>, client_data=<optimized out>) at ../tools/libclang/CIndex.cpp:4441 #24 0x00007fff698b5cdd in (anonymous namespace)::Visitor::buildCompoundStatement<(CXCursorKind)144> (cursor=..., this=<optimized out>) at /usr/include/c++/10/bits/move.h:101 #25 (anonymous namespace)::visitCursor(CXCursor, CXCursor, CXClientData) (cursor=..., parent=..., data=0x7fff5cab53f0) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/builder.cpp:1606 #26 0x00007fff5df43a86 in clang::cxcursor::CursorVisitor::Visit(CXCursor, bool) (this=this@entry=0x7fff5cab3f50, Cursor=..., CheckedRegionOfInterest=CheckedRegionOfInterest@entry=false) at ../tools/libclang/CIndex.cpp:214 #27 0x00007fff5df486a1 in clang::cxcursor::CursorVisitor::VisitFunctionDecl(clang::FunctionDecl*) (this=0x7fff5cab3f50, ND=0x7fff1b67ef78) at ../include/clang/AST/Decl.h:2059 #28 0x00007fff5df435a7 in clang::cxcursor::CursorVisitor::VisitChildren(CXCursor) (this=0x7fff5cab3f50, Cursor=...) at ../tools/libclang/CIndex.cpp:507 #29 0x00007fff5df4b22d in clang_visitChildren(CXCursor, CXCursorVisitor, CXClientData) (parent=..., visitor=<optimized out>, client_data=<optimized out>) at ../tools/libclang/CIndex.cpp:4441 #30 0x00007fff698a6f55 in (anonymous namespace)::Visitor::buildDeclaration<(CXCursorKind)30, KDevelop::ClassFunctionDeclaration, true>(CXCursor) (this=0x7fff5cab53f0, cursor=...) at /usr/include/c++/10/bits/move.h:101 #31 0x00007fff698b19fe in (anonymous namespace)::Visitor::dispatchCursor<(CXCursorKind)30, (Decision)0, (Decision)1> (parent=..., cursor=..., this=<optimized out>) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/builder.cpp:972 #32 (anonymous namespace)::Visitor::dispatchCursor<(CXCursorKind)30, (Decision)0, (Decision)2> (parent=..., cursor=..., this=<optimized out>) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/builder.cpp:967 #33 (anonymous namespace)::Visitor::dispatchCursor<(CXCursorKind)30>(CXCursor, CXCursor) (this=<optimized out>, cursor=..., parent=...) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/builder.cpp:954 #34 0x000000000000001e in () #35 0x00007fff1b67f018 in () #36 0x0000000000000001 in () #37 0x00007fff18035f20 in () #38 0x000000000000001f in () #39 0x00007fff1b67d788 in () #40 0x0000000000000001 in () #41 0x00007fff18035f20 in () #42 0x00007fff5cab53f0 in () #43 0x00007fff5cab4480 in () #44 0x00007fff5cab44a0 in () #45 0x00007fff1b67da08 in () #46 0x00007fff5cab4810 in () #47 0x00007fff698b5d5f in (anonymous namespace)::visitCursor(CXCursor, CXCursor, CXClientData) (cursor=..., parent=..., data=0x0) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/builder.cpp:1608 #48 0x000000000000001e in () #49 0x00007fff1b67f018 in () #50 0x00007fff5cab4810 in () #51 0x00007fff5cab4640 in () #52 0x00007fff5df4444d in clang::cxcursor::CursorVisitor::handleDeclForVisitation(clang::Decl const*) (this=0x7fff1b67d788, this@entry=0x7fff5cab4810, D=0x1f) at ../tools/libclang/CIndex.cpp:676 #53 0x00007fff5df44648 in clang::cxcursor::CursorVisitor::VisitDeclContext(clang::DeclContext*) (this=0x7fff5cab4810, DC=0x7fff1b67d738) at ../tools/libclang/CIndex.cpp:637 #54 0x00007fff5df435a7 in clang::cxcursor::CursorVisitor::VisitChildren(CXCursor) (this=0x7fff5cab4810, Cursor=...) at ../tools/libclang/CIndex.cpp:507 #55 0x00007fff5df4b22d in clang_visitChildren(CXCursor, CXCursorVisitor, CXClientData) (parent=..., visitor=<optimized out>, client_data=<optimized out>) at ../tools/libclang/CIndex.cpp:4441 #56 0x00007fff698a8a05 in (anonymous namespace)::Visitor::buildDeclaration<(CXCursorKind)31, KDevelop::ClassDeclaration, true> (cursor=..., this=0x7fff5cab53f0) at /usr/include/c++/10/bits/move.h:101 #57 (anonymous namespace)::Visitor::dispatchCursor<(CXCursorKind)31, (Decision)0, (Decision)0> (parent=..., cursor=..., this=0x7fff5cab53f0) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/builder.cpp:991 #58 (anonymous namespace)::Visitor::dispatchCursor<(CXCursorKind)31, (Decision)0, (Decision)2>(CXCursor, CXCursor) (this=0x7fff5cab53f0, cursor=..., parent=...) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/builder.cpp:966 #59 0x00007fff698b8a0b in (anonymous namespace)::Visitor::dispatchCursor<(CXCursorKind)31> (parent=..., cursor=..., this=0x7fff5cab53f0) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/builder.cpp:701 #60 (anonymous namespace)::visitCursor(CXCursor, CXCursor, CXClientData) (cursor=..., parent=..., data=0x7fff5cab53f0) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/builder.cpp:1577 #61 0x00007fff5df43a86 in clang::cxcursor::CursorVisitor::Visit(CXCursor, bool) (this=this@entry=0x7fff5cab50d0, Cursor=..., CheckedRegionOfInterest=CheckedRegionOfInterest@entry=true) at ../tools/libclang/CIndex.cpp:214 #62 0x00007fff5df4444d in clang::cxcursor::CursorVisitor::handleDeclForVisitation(clang::Decl const*) (this=this@entry=0x7fff5cab50d0, D=0x7fff1b67d788) at ../tools/libclang/CIndex.cpp:676 #63 0x00007fff5df44648 in clang::cxcursor::CursorVisitor::VisitDeclContext(clang::DeclContext*) (this=0x7fff5cab50d0, DC=0x7fff180b6bd0) at ../tools/libclang/CIndex.cpp:637 #64 0x00007fff5df4386a in clang::cxcursor::CursorVisitor::VisitChildren(CXCursor) (this=0x7fff5cab50d0, Cursor=...) at ../include/clang/AST/ASTContext.h:1009 #65 0x00007fff5df4b22d in clang_visitChildren(CXCursor, CXCursorVisitor, CXClientData) (parent=..., visitor=<optimized out>, client_data=<optimized out>) at ../tools/libclang/CIndex.cpp:4441 #66 0x00007fff69898881 in (anonymous namespace)::Visitor::Visitor (update=false, includes=..., file=0x7fff1b64c150, tu=<optimized out>, this=0x7fff5cab53f0) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/builder.cpp:1478 #67 Builder::visit(CXTranslationUnitImpl*, void*, QHash<void*, KDevelop::ReferencedTopDUContext> const&, bool) (tu=<optimized out>, file=file@entry=0x7fff1b64c150, includes=..., update=update@entry=false) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/builder.cpp:1625 #68 0x00007fff698c1e9d in ClangHelpers::buildDUChain(void*, QMultiHash<void*, Import> const&, ParseSession const&, QFlags<KDevelop::TopDUContext::Feature>, QHash<void*, KDevelop::ReferencedTopDUContext>&, QHash<KDevelop::IndexedString, KDevelop::ModificationRevision> const&, KDevelop::IndexedString const&, ClangIndex*, std::function<bool ()> const&) (file=<optimized out>, imports=..., session=..., features=..., includedFiles=..., unsavedRevisions=..., parseDocument=..., index=0x5a55a0, abortFunction=...) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/clanghelpers.cpp:221 #69 0x00007fff698c1800 in ClangHelpers::buildDUChain(void*, QMultiHash<void*, Import> const&, ParseSession const&, QFlags<KDevelop::TopDUContext::Feature>, QHash<void*, KDevelop::ReferencedTopDUContext>&, QHash<KDevelop::IndexedString, KDevelop::ModificationRevision> const&, KDevelop::IndexedString const&, ClangIndex*, std::function<bool ()> const&) (file=<optimized out>, imports=..., session=..., features=..., includedFiles=..., unsavedRevisions=..., parseDocument=..., index=0x5a55a0, abortFunction=...) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/clanghelpers.cpp:135 #70 0x00007fff698c1800 in ClangHelpers::buildDUChain(void*, QMultiHash<void*, Import> const&, ParseSession const&, QFlags<KDevelop::TopDUContext::Feature>, QHash<void*, KDevelop::ReferencedTopDUContext>&, QHash<KDevelop::IndexedString, KDevelop::ModificationRevision> const&, KDevelop::IndexedString const&, ClangIndex*, std::function<bool ()> const&) (file=<optimized out>, imports=..., session=..., features=..., includedFiles=..., unsavedRevisions=..., parseDocument=..., index=0x5a55a0, abortFunction=...) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/clanghelpers.cpp:135 #71 0x00007fff698c1800 in ClangHelpers::buildDUChain(void*, QMultiHash<void*, Import> const&, ParseSession const&, QFlags<KDevelop::TopDUContext::Feature>, QHash<void*, KDevelop::ReferencedTopDUContext>&, QHash<KDevelop::IndexedString, KDevelop::ModificationRevision> const&, KDevelop::IndexedString const&, ClangIndex*, std::function<bool ()> const&) (file=<optimized out>, imports=..., session=..., features=features@entry=..., includedFiles=..., unsavedRevisions=..., parseDocument=..., index=0x5a55a0, abortFunction=...) at /home/luis/kde/src/kdevelop/plugins/clang/duchain/clanghelpers.cpp:135 #72 0x00007fff699173ad in ClangParseJob::run(QSharedPointer<ThreadWeaver::JobInterface>, ThreadWeaver::Thread*) (this=<optimized out>) at /home/luis/kde/src/kdevelop/plugins/clang/clangparsejob.cpp:233 #73 0x00007ffff6de70eb in ThreadWeaver::IdDecorator::run(QSharedPointer<ThreadWeaver::JobInterface>, ThreadWeaver::Thread*) (this=<optimized out>, self=..., thread=0x7fff4c004e10) at /usr/include/c++/10/bits/atomic_base.h:325 #74 0x00007ffff6de7669 in ThreadWeaver::Executor::run(QSharedPointer<ThreadWeaver::JobInterface> const&, ThreadWeaver::Thread*) (this=<optimized out>, job=..., thread=<optimized out>) at /usr/include/c++/10/bits/atomic_base.h:325 #75 0x00007ffff6de67d0 in ThreadWeaver::Job::execute(QSharedPointer<ThreadWeaver::JobInterface> const&, ThreadWeaver::Thread*) (this=<optimized out>, self=..., th=0x7fff4c004e10) at /home/luis/kde/src/threadweaver/src/job.cpp:65 #76 0x00007ffff6de613e in ThreadWeaver::Thread::run() (this=0x7fff4c004e10) at /usr/include/qt5/QtCore/qsharedpointer_impl.h:306 #77 0x00007ffff4181690 in QThreadPrivate::start(void*) (arg=0x7fff4c004e10) at thread/qthread_unix.cpp:342 #78 0x00007ffff33e1432 in start_thread (arg=<optimized out>) at pthread_create.c:477 #79 0x00007ffff3ca1913 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95 EXPECTED RESULT SOFTWARE/OS VERSIONS Operating System: Fedora 32 KDE Plasma Version: 5.18.5 KDE Frameworks Version: 5.75.0 Qt Version: 5.14.2 Kernel Version: 5.10.7-100.fc32.x86_64 OS Type: 64-bit ADDITIONAL INFORMATION -- You are receiving this mail because: You are watching all bug changes.