<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/89389>89389</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang][Index] crash on invalid code inside `TypeIndexer`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang,
            crash-on-invalid
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          5chmidti
      </td>
    </tr>
</table>

<pre>
    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)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW11v2zjW_jXKDZFAIvV5kQvHqTEFOvMGtTvvZUCRtM2tJGpJKpPsr1-QkixRtuM4dToFdoqglkX68DkPz5dICivFNxVjt15050X3V7jRWyFvI7ItOdX8Khf05Xa15QpwpRoG_sIKCMk3vMJF8QJqoTSjIH8BXuhvxXfGK7BlknloBkiBqw314KK_QNAPYs-_9_zZSCJXYC0kqHDJqw3QWwaaimvNlAa4ovbGmhcMeLG_2aYZSjMv9m9aMd3_sd_-EQ_emT97t8IlUzUmDBhZQQq8pGvRrKwLrJmH5vqlZqYjWHnoU9tKREVYrcECF4oBD92Dtbny0B3w4MKDC8Cea0Y0o9eV0MyKTe5yRnBj-sOk7Q4TwJ5w0WDDjxadkOTe_I2w91jAFAxQWjZEg4UQZgiwAtpCSO49dHdIwp4Ayf7dcMlUq4mH5vbu23TglTYaUMEUqIQGCmuu1i-madGpN9ZlIYQH05UHM3BtBjHf0dwIQZ-OwHUU_rZjv1HGCu6wtMy3cr61Ul6DTkRTUIu0xJpsLU77WzPEdY0lLplm8tq_9o0wmAC8wbxSelC21Qd40bxFAg78ew0BriinRrGdhnxTCcmo9QVRKS0xr_SYT87oxUZdNxXRXFTD8GacJ47z4oDZGYKVpdhL7oLWqPbGYVIK2Q1UiU5Wp0pDtJBASEAZbdqBNw2nzPrycE-sBzxYbpqSVVo5cIzy7bhTh5049xj-UmPyXUtMTKA52K-LOWhmpBfFU3ldS_EvRnT31YMLXpGioWy4sWzqWkjTY46V5tXmZuuhWeBnRozSWHMCciEKYPujmYdmXOFHXtbFIyk8NLeDtg1_iGr1UrNVp_wDluU9I4UH5y2BYNwXl4yaVuDBmbV1c5cKrj2Ytr0XUpS2FWbAi-5Wws7d28Zrf2u6vz5wdG_0nCnFpJ07L_b_xKYp9mAMPAi5wh6aG_9uFKNAVACDqikKUAteaSY9CI1nrTEvGO0i9MOXT7PlJ6CavOQaYJA3GyCZodkExa3WtTJYrAVsuN42-Q0R5TAnk6mzKUMZazG5oZtBmyOIxGoL8t4ubkaGAmhT1jtD8W9ar3qQYiNxOTLLg8aSN7wwSYyyvNmY77zapTRwfU1EWfOCmc8SV1RdUy5B_xvTvmXku4fuS8yrG1LXnZd7EPnAf_Z934-iPIAJTDFMgpFlqRfVXjxIXmmrx8oaPEyHThL_9SiUlgyXdprmwMay7LjRFzx3LP1bxZ_NDb6pcKFueEU8NEsgMoYfDGCDKdgkzsEEWSvjN1zRwthC-iQ47U32x-BkqYEzoIETNGkSx4eo-9pUDijlwfQsOD0OM3EmEkQemkUDDjRlZe1HYErDRWYkDJBLQdgNnaCYUgIjnCQ-sOotGiV3YguekxslbmIP3vnPoZ8kvgezQUzkisE5guSkmCxAkDhi4imamKRAYm6LiVOYYpI6whJXWAjDPAU4NyHjlDCYhrkrLJ0KQ_S0gjBF1FUwmygIaRifFINSGsY7McaLXJ9HMAgh_tFsciic20h_KJm82vk1K31rsgx8D81QOqgcTFVGJD2k8l8S1xdS-qKs9BfxRehByRBBDDtuJEMI0gh-LDv9xa_LEZxwhKYckXU04sj89rN6EEpxU-pezIRs-upZ4MMAP5MLGEUuF-GeveRwykW1Fpc2lV-Bi8jW4SMuoj0u0uhAfX65SPpTtQ2NtmjQNh5rS6I4CEM8hswryp7by8_mklebuag0e9btza0tSL6yNZOsIienbkLIUjSSsC-CYPNocG4INm0dGKdLU9nFJ9pWrfPRvM2kxC9f2dqdvJGOy5cyF8VXVrSAzOw4Q356ruWJzNb27lO3Ja3_HMjrSr_UVKChP0xH4k4HTlGemoIAV6J6KUWjhsdZUwFYTMbwrHgm2xt_csV1b4qm1Zij-fwiiDtBRzudqZj5XTuXJkx0yk2DTDrVDbJszO1XRhqp-BObLVdWBSHNc-EZyneR5P9x8f1bbZ5PL0_C9LlNC1GoETmDH_Z3ZsuVBxdG6B-Cst3DRzIU3oacbOKHNGHrDyFnJfETk4p9nH0co-CACl31ksUOGdCfkBHHGf1YMg4q_zfYAQwmqkcRhefEY96743F1LhNkTUYcPi8RL2AcO7kJQpcLGGYZPhUM7wR9cYLh-6f4FfxmlD7KISfKQeSCRjjL_R-2XUerI4486xacjjrxqMOJmuK9npxmxpqTgYxwQgbMMfzZZKjfWFHbJZO3cXKghLgkR9CPU9dioilJKcUfStK83Yo6UrTtt54odM5mIIoCl4FJEeqnUZD8DAaWNSMcF_w_ttoztd1BKg51m7mF5bLERfEnI1rIz2VdeGg-tD20y9ifK_2AuXRLz6Uue5MLmnFY3fv5F_7dxrCVxFyrw1LacvXYyPtPcHujv3fU3d_FbSULAzdBuhVyuM7WDH2IrVCscW8vJmO7pjGi7h8reKsVvLdoMmOMi6YwC12jcB8tQpbSJP7QANJq_Y9B_E1hIU6RW2hkUwPAjJ5dNpsJ35_UMxaA31I5_0ClGbhrN-5WHwlZgoP8VH3ca2_A7TxheHAY1q_akw3qcNm0a__C30rNmXqbX3d6J1O9g6neETm5SHJUb2expF2zO6TxxbTxHcN19xztHIaO4VJGiqcx3jtsD90MLlni7-zRInustTQz8Q4q-hDTxzl7_yszo2OJ84IdZ-hYrxNsvTcXGNHjXBD50MkF7u4pCVkUkV-G0UV3muY4m4d6_Cwmg9RlMpwwGRD2yzDpsvZ3shRNWYpYfnbq2TeEy4VPmyuHrVMUTwGvw_OXmEbJbR_3D2e9Mfws8tBs2OxGkwcAhnDEfiz6_9H3358Fp-ki-kSZuyyOprVrkObh_7yXBYnvetm0wPvVvSycFmfQD4PzF3JF_YU9seIDgaft0YoB-KS6ojTAyRHgexgn5eJsudrFiHhSIz5IVktBmFLG-OK37NPt75zOX2P0Hms8F5VqSib3xz_A___VJvOq92zrzWzS7heyU-PiEA6cOlUehiyJc2fry17S9vqE71rc7Tblx7N9kOcx2N8xrxa8YL9jIoU69iTUef0jKRiu-oX5B4k3Jf7cNqnRivShp92llrzaGIyntxyubdC5Zs9a4tFrAgvezZnBa-et9wDkOgCaTlbIwmP6W5mGhAPWP-73gKVi1Ma619bcz4UOoV0IGTaQw3ACPsvi-Bj4nbT2a1NTrJlRxjkM6lD_c9UL2ywwJP_QKbayeB1n7s7gGY403zLyvTdGm7cs_iMnOV_Fr61BLqzE3WaWKRNhOECPJ9CjDEfHoLfHe8-dhdVWMkwVXrPF0vGnI_3n9vrL8mHJ5FPPRBcE37JDdAYdURA6z71h4rJBYOYfjYjtdWeY3ZkOssXtKvxrye8UwJ3cDmWW2I3oUeB2irMkSMM8h6DEvPqhIVdCFKNhA-gGoMmp0BARevoQLswI9cenQiN_KoamGDw-mp89Ko2lfuwUOSWYptgR7FQIMfPzEEegFdlJO-Owe3ukNQziEEfDKP1bF1f0FtEMZfiK3QZJgCKURCi92t7mOYRxgPwAkwivE0aon_vRGtIIIrZG8RW_hT4M_TDIghClUXLjp0GaZzgneY4z6Mde6LMS8-LGgL0RcnNl3wK4te-CXRU4Z4Wyr69B2OV-6MG5-Sax2l6L6ppXT7jg1DRE91fy1mqdNxvlhX7BlVaDaM11YV-Ga0VF915014be6L57x0BUoBMIiKAM8Epxat9PG59ciP2rRha373_Dwar33wAAAP__ES5CJg">