Closed
Description
Hello,
(EDIT: It seems that this particular issue only happens on my RHEL7 environment and doesn't happen in RHEL8, I am not sure how this impacts clangd)
I am experiencing an issue with clangd 17 and 18rc1, where I have the following log (recursion exceeding stack limits):
I[17:21:52.405] Building semantic highlighting
#0 0x000000000054e69b llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x54e69b)
#1 0x000000000054bc5b llvm::sys::RunSignalHandlers() (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x54bc5b)
#2 0x000000000054bd85 SignalHandler(int) Signals.cpp:0:0
#3 0x00007f298e5a85e0 __restore_rt sigaction.c:0:0
#4 0x000000000067e34f clang::DeclContext::lookup(clang::DeclarationName) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x67e34f)
#5 0x00000000017b03a5 clang::clangd::HeuristicResolver::lookupDependentName(clang::CXXRecordDecl*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b03a5)
#6 0x00000000017b099c clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b099c)
#7 0x00000000017b0cae clang::clangd::HeuristicResolver::resolveNestedNameSpecifierToType(clang::NestedNameSpecifier const*) const (.part.0) HeuristicResolver.cpp:0:0
#8 0x00000000017b15bb clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b15bb)
#9 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#10 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#11 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#12 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#13 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#14 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#15 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#16 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#17 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#18 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#19 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#20 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#21 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#22 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#23 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#24 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#25 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#26 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#27 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#28 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#29 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#30 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#31 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#32 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#33 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#34 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#35 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#36 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#37 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#38 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#39 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#40 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#41 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#42 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#43 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#44 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#45 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#46 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#47 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#48 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#49 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#50 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#51 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#52 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#53 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#54 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#55 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#56 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#57 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#58 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
(Skipping repetitive lines ...)
#249 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#250 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#251 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#252 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#253 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
#254 0x00000000017b13c0 clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b13c0)
#255 0x00000000017b093e clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const (/grid/common/test/llvm-v17.0.6d1rh74_lnx86/bin/clangd+0x17b093e)
By attaching gdb, I can see the beginning of the stack, 104461 frames away:
#104435 0x00000000017b13c0 in clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const ()
#104436 0x00000000017b093e in clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const ()
#104437 0x00000000017b13c0 in clang::clangd::HeuristicResolver::resolveTypeToRecordDecl(clang::Type const*) const ()
#104438 0x00000000017b093e in clang::clangd::HeuristicResolver::resolveDependentMember(clang::Type const*, clang::DeclarationName, llvm::function_ref<bool (clang::NamedDecl const*)>) const ()
#104439 0x00000000017b105e in clang::clangd::HeuristicResolver::resolveDependentNameType(clang::DependentNameType const*) const ()
#104440 0x000000000176aac5 in clang::clangd::(anonymous namespace)::TargetFinder::add(clang::QualType, clang::clangd::DeclRelationSet) ()
#104441 0x000000000176b734 in clang::clangd::allTargetDecls(clang::DynTypedNode const&, clang::clangd::HeuristicResolver const*) ()
#104442 0x000000000176be3c in clang::clangd::explicitReferenceTargets(clang::DynTypedNode, clang::clangd::DeclRelationSet, clang::clangd::HeuristicResolver const*) ()
#104443 0x000000000176d3c0 in clang::TypeLocVisitor<clang::clangd::(anonymous namespace)::refInTypeLoc(clang::TypeLoc, clang::clangd::HeuristicResolver const*)::Visitor, void>::Visit(clang::UnqualTypeLoc) ()
#104444 0x0000000001770eff in clang::clangd::(anonymous namespace)::ExplicitReferenceCollector::visitNode(clang::DynTypedNode) ()
#104445 0x00000000017716d1 in clang::clangd::(anonymous namespace)::ExplicitReferenceCollector::VisitTypeLoc(clang::TypeLoc) ()
#104446 0x000000000177bbb3 in clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::ExplicitReferenceCollector>::TraverseTypeLoc(clang::TypeLoc) ()
#104447 0x00000000017847b9 in clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::ExplicitReferenceCollector>::TraverseTypedefDecl(clang::TypedefDecl*) ()
#104448 0x0000000001773a5a in clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::ExplicitReferenceCollector>::TraverseDeclContextHelper(clang::DeclContext*) ()
#104449 0x0000000001772060 in clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::ExplicitReferenceCollector>::TraverseDecl(clang::Decl*) ()
#104450 0x0000000001782f3d in clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::ExplicitReferenceCollector>::TraverseClassTemplateDecl(clang::ClassTemplateDecl*) ()
#104451 0x0000000001773a5a in clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::ExplicitReferenceCollector>::TraverseDeclContextHelper(clang::DeclContext*) ()
#104452 0x00000000017730e3 in clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::ExplicitReferenceCollector>::TraverseDecl(clang::Decl*) ()
#104453 0x0000000001773a5a in clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::ExplicitReferenceCollector>::TraverseDeclContextHelper(clang::DeclContext*) ()
#104454 0x0000000001773555 in clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::ExplicitReferenceCollector>::TraverseDecl(clang::Decl*) ()
#104455 0x00000000017835a3 in clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::ExplicitReferenceCollector>::TraverseTranslationUnitDecl(clang::TranslationUnitDecl*) ()
#104456 0x0000000001773bab in clang::clangd::findExplicitReferences(clang::ASTContext const&, llvm::function_ref<void (clang::clangd::ReferenceLoc)>, clang::clangd::HeuristicResolver const*) ()
#104457 0x000000000187ef0c in clang::clangd::getSemanticHighlightings(clang::clangd::ParsedAST&, bool) ()
#104458 0x0000000001611bf3 in clang::clangd::check(llvm::StringRef, clang::clangd::ThreadsafeFS const&, clang::clangd::ClangdLSPServer::Options const&) ()
#104459 0x0000000001603241 in clang::clangd::clangdMain(int, char**) ()
This crash can be simply reproduced using the following snippet:
extern "C++" {
#include <memory> // for std::unique_ptr
}
Removing the extern "C++" {} block fixes the issue.
From the versions I have locally, it seems the bug started to appear in the version 17 of clangd, as clangd v16.0.6 works fine but clangd v17.0.1 and onwards crashes.
The same bug is still present in clangd v18.1.0rc
Regards,
Metadata
Metadata
Assignees
Labels
No labels