Issue 89389
Summary [clang][Index] crash on invalid code inside `TypeIndexer`
Labels clang, crash-on-invalid
Assignees
Reporter 5chmidti
    This issue was originally posted by @hokein here: clangd/clangd#2016
This issue is for naming the unittest and the file `gh89389`.

```c++
namespace test18 {
template<typename T>
concept False = false; // expected-note {{because 'false' evaluated to false}}

template <typename T> struct Foo { T t; };

template<typename T> requires False<T> // expected-note {{because 'int' does not satisfy 'False'}}
Foo(T) -> Foo<int>;

template <typename U>
using Bar = Foo<U>; // expected-note {{could not match 'Foo<type-parameter-0-0>' against 'int'}} \
                    // expected-note {{candidate template ignored: constraints not satisfied}} \
                    // expected-note {{candidate function template not viable}}

Bar s = {1}; // expected-error {{no viable constructor or deduction guide for deduction of template arguments}}
} // namespace test18
```

Stacktrace:
```
clangd: /llvm-project/llvm/include/llvm/Support/Casting.h:109: static bool llvm::isa_impl_cl<clang::NonTypeTemplateParmDecl, const clang::NamedDecl *>::doit(const From *) [To = clang::NonTypeTemplateParmDecl, From = const clang::NamedDecl *]: Assertion `Val && "isa<> used on a null pointer"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /llvm-project/build/debug/bin/clangd --compile-commands-dir build/ --check=main.cpp
 #0 0x000055b12728a271 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /llvm-project/llvm/lib/Support/Unix/Signals.inc:723:11
 #1 0x000055b12728a76b PrintStackTraceSignalHandler(void*) /llvm-project/llvm/lib/Support/Unix/Signals.inc:798:1
 #2 0x000055b127288766 llvm::sys::RunSignalHandlers() /llvm-project/llvm/lib/Support/Signals.cpp:105:5
 #3 0x000055b12728af05 SignalHandler(int) /llvm-project/llvm/lib/Support/Unix/Signals.inc:413:1
 #4 0x0000736ddc25a770 (/usr/lib/libc.so.6+0x40770)
 #5 0x0000736ddc2ab32c (/usr/lib/libc.so.6+0x9132c)
 #6 0x0000736ddc25a6c8 raise (/usr/lib/libc.so.6+0x406c8)
 #7 0x0000736ddc2424b8 abort (/usr/lib/libc.so.6+0x284b8)
 #8 0x0000736ddc2423dc (/usr/lib/libc.so.6+0x283dc)
 #9 0x0000736ddc252d46 (/usr/lib/libc.so.6+0x38d46)
