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

    <tr>
        <th>Summary</th>
        <td>
            [clangd] crash when typing above a constrained variable template
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          XDeme
      </td>
    </tr>
</table>

<pre>
    clangd 18 keeps crashing while typing `template<typename T>` above a constrained variable template when there is a explicit variable template instanciation below.

```cpp
template <typename T>
concept Test = true;

//! e constant
template <typename T>
  requires(Test<T>)
constexpr T e_v = 2.718281828'4590452353'6028747135L;

constexpr double e = e_v<double>;
```

or

```cpp
template <typename T>
concept Test = true;

//! e constant
template <Test T> constexpr T e_v = 2.718281828'4590452353'6028747135L;

constexpr double e = e_v<double>;
```

Crash report:
```
[ERROR][2023-11-29 22:28:38] .../vim/lsp/rpc.lua:675    "rpc" "/usr/local/bin/clangd"       "stderr"      " #0 0x000056129f5aca88 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/local/bin/clangd+0x3e95a88)
 #1 0x000056129f5aa98c llvm::sys::RunSignalHandlers() (/usr/local/bin/clangd+0x3e9398c)
 #2 0x000056129f5ad3d8 SignalHandler(int) Signals.cpp:0:0
 #3 0x00007f727985c710 (/usr/lib/libc.so.6+0x3e710)
 #4 0x000056129f7a7757 clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::IntExprEvaluator, bool>::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
 #5 0x000056129f73915b Evaluate(clang::APValue&, (anonymous namespace)::EvalInfo&, clang::Expr const*) ExprConstant.cpp:0:0
 #6 0x000056129f735606 EvaluateInPlace(clang::APValue&, (anonymous namespace)::EvalInfo&, (anonymous namespace)::LValue const&, clang::Expr const*, bool) ExprConstant.cpp:0:0
 #7 0x000056129f735083 clang::Expr::EvaluateAsConstantExpr(clang::Expr::EvalResult&, clang::ASTContext const&, clang::Expr::ConstantExprKind) const (/usr/local/bin/clangd+0x401e083)
 #8 0x000056129fd89cd8 clang::ActionResult<clang::Expr*, true> calculateConstraintSatisfaction<calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_0>(clang::Sema&, clang::Expr const*, clang::ConstraintSatisfaction&, calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_0&&) SemaConcept.cpp:0:0
 #9 0x000056129fd8439f CheckConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) SemaConcept.cpp:0:0
#10 0x000056129fd84130 clang::Sema::CheckConstraintSatisfaction(clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) (/usr/local/bin/clangd+0x466d130)
#11 0x000056129fd86691 clang::Sema::EnsureTemplateArgumentListConstraints(clang::TemplateDecl*, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange) (/usr/local/bin/clangd+0x466f691)
#12 0x00005612a017d90c clang::Sema::CheckTemplateArgumentList(clang::TemplateDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo&, bool, llvm::SmallVectorImpl<clang::TemplateArgument>&, llvm::SmallVectorImpl<clang::TemplateArgument>&, bool, bool*) (/usr/local/bin/clangd+0x4a6690c)
#13 0x00005612a018333d clang::Sema::CheckVarTemplateId(clang::VarTemplateDecl*, clang::SourceLocation, clang::SourceLocation, clang::TemplateArgumentListInfo const&) (/usr/local/bin/clangd+0x4a6c33d)
#14 0x00005612a0184863 clang::Sema::BuildTemplateIdExpr(clang::CXXScopeSpec const&, clang::SourceLocation, clang::LookupResult&, bool, clang::TemplateArgumentListInfo const*) (/usr/local/bin/clangd+0x4a6d863)
#15 0x000056129fc67358 clang::Sema::ActOnIdExpression(clang::Scope*, clang::CXXScopeSpec&, clang::SourceLocation, clang::UnqualifiedId&, bool, bool, clang::CorrectionCandidateCallback*, bool, clang::Token*) (/usr/local/bin/clangd+0x4550358)
#16 0x00005612a2e86f6a clang::Parser::tryParseCXXIdExpression(clang::CXXScopeSpec&, bool, clang::Token&) (/usr/local/bin/clangd+0x776ff6a)
#17 0x00005612a2e88041 clang::Parser::ParseCXXIdExpression(bool) (/usr/local/bin/clangd+0x7771041)
#18 0x00005612a2e7b3c7 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) (/usr/local/bin/clangd+0x77643c7)
#19 0x00005612a2e7bc25 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) (/usr/local/bin/clangd+0x7764c25)
#20 0x00005612a2e7565f clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) (/usr/local/bin/clangd+0x775e65f)
#21 0x00005612a2eb9a6e clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) (/usr/local/bin/clangd+0x77a2a6e)
#22 0x00005612a2eb71e4 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::SourceLocation*, clang::Parser::ForRangeInit*) (/usr/local/bin/clangd+0x77a01e4)
#23 0x00005612a2e5b6cf clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/usr/local/bin/clangd+0x77446cf)
#24 0x00005612a2e5b0d1 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) (/usr/local/bin/clangd+0x77440d1)
#25 0x00005612a2e5a3b6 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/usr/local/bin/clangd+0x77433b6)
#26 0x00005612a2e588c6 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/usr/local/bin/clangd+0x77418c6)
#27 0x00005612a2e5491e clang::ParseAST(clang::Sema&, bool, bool) (/usr/local/bin/clangd+0x773d91e)
#28 0x00005612a2b02cb7 clang::FrontendAction::Execute() (/usr/local/bin/clangd+0x73ebcb7)
#29 0x00005612a05ac887 clang::clangd::ParsedAST::build(llvm::StringRef, clang::clangd::ParseInputs const&, std::unique_ptr<clang::CompilerInvocation, std::default_delete<clang::CompilerInvocation>>, llvm::ArrayRef<clang::clangd::Diag>, std::shared_ptr<clang::clangd::PreambleData const>) (/usr/local/bin/clangd+0x4e95887)
#30 0x00005612a0642c86 clang::clangd::(anonymous namespace)::ASTWorker::generateDiagnostics(std::unique_ptr<clang::CompilerInvocation, std::default_delete<clang::CompilerInvocation>>, clang::clangd::ParseInputs, std::vector<clang::clangd::Diag, std::allocator<clang::clangd::Diag>>) TUScheduler.cpp:0:0
#31 0x00005612a06465da void llvm::detail::UniqueFunctionBase<void>::CallImpl<clang::clangd::(anonymous namespace)::ASTWorker::update(clang::clangd::ParseInputs, clang::clangd::WantDiagnostics, bool)::$_0>(void*) TUScheduler.cpp:0:0
#32 0x00005612a063f150 clang::clangd::(anonymous namespace)::ASTWorker::runTask(llvm::StringRef, llvm::function_ref<void ()>) TUScheduler.cpp:0:0
#33 0x00005612a063ebb8 void llvm::detail::UniqueFunctionBase<void>::CallImpl<clang::clangd::(anonymous namespace)::ASTWorker::create(llvm::StringRef, clang::clangd::GlobalCompilationDatabase const&, clang::clangd::TUScheduler::ASTCache&, clang::clangd::TUScheduler::HeaderIncluderCache&, clang::clangd::AsyncTaskRunner*, clang::clangd::Semaphore&, clang::clangd::TUScheduler::Options const&, clang::clangd::ParsingCallbacks&)::$_0>(void*) TUScheduler.cpp:0:0
#34 0x00005612a07a3c72 void* llvm::thread::ThreadProxy<std::tuple<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1>>(void*) Threading.cpp:0:0
#35 0x00007f72798aa9eb (/usr/lib/libc.so.6+0x8c9eb)
#36 0x00007f727992e7cc (/usr/lib/libc.so.6+0x1107cc)
Signalled during AST worker action: Update
  Filename: /home/fernando/Codes/cpp/libs/test/main.cpp
 Directory: /home/fernando/Codes/cpp/libs/test/build/Debug
  Command Line: /usr/bin/g++ --driver-mode=g++ -g -std=gnu++20 -o CMakeFiles/test_clangd.dir/main.cpp.o -c -resource-dir=/usr/local/lib/clang/18 -- /home/fernando/Codes/cpp/libs/test/main.cpp
  Version: 33
"
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWktz2zgS_jX0BWUVCIivgw-yZM24NrNJWZpMbi4QbElYUyADgo7977cAUhJBvT3Z3anZqjxEEmh8_XU3uvFgVSWWEuDOC-69YHLDar0q1N23CazhJi2y9zueM7nMkB-jF4CyQlyxaiXkEv1YiRyQfi_NgxdiDesyZxo8OtbvJUi2BjT36IMXYsTS4hUQQ7yQlVZMSMjQK1OCpUZE2xH9WIFEegUKkKgQQ_BW5oILfaCpkJVmkgumRSFRCnnxY-DhiYdH7b8hbv7wsmzebLvu4bOfeSE5lBrNodLIoxOkVQ0evXeEkqn94yNoNGFSXyQcIQXfa6Gg8khsRvDo2H4lyXb0SsNbqdAcwfOrBUAGkR-T2Pz1SDQMEjwMCA2oR6IQkzgaRj4NPvUg7gRlRW0YAysLnl89Om5emXG3nTY0dWUU6i_CpJVgBKO_FD9jEwFIQVko7dE-Te1jcP_w9PT5yQsmXnBPMKG3vn9LEkSIR0ck9uiIxl4wQYPBwCPTV7H2yDSvSo9MVckHec08OgqjwMOJR4gquUdI89sj07pSpnXBWe6RaSqkR6ZNmG5bVToDpbaPyCMUI_yGMcZB6JNkETDO4hjl-eva6EBH1XvV_PiihNQzzfjLXDEOHol3jRT78VxUWgFbeyT0yBgJqT2SIM8Y4SSwe_xGIQlYHG-93qDye6hYEvNDqJ5qORNLyfJfmcxyUJUd8fKBaRJzZ2DSGzijWYycITwSt9o1r6uBCQE6wvbvVhBtBUWLiERJHPDIxy4skTb_8kFVDMIWUeRjB8_QwROxKAoiZHVoCJjptf4qKqELdc8qM8vuWFqzF3i2rv1camXM4pGYyUK-r4u6QiZAq9LaMmk6PEr98Faqh1eW10wXtktaFLn1fdPAjuSRuAegCUSPjAwrRsK4Dd7D1ASuTjTxgxS1g4IrffTlK8traL3qDHwj4lEuirZ1R4zBdCXIsAcyCHG4Bfkov-RNEPwkrGdaf7KSNxqc0a612UVaRn0tcUz7oneAjeqjaiPRfnMYcFs_QVXnB-COZvNxITW86VMKNb-6Y_1DyMxoZTtdFuFD7AOOqRNRsaNyFic8ix143BQPLXg67sNqGG6S1wPiLOe1SUzjTQmjZ0yLasGsFNP_TAs3mGDN9un4J1tDNgGeO0buditqxeFTwVkj0vn4W51r8QleIZ-3SXSklvUapP4kqpMmODbcMU3Crb96ZPiMbSVzXrsPjjQ-y_3fmFnzIrQpCNZs3FRWhwM86Xn7kCYLNF4Bf_nZrO3yzkgp9v4Ei_3o2XUwvtHtM1uzPP8KXBfqcV3mhwPPdOqD-ZgRGrs-MbmEK0xwmm5TtuA-3T7FqE9oM86lNvj_ZfuyKT4MM5_uiiZjBb9nhTBM_MNWeJBVreCQLjtklWuPTWNjkv0I_gkEXa74Ikx8R_Fu9cqwH2UJ5ifc7xDEa5Q9OTseEt6peJoa5WKn7EvbeeefFrBB0vw_utwALAwTzB0DUNcAMaU0O2GAr0xtcD1mLvOdTx8g_0OW6Xjn5RRwSjOHgmGPgmEc0sMU3Nciz3b679eT42_fZrwoYVYCPx06RzT9VBQvdekUohtrX8HHVS6RxSF1-HBXOzyMaBAf5mPE9WfZ8ABVtZ-MDRUHaoYOSVfS87v8XrNcLARkxv0ORENvslYK7AQ9ZjITmSm9WJ6njL84Cw-X3OIF5FUcBgGmQexw2F2MMQJxuAhZd5AvTFXQLhm0ereP42_fjnN5gLTj2C-PhygKF4uQOdijHvYYD_1j2I8A36znLsQQ-Xjo5oXYxRCllEenMbBKH-Ou29i0s8_N4qzvPn1v7Hadv5d2mJm2q_6Pz8NRFA4pjxyFk77CnAR_K4U5CboKE9xTOAiDxUmFR3aL30x3l6jdw34x0ADCYOEA9V2gacJCOAnUZD-m7PQ1WmhQm-dCjWQ20lqJtNbQK9J2jU7bxP7e5SA3CR7tNS2UrdUepbgqPUQRIywEhw_S4yPyYXiWj19UUZf71hJyab4ezgQ7Strdl0MKOoSeyyX9TPSTKMI-DB2KqEtRkIb8tG8bVT-raS1tsprA4lFqUNKMuOfgJzW-rMVJ2kecQ1WZbybPqiuIGA5D7sbOsE8Ezk6nkk7sOHwIKfYXmv8ROvo-8mfowJmT1UjQo4PRNDxJx8Nb4wYdWv47FFyuJKVp6CjZK32COOanlZwXpV1_NquGrnafS_a9hi9auSuj7YRiNxEOLPp3FepvRVbn8LguC7VJBdcUR0M_5q52veIoGCb-fjYYzeZHt6XcHHoxEpolvjsPuyVSiglPnRJpqsysKbNRu7Hb7JQAr-2RxeVDU0h56hQrxClWcMB4HDtDt927_jebN4-pWUI5Z3EzrYRcGlO6RtwT8ijLWldOuqt026CW4nsN9tTIcZVxsS5FDupRvnZWFNtuGSxYnevnDHKwJ_6nu9KHvY2pw5tZXewTwZZtt-241YopyPbhOjorYOs0hwnT7YWD5qT9wkUJJEEcO2ZzTk4ZDoeEx-Exxs-c74xm8z8K9bKJ4yVIUGbhL9hSFpUW3JQ3_yvrnHciZ5hXuwFzxoDdDiw3tJ_v0wJK0Pz3GV-BmYnUwV1Y5_TYWCYMMoZeC5F1PC0DzUS-WQcbQjf5sT1HNe23B59mnbu_p_RxC9dltnfWeYLcI63-YFI7PrKdBzeYtscwVpsmFZ2lz91FDOnCD_DPcWxVyzmrXo5PWLvXi9Yaz8rOBtZ6zUR7qRfQnhqQpvFfywu4gsYLrpu-f8mLlOVNyNpYNXNayqqjB8Tdzh3atpjGjK_gym6_AsvMfMHzOgN1gYRR9S65sf5TLSWo_dKw29hk-HJVqGtRfS4NH9UlRLR12mYHqzpyfnlN4LhbnxGjPCKoFdBxOr1SwDYa2N9fVPH27tHxdk7UdZnDcTfrc7kJLvve8af5DyFdv9h9a_PIJtIORdmODn8z_zqMWPRCLg_zEbh3YBhLID17BybmCaROog0dMQmBiPOzYnwfR3y3Od_c1ckhQ1ltIgyNZnP0w8Yi2pzVj9DvzbTc3s6bitzeYjNfPDJdFWvwyHRhlhAyKzwyHReZWQFMjfJ2fPOgwVA9XTMhB9vLcWgilM2L7x8S1pZ50wmk9XIDb1ys10xm6JOQG4gNHU31svTIvUfu0e1tpsQrqNt1kYFHJ9v3S3Rr_W2ylHXzjmB0W6Dxb-wFjO4bAM-N6w0yoTqKDQp0y9GtgspuC9yar3SyV0o1tmn8mEz9GN3e_mky0VdQVWsySjeOQnpX7m6yO5olNGE3cOdH2Kc4SjC-Wd3RmJMgSjlPwjCCOCVxinnAQp74OGJ-fCPuCCbU9ynGPvWHeJDhCBbcTxYJHXLuD70hhjUT-cAE06BQyxtRVTXcRTSOg5ucpZBX9u4sIRJ-IPvRAAwmN-rO9LlN62XlDXEuKl3tpGihc3vptg32YNJcrG3vwDaXai-6NXtTq_xupXVpL8rZe5VLoVd1OuCFvVRoZoHmv9tSFf8Cbni2QA3vVpF_BwAA___rbly1">