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

    <tr>
        <th>Summary</th>
        <td>
            [Clang] Crash on constraint for lambda in lambda with init-capture
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

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

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

<pre>
    The following C++20 code causes a crash in Clang trunk:

```c++
template <class>
void f() {
    [i{0}] {
        [] () requires true {}();
 }();
}

int main() {
    f<int>();
}
```

See https://compiler-explorer.com/z/6W4To8dco.

Assertion:
```console
clang++: /root/llvm-project/clang/include/clang/AST/DeclCXX.h:1127:
const clang::LambdaCapture* clang::CXXRecordDecl::getCapture(unsigned int) const:
Assertion `isLambda() && I < capture_size() && "invalid index for capture"' failed.
```

<details>

<summary>Stack dump</summary>

```console
0.      Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -fno-verbose-asm -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -std=c++20 <source>
1.      <eof> parser at end of file
2.      <source>:2:6: instantiating function definition 'f<int>'
 #0 0x0000000003e98398 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3e98398)
 #1 0x0000000003e96054 llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3e96054)
 #2 0x0000000003de2458 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007d78da842520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007d78da8969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #5 0x00007d78da842476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #6 0x00007d78da8287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #7 0x00007d78da82871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
 #8 0x00007d78da839e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
 #9 0x00000000067822cf clang::Sema::addInstantiatedCapturesToScope(clang::FunctionDecl*, clang::FunctionDecl const*, clang::LocalInstantiationScope&, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x67822cf)