#10 0x000055b12732142a llvm::isa_impl_cl<clang::NonTypeTemplateParmDecl, clang::NamedDecl const*>::doit(clang::NamedDecl const*) /llvm-project/llvm/include/llvm/Support/Casting.h:110:38
#11 0x000055b1273213c8 llvm::isa_impl_wrap<clang::NonTypeTemplateParmDecl, clang::NamedDecl const*, clang::NamedDecl const*>::doit(clang::NamedDecl const* const&) /llvm-project/llvm/include/llvm/Support/Casting.h:137:5
#12 0x000055b127332d52 llvm::isa_impl_wrap<clang::NonTypeTemplateParmDecl, clang::NamedDecl const* const, clang::NamedDecl const*>::doit(clang::NamedDecl const* const&) /llvm-project/llvm/include/llvm/Support/Casting.h:127:5
#13 0x000055b127332cf5 llvm::CastIsPossible<clang::NonTypeTemplateParmDecl, clang::NamedDecl const*, void>::isPossible(clang::NamedDecl const* const&) /llvm-project/llvm/include/llvm/Support/Casting.h:255:5
#14 0x000055b127332db2 llvm::CastInfo<clang::NonTypeTemplateParmDecl, clang::NamedDecl const* const, void>::isPossible(clang::NamedDecl const* const&) /llvm-project/llvm/include/llvm/Support/Casting.h:509:5
#15 0x000055b127332d85 bool llvm::isa<clang::NonTypeTemplateParmDecl, clang::NamedDecl const*>(clang::NamedDecl const* const&) /llvm-project/llvm/include/llvm/Support/Casting.h:549:3
#16 0x000055b12c56144a clang::index::IndexingContext::handleReference(clang::NamedDecl const*, clang::SourceLocation, clang::NamedDecl const*, clang::DeclContext const*, unsigned int, llvm::ArrayRef<clang::index::SymbolRelation>, clang::Expr const*) /llvm-project/clang/lib/Index/IndexingContext.cpp:88:40
#17 0x000055b12c5a83b8 (anonymous namespace)::TypeIndexer::VisitTemplateTypeParmTypeLoc(clang::TemplateTypeParmTypeLoc) /llvm-project/clang/lib/Index/IndexTypeSourceInfo.cpp:55:5
#18 0x000055b12c5a82e9 clang::RecursiveASTVisitor<(anonymous namespace)::TypeIndexer>::WalkUpFromTemplateTypeParmTypeLoc(clang::TemplateTypeParmTypeLoc) /llvm-project/build/debug/tools/clang/include/clang/AST/TypeNodes.inc:77:1
#19 0x000055b12c56d7ef clang::RecursiveASTVisitor<(anonymous namespace)::TypeIndexer>::TraverseTemplateTypeParmTypeLoc(clang::TemplateTypeParmTypeLoc) /llvm-project/clang/include/clang/AST/RecursiveASTVisitor.h:1396:1
#20 0x000055b12c56669d clang::RecursiveASTVisitor<(anonymous namespace)::TypeIndexer>::TraverseTypeLoc(clang::TypeLoc) /llvm-project/build/debug/tools/clang/include/clang/AST/TypeNodes.inc:77:1
#21 0x000055b12c5655d2 clang::index::IndexingContext::indexTypeLoc(clang::TypeLoc, clang::NamedDecl const*, clang::DeclContext const*, bool, bool) /llvm-project/clang/lib/Index/IndexTypeSourceInfo.cpp:266:3
#22 0x000055b12c52499a (anonymous namespace)::BodyIndexer::TraverseTypeLoc(clang::TypeLoc) /llvm-project/clang/lib/Index/IndexBody.cpp:53:5
#23 0x000055b12c53a9b0 clang::RecursiveASTVisitor<(anonymous namespace)::BodyIndexer>::TraverseTemplateArgumentLoc(clang::TemplateArgumentLoc const&) /llvm-project/clang/include/clang/AST/RecursiveASTVisitor.h:897:7
#24 0x000055b12c532ba2 clang::RecursiveASTVisitor<(anonymous namespace)::BodyIndexer>::TraverseTemplateArgumentLocsHelper(clang::TemplateArgumentLoc const*, unsigned int) /llvm-project/clang/include/clang/AST/RecursiveASTVisitor.h:2068:5
#25 0x000055b12c5328da clang::RecursiveASTVisitor<(anonymous namespace)::BodyIndexer>::TraverseConceptReference(clang::ConceptReference*) /llvm-project/clang/include/clang/AST/RecursiveASTVisitor.h:2551:5
#26 0x000055b12c508517 clang::RecursiveASTVisitor<(anonymous namespace)::BodyIndexer>::TraverseConceptSpecializationExpr(clang::ConceptSpecializationExpr*, llvm::SmallVectorImpl<llvm::PointerIntPair<clang::Stmt*, 1u, bool, llvm::PointerLikeTypeTraits<clang::Stmt*>, llvm::PointerIntPairInfo<clang::Stmt*, 1u, llvm::PointerLikeTypeTraits<clang::Stmt*>>>>*) /llvm-project/clang/include/clang/AST/RecursiveASTVisitor.h:2941:1
#27 0x000055b12c4f9fe3 clang::RecursiveASTVisitor<(anonymous namespace)::BodyIndexer>::dataTraverseNode(clang::Stmt*, llvm::SmallVectorImpl<llvm::PointerIntPair<clang::Stmt*, 1u, bool, llvm::PointerLikeTypeTraits<clang::Stmt*>, llvm::PointerIntPairInfo<clang::Stmt*, 1u, llvm::PointerLikeTypeTraits<clang::Stmt*>>>>*) /llvm-project/build/debug/tools/clang/include/clang/AST/StmtNodes.inc:494:1
#28 0x000055b12c4e8d76 clang::RecursiveASTVisitor<(anonymous namespace)::BodyIndexer>::TraverseStmt(clang::Stmt*, llvm::SmallVectorImpl<llvm::PointerIntPair<clang::Stmt*, 1u, bool, llvm::PointerLikeTypeTraits<clang::Stmt*>, llvm::PointerIntPairInfo<clang::Stmt*, 1u, llvm::PointerLikeTypeTraits<clang::Stmt*>>>>*) /llvm-project/clang/include/clang/AST/RecursiveASTVisitor.h:683:7
#29 0x000055b12c4e8aed clang::index::IndexingContext::indexBody(clang::Stmt const*, clang::NamedDecl const*, clang::DeclContext const*) /llvm-project/clang/lib/Index/IndexBody.cpp:519:3
#30 0x000055b12c4e7a1b (anonymous namespace)::IndexingDeclVisitor::indexTemplateParameters(clang::TemplateParameterList*, clang::NamedDecl const*) /llvm-project/clang/lib/Index/IndexDecl.cpp:719:3
#31 0x000055b12c4e75c8 (anonymous namespace)::IndexingDeclVisitor::VisitTemplateDecl(clang::TemplateDecl const*) /llvm-project/clang/lib/Index/IndexDecl.cpp:0:7
#32 0x000055b12c4e7a4d clang::declvisitor::Base<llvm::make_const_ptr, (anonymous namespace)::IndexingDeclVisitor, bool>::VisitRedeclarableTemplateDecl(clang::RedeclarableTemplateDecl const*) /llvm-project/build/debug/tools/clang/include/clang/AST/DeclNodes.inc:502:1
#33 0x000055b12c4e55cd clang::declvisitor::Base<llvm::make_const_ptr, (anonymous namespace)::IndexingDeclVisitor, bool>::VisitFunctionTemplateDecl(clang::FunctionTemplateDecl const*) /llvm-project/build/debug/tools/clang/include/clang/AST/DeclNodes.inc:518:1
#34 0x000055b12c4e1ced clang::declvisitor::Base<llvm::make_const_ptr, (anonymous namespace)::IndexingDeclVisitor, bool>::Visit(clang::Decl const*) /llvm-project/build/debug/tools/clang/include/clang/AST/DeclNodes.inc:518:1
#35 0x000055b12c4e15eb clang::index::IndexingContext::indexDecl(clang::Decl const*) /llvm-project/clang/lib/Index/IndexDecl.cpp:783:8
#36 0x000055b12c4e1f42 clang::index::IndexingContext::indexDeclContext(clang::DeclContext const*) /llvm-project/clang/lib/Index/IndexDecl.cpp:795:9
#37 0x000055b12c4e3a5e (anonymous namespace)::IndexingDeclVisitor::VisitNamespaceDecl(clang::NamespaceDecl const*) /llvm-project/clang/lib/Index/IndexDecl.cpp:595:5
#38 0x000055b12c4e18b4 clang::declvisitor::Base<llvm::make_const_ptr, (anonymous namespace)::IndexingDeclVisitor, bool>::Visit(clang::Decl const*) /llvm-project/build/debug/tools/clang/include/clang/AST/DeclNodes.inc:170:1
#39 0x000055b12c4e15eb clang::index::IndexingContext::indexDecl(clang::Decl const*) /llvm-project/clang/lib/Index/IndexDecl.cpp:783:8
#40 0x000055b12c4e2041 clang::index::IndexingContext::indexTopLevelDecl(clang::Decl const*) /llvm-project/clang/lib/Index/IndexDecl.cpp:810:3
#41 0x000055b12c4dd1a7 clang::index::indexTopLevelDecls(clang::ASTContext&, clang::Preprocessor&, llvm::ArrayRef<clang::Decl const*>, clang::index::IndexDataConsumer&, clang::index::IndexingOptions) /llvm-project/clang/lib/Index/IndexingAction.cpp:285:22
#42 0x000055b12a2e76b9 clang::clangd::(anonymous namespace)::indexSymbols(clang::ASTContext&, clang::Preprocessor&, llvm::ArrayRef<clang::Decl*>, clang::clangd::MainFileMacros const*, clang::include_cleaner::PragmaIncludes const&, bool, llvm::StringRef, bool) /llvm-project/clang-tools-extra/clangd/index/FileIndex.cpp:83:3
#43 0x000055b12a2e74e4 clang::clangd::indexMainDecls(clang::clangd::ParsedAST&) /llvm-project/clang-tools-extra/clangd/index/FileIndex.cpp:224:10
#44 0x000055b12a2e9966 clang::clangd::FileIndex::updateMain(llvm::StringRef, clang::clangd::ParsedAST&) /llvm-project/clang-tools-extra/clangd/index/FileIndex.cpp:470:19
#45 0x000055b1296f699d clang::clangd::(anonymous namespace)::Checker::buildAST() /llvm-project/clang-tools-extra/clangd/tool/Check.cpp:268:24
#46 0x000055b1296f59a5 clang::clangd::check(llvm::StringRef, clang::clangd::ThreadsafeFS const&, clang::clangd::ClangdLSPServer::Options const&) /llvm-project/clang-tools-extra/clangd/tool/Check.cpp:514:7
#47 0x000055b1296c2909 clang::clangd::clangdMain(int, char**) /llvm-project/clang-tools-extra/clangd/tool/ClangdMain.cpp:976:12
#48 0x000055b127184bb2 main /llvm-project/clang-tools-extra/clangd/tool/ClangdToolMain.cpp:12:3
#49 0x0000736ddc243cd0 (/usr/lib/libc.so.6+0x29cd0)
#50 0x0000736ddc243d8a __libc_start_main (/usr/lib/libc.so.6+0x29d8a)
#51 0x000055b126e0b4a5 _start (/llvm-project/build/debug/bin/clangd+0x34164a5)
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to