#10 0x0000000006bab5df clang::Sema::LambdaScopeForCallOperatorInstantiationRAII::LambdaScopeForCallOperatorInstantiationRAII(clang::Sema&, clang::FunctionDecl*, clang::MultiLevelTemplateArgumentList, clang::LocalInstantiationScope&, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6bab5df)
#11 0x0000000006790c82 clang::Sema::CheckFunctionConstraints(clang::FunctionDecl const*, clang::ConstraintSatisfaction&, clang::SourceLocation, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6790c82)
#12 0x0000000006db3b65 clang::Sema::AddMethodCandidate(clang::CXXMethodDecl*, clang::DeclAccessPair, clang::CXXRecordDecl*, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool, llvm::MutableArrayRef<clang::ImplicitConversionSequence>, clang::OverloadCandidateParamOrder, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6db3b65)
#13 0x0000000006dc1442 clang::Sema::AddMethodCandidate(clang::DeclAccessPair, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, clang::OverloadCandidateParamOrder) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6dc1442)
#14 0x0000000006dd18f2 clang::Sema::BuildCallToObjectOfClassType(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6dd18f2)
#15 0x00000000069e7663 clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x69e7663)
#16 0x00000000069e7f4c clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x69e7f4c)
#17 0x0000000007045bd8 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
#18 0x0000000007033d62 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#19 0x0000000007061657 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformStmt(clang::Stmt*, clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::StmtDiscardKind) SemaTemplateInstantiate.cpp:0:0
#20 0x000000000706226e clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#21 0x0000000007033154 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformLambdaExpr(clang::LambdaExpr*) SemaTemplateInstantiate.cpp:0:0
#22 0x00000000070344ae clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#23 0x0000000007045b06 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
#24 0x0000000007033d62 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#25 0x0000000007061657 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformStmt(clang::Stmt*, clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::StmtDiscardKind) SemaTemplateInstantiate.cpp:0:0
#26 0x000000000706226e clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#27 0x000000000706b274 clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x706b274)
#28 0x00000000070e30c2 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x70e30c2)
#29 0x00000000070e0fee clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x70e0fee)
#30 0x000000000664cd6d clang::Sema::ActOnEndOfTranslationUnitFragment(clang::Sema::TUFragmentKind) (.part.0) Sema.cpp:0:0
#31 0x000000000664d562 clang::Sema::ActOnEndOfTranslationUnit() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x664d562)
#32 0x00000000064b7dfb clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x64b7dfb)
#33 0x00000000064aa1ba clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x64aa1ba)
#34 0x000000000485a108 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x485a108)
#35 0x0000000004b211e5 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4b211e5)
#36 0x0000000004aa498e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4aa498e)
#37 0x0000000004c0fc3e clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4c0fc3e)
#38 0x0000000000d5c7ef cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xd5c7ef)
#39 0x0000000000d5426a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#40 0x00000000048a0719 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#41 0x0000000003de2904 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3de2904)
#42 0x00000000048a0d0f clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#43 0x0000000004863e8d clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4863e8d)
#44 0x0000000004864f0e clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4864f0e)
#45 0x000000000486cec5 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x486cec5)
#46 0x0000000000d595e3 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xd595e3)
#47 0x0000000000c2b854 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xc2b854)
#48 0x00007d78da829d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#49 0x00007d78da829e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#50 0x0000000000d53d15 _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xd53d15)
```

</details>


</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsW1tzI6kV_jX4hZKrm74_-EEjjzazmSk7I28ybyoaaIlMC3qB9tj761NAS32R5BmnrM1uki1vjdTAuXx8HA70EdaabwRjNyB5B5LbK9yarVQ3n_CGCYMfFGNb2Wp2VUr6fPOwZbCSdS2_cbGBC4DeAfQOBZBIyiDBrWYaYkgU1lvIBVzUWGygUa34CqI5CNxfGvg_4keDYG7YrqmxYRBEC1JjrUH0HgTzR8kprADKASogyGxPCCEEyTsOsncByG5Bcjto6BrdQz9IsV9brpi2JjDXM7v1TSByoybf7VdnJBcG7jAXR8orEC24MNbA43F7z7yMFWNwa0yjretoCdCSyF3Da6Zm7KmppWLqmsgdQMvfAFqm_4gfZE6JvPaj51ozZbgUHXAH1KTQsmYgmBMLbodhNIcALZWUBqBlXT_uZo2S_2TEfu36LbkgdUvZ4Ml89QDQ8paRevHly_UWRPMwRJlXaPUY6HtGcxDNP-JdSfECN6ZVDKD5sG3x5ctnRqSiVpZ_tGHm0DdvheMYhRY6VEAn3Os5-AlBGnDttexhRylAKfxgeQGJl7bW_Dc2bgcIcfGIa27lU_YEK6n23QFCAGWwwrxm9Pp4kkC0oMxgXnec8490u9th9Qyi9yuDyVdI210DogVAy75lyubDvATXICjuldwovINYbdodE0Z3UyQbc4oI-0mZ4T0ceuaXDVqWlobLwWzD2YZ-w6qaxXC2gTNp5eKmsdJb07TmWsPZzpIAzmZPeTrDejfTz8LgJxDdcmFYDWeVkLNHpkqpmW2HsxWczTaEzIyUNdla6ke3L9prO2uBG72VBs4qImupZpTjjZDacKK9DhcKxo-1oSC6JYfYYfGWrSLMgxpa-EC0YLIC0XvYYKWZgthAJiiUFay4Qxl13fqh0RyBaJ5aoLnQBgvDsbFhqmoFcQyjrOKCe7KhbLiUMxcMUBTA4CnY_xexIo-KHFooPan1s_Yf7hUXxnHjQWFi-dh3UvjbWmqjGN45gi72rHesfRMGAPQueOrMs0HIGx9OjE-DJD5l_KJmWLTNnVjxjcD1cH3W0qq4hKnWmN5UNDKVMhQnOVxYrtg48sjUs7ftL1jQ2mrMOwxHfRZSGPZkrknTgGgeuP-9_KiTn9EspziPUWKJ5pyqeQnQ8ilP12k8q7lon2Yb0foGcq3ldepMdkN6g-OxwCItKgIbs1UM0_VXXtevk-7G99KTqblxlsKNdhC81uw4S3vB6VgwyrMqgriUyrxOrBvYi82OxIblqwWGZS8wHwuMClakrxPohvQCiyHB0ixHiFTDHWvFdth_wpR-OIQLRrtNSz_IFZGNXdmDUcsukrhtDs3t2j7T2m1xR30-SoLrXh-XolOTTjp-amvDP7JHVj902dG820o-crsxe_HpBRZrh5bH0oaVUVBMS1wm9AyWfvd2Hi2lWuC6vmuYwkaqkcuf5x8-vH7AaCacziPQXp6flyF91USVUtaXgN6D20MfjmlcBCRHp6FfbBn5uvd_YdmhMLd5x1kCn6NoP3iFDdcVdiOOwV65ndfi5Nsvh4r3u0dltHuktIzKNDmNypzST8xsJV1gQTnFZrKgF1---PbTjLFP54Qwre8xV1OcRknv0di_tbh-eLaMGT1-_9So_TZsj14V7_Hr9-q5Uvj5M6v8gWg0Fs1dxjISevfIVC1x7-WKmRFT-397HZ9ag8uanVb1YdfUnHCzkOKRKW3pz35tmfCp1ne032OFd3eKMnVJVvh571kRjVlBwjg-s1a-x4oXp_0PNq8_Og8XwN8h3OMfj_GnYV6dwf9dy2tqg_2DvCvtKfWucqB5WEdh3sfc6draA_a9gPSDZD-L_1TiBUB0MPUgJiMQC5alafQdEL31f2DUzhkxDk1vj61Hr8c2nWJbxeRMgCDmTvyJsb0IllVMeiyzIZZZECclzYemPCjGHhQWupJq565OciykeN7JVkOBd0w37txcdN27hKxPuKTyZ3onq5Nzekb6p85zO4vH4tjkkGh9yMc-RBFN0cV9OLb_37K9GNuehmmSXdz2ldmZyWpwT6a0f0vlVsMt1wQr-lcu6KtQQsEEJYRSdnmWyl0jW0GP0Rq3zIex78d9CqesDZP44j75c9oxd4fPX8dghCZ-xDG-_Ny8zepD0VH0C9I_WfRD8Z83-qHk_9HvB1BK_wuj3yTvSEuUxadzuFVbavOjc_afu23rfDhkVmiSlbAoIGeOUQOk-nud_RuOidcvpY0nbs2mtwYXStE793rnJ2kNCyrGTjt_z5Sl2z0TlIvN6KJOA5RfzmBr0sHg8QujNI0JTekLZ4r3gt5Vbq3UztRfBDdLhTeWaScuOP3S-mXfYx8CAMqvG6zMdbBfPMcrZfw2KE1jmqTnrkPOWXZ4zfq2ZwlvS4_h-DovLjNalUNL790rwMHnB9m4teoJO0TtrsG_tuzeqPFxynb8Scm2cQet9yfuMg9gfJK0rdmHXSOVWRl3NXSRS3bvZg_C-PYqxjgs8REI7oX9mWvwS5-mvUm9waP8Ic4THAb5-BqZsp-YmJN9EYPd6xlpDeseXYRcnSG9maNUIS5RGLLRXfFSSWGYoCfsvJCF3obewtE2HWMcFzmDk33T6vQxjrDTWJ536SL87ezsvRhtzDEJKhKx8d2Es7d35vGwGU2ThJGzF7nO6OzrrR9tugFNSMYqSEi47oqATt_gbrHqX6J0VzWjZ2gBHyWnl3HCW9n7UEx8iFGK4R72Rfjg4sLAk9UO1_XfGTFSfdg19UmH0vGdlZXRvXQf5URU8UemjjehOBgHCRxkYeEgGQjdl2eslUPVte6Lq7rskuC6LjH5uq7EOLB7xR11FuFC7nZY0OkqPjl7rgzFPpON1Y4tAANwjOJi020XfmoPA9Zr8vQUhv5LiTUna-26dxCOOtsHa6MwN3rfPBGH69ouBakG7bbLIBGbj4qmojlAWd0VSmU9VCjfl2_8LMsTkxFOiy6KYFgfcqq0wrd8bsUKV6x-HmH58rxdoIjEW3wgfIym5KLB6L30_xw5JonhaRZEY9TSiOX0LGpu1vDRzriHchS6JwNth0GQWLygY9h1PnnDfnDsbbME53ZPpUkyk8ZVwF4Lys-y1OcR-VmWk6PkMLAex-IDAxrMVVep9goQO5r8LlBasHookwmUhJHknNm3g8-jBOFEZnBuCn5HKC-QrTp4evDSyR5eJKx7_bfPRPbGu1Ay7wLB93foN889rGW93aPsLyCozJPYFVC_tWIvulc8KRxDBS1eWejnhvQCi6lAFgdwvbZj1tpgZdYDt35YBYt7FUkwmeSIhgn0wt9-nqzwTvVR5TNAy2nx8xW9iWgRFfiK3YRZHIRxgpLiantDaEnzJIoQKVOcFVFFClZlQZkGJArClFzxGxSgJEAoDKM4SIrrnAQ4qyKCclwkVZKCOGA7zOtry9ZrqTZXXOuW3YQoD7PkqsYlq7X7FQJCnR8IJLdX6sYVtJftRoM4qLk2uhdhuKndTxfcTw1AcusrRKEUnv6ujskVhPuECXKx__SNmy3kgptZVyt-1ar6Zlyxv-Fm25Zdmb5bZUfl9c4JDdCy8-PxBv0rAAD__7r0Ne0">