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

    <tr>
        <th>Summary</th>
        <td>
            [clang] Crash when calling object of type obtained from lambda in unevaluated context
        </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 on clang 17:
```cpp
template <class>
struct A {
    template <class U>
    using Func = decltype([] {return U{};});
};

A<int>::Func<int> f{};
int i{f()};
```
Compiler Explorer: [https://godbolt.org/z/74q87Kfjf](https://godbolt.org/z/74q87Kfjf)

Compiler output:
```
clang++: /root/llvm-project/clang/lib/AST/Decl.cpp:2503: clang::APValue* clang::VarDecl::evaluateValueImpl(llvm::SmallVectorImpl<std::pair<clang::SourceLocation, clang::PartialDiagnostic> >&, bool) const: Assertion `!Init->isValueDependent()' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: /opt/compiler-explorer/clang-assertions-17.0.1/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-13.2.0 -fcolor-diagnostics -fno-crash-diagnostics -std=c++20 -emit-llvm -Xclang -disable-llvm-passes <source>
1.      <eof> parser at end of file
2.      <source>:8:5: LLVM IR generation of declaration 'i'
3.      <source>:8:5: Generating code for declaration 'i'
 #0 0x00000000036e7558 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x36e7558)
 #1 0x00000000036e53dc llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x36e53dc)
 #2 0x0000000003632918 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f729cc42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007f729cc969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #5 0x00007f729cc42476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #6 0x00007f729cc287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #7 0x00007f729cc2871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
 #8 0x00007f729cc39e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
 #9 0x0000000006e29bd3 (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x6e29bd3)
#10 0x0000000006e29c25 clang::VarDecl::evaluateValue() const (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x6e29c25)
#11 0x00000000039de21b clang::CodeGen::ConstantEmitter::tryEmitPrivateForVarInit(clang::VarDecl const&) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39de21b)
#12 0x00000000039de5d1 clang::CodeGen::ConstantEmitter::tryEmitForInitializer(clang::VarDecl const&) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39de5d1)
#13 0x0000000003ab0867 clang::CodeGen::CodeGenModule::EmitGlobalVarDefinition(clang::VarDecl const*, bool) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x3ab0867)
#14 0x0000000003ad2831 clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x3ad2831)
#15 0x0000000003ad2e8b clang::CodeGen::CodeGenModule::EmitGlobal(clang::GlobalDecl) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x3ad2e8b)
#16 0x0000000003adc05b clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) (.part.0) CodeGenModule.cpp:0:0
#17 0x000000000493c1e6 (anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl(clang::DeclGroupRef) ModuleBuilder.cpp:0:0
#18 0x000000000492e988 clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x492e988)
#19 0x0000000005deb754 clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x5deb754)
#20 0x0000000004939258 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x4939258)
#21 0x00000000041a1c09 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x41a1c09)
#22 0x00000000041278ce clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x41278ce)
#23 0x0000000004281de6 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x4281de6)
#24 0x0000000000bc67eb cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0xbc67eb)
#25 0x0000000000bbefaa ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#26 0x0000000003f83419 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
#27 0x0000000003632dc4 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x3632dc4)
#28 0x0000000003f83a0f 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
#29 0x0000000003f4b275 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x3f4b275)
#30 0x0000000003f4bcdd clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x3f4bcdd)
#31 0x0000000003f5385d clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x3f5385d)
#32 0x0000000000bc4a87 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0xbc4a87)
#33 0x0000000000abef61 main (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0xabef61)
#34 0x00007f729cc29d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#35 0x00007f729cc29e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#36 0x0000000000bbea8e _start (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0xbbea8e)
clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)
Compiler returned: 134
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWl9z3Cj2_TTyC6UuCf1_8EO7251f5pepTcWZ1L51IXTVJqFBC8ix59NvAeq2aNu98ZQ9-7BTE5eF4N5zDpfLFZhozXYC4DIqrqJifUFGcyvV5e9kB8KQrwrgVo4aLlrZPVx-vQXUS87lTyZ2aBXhqwhf4QRR2QGiZNSgEUFUEX2LpECUE7FDaRVlyyhZR8kyKhP_Px0G32JgP3BiAEXZinKidZRd-zfaqJEatERRdeVbEELoSX_0x3GEfT9qi2wzCoqibI06oNw8DBDh2vOz1hSYUQn0hzVcraPM_cSN_cWj9I3-d_dzGWUrJoz1lC2jbGntH5tQ_2jI9WbCIBZVV731ipvA3EEA_7iS-4FxUOj6fuBSgYqyJYqKq1tjBm1d4U2ENzvZtZKbhVS7CG_-jPCmyv9VV__ff--jYh3h-te742ZO6-hejmYYzdNp8o9uGv1cO3x4o6Q0Ed5wfrePByW_A7WPU78NZ22EN8ubrxHerIHyhZ3tbImLJLPjfTen4_LzN8JHiHDQ-o0oO8w_wB3hIzHgOn7cDzzCtfXr397sCeffgBqp3LtspU3nXw2EKR8kB7s3clQUPklKDJMiwqu5089EGUb4mpGdkNowamfWTjgubc9WSh7hBlEptBUKLbUGZe0gqxNOPwpm4ii7ZtohXcMAogNhphjAFeoJ49AtvKafP10vb66RHts9M4igdtwhBYNUBhmJTiaUmduxXVC5nzR_Kj3TegQd4Q0iokNMUD52gMwtTIuxJfSHUYSC5TIoGJSkoDV0SDtRbLMdSbSWlBEDHVKjQJoqNpgJ8o0h9Afqxv1wDJRkESXNZyV3iuwRUbtxD8LoKUjk4IJiirEYDiE-BUpMDgrqOK0WySKN8KZl4jGQbMCheNf9JKqPcxTvUCytYTIM1ryL2YVG8d6KgeL4vi5jovexfhCG3EfZmgkDHMU3KI53lMZGSk5vCRNRtj6Lz3ZOswVeJCjuqeRSxd0xLjSKeyFjp2vY7EJvTY9ZMYY9M7EH90-fC-OOadJyiP38WQm0TWXTLBwyWWp1jbIVyN6G4UCUBoWIQSA6JHvUMw6-J556PhrIlnWULQs7CZ8-ffsdffyCdiBAuaC3g21OJNNjhCsW4crbys7Z-jDZEDuf7XupXraEIpwlKLlPDv9lJVRFUaPHlasf9LTwFBPGxdZXH6Cz5a3Iz63URgHZT-vQplzcILeq3ibCInyV3E_4jvnREkhPCBRZR58jsOJAxDj8Q9ywnSA2P43C7akd4tJ6eRe4Fk0AF4dwM9ykNVrZKP0CVN6BevD4_o-Ijluv9aRl0GclhYF7M6XsxP07usgmF1Vf4YbSHBc4mbj5nH9fl9syjzkT4328E6N_QRdaLkoH3A0JYOehzaZseooGc6uAdNsfjPPXOXDjAwfFKei8KtFOOy1eCz6vysB2GdrGddVniLQ2i7_KshsYWK6eWE7bV9tM28BmHdrMGmjK19l0QwKbzTzqSsBN22VvHu6T3cfqBWdpcuqY4uLXigi_I_ud_F2gUlwEUMNE0nSA03YOdSU7-ADi8CC0IcJc75kxriCMsqVRD_b5s2J3xMBGqm9E2YIjwvVTylONYvPlO2QeDz_gh0_5FV36l_htpGPFCGd_ugz1XyBXdGlALgvIkTapy-oMOffwu-xGDr7J8vrAZUu4Y9AzS9BWn2fILecV55uT9BwCknlIssN1dm4Gz5B8ieHhLeWW2-MuepDGfwW8D19HJ-BbnPKF-tyKPMP3ZZbvwwTqcO2VJ0xoUryayVc5fII7mHDP-fiWw7QsBqLMInE1w9zS02LBIqvmyPImoym43YYIKR72ctRIkD3owdV8TQDQFpqHDzrb7EuW8zA_KDkOX8B-4iIP62pkvAP1PLo6RIehqeu5bleE_gDR2Ww17g9p6rU43joAJpxBAAQbcNFBWxX5yXetBvctPkd6A3sSfNm-X76ZMM1B4-QkNhpc1M9E7ZK6ROID9R7oaGBq8lv42-vrkARQg807T0lKk2YOdaNsxSy6Z7C-F0oPIkCJQ5S4qimEgnq_H93mS-F5TV-m9T777QQ0YBLstzmu0w7KOZMJ8yOhu-N5Tn2O8PtsLhPAgEGwmSYtLStoEaXpdk-sjdnn7VIp8mBzRbait0Q9bv_ZtTudCtrwCt1J1r0TEQ8z4FGEPFroCUEH-VfpV5cvzp7FPSVVhru_tTF9cQaFXafY3QuZG4c7Xl9nedo4ZWZ2-1G4uN0qJ657Ox3EHY5wKeG8JfTHthfhKaH3PUXRKl3J_Z6I7nRhPzuJx7NHOVjvxGow08coJnau5_U0w8cB2y29v09T_9ASzehWu-6TikFn27A1ijCjD69PzBHO7aqQavbedpkVlsv5aaY7aqw42bcdiXD1KBWuD0cYv8n2-fmoTs8dOprPpuK50wX_5ssobkgP_CGQ8_zUvctZioMchH59GmMk6dH_coyclH8vBkMTCpe3uCpeFM5NHnmybR7UDPL5yUDbYZYxVmd8zLsunzvNf_uI8rznEXVyGtrnLe261wrzm2z1y6r8JttPTJtAlddclLjTwF8XcoqWv0lO2nWBnOGRSl9kdfGinOvZ70H18EzZ8NI0_I1yvkOG8_oEAuKTIiUn9XSscShTDgRcZllOeeE_b91vX5hYaAH2oERMSAt9mSKL-s2de9uB85Pzatx0zSvPwN2QwGZxahPyBG23dthWG6LMdsbul71AHnopT-s5UgPy9t9-1pz1o_uTG2RQSqrjVTDqp28NRKdV4W9K0U9mbhHcM-NvnNIstzhHDSi-Q0YiDYDYrP5vTm61_T0_2HVpBz97t33RXWZdkzXkAi7TKsnTFCd5cXF7WdKUlE2JO5z3tC9x3zWUUqibPiVdUicX7BInOE_SJE0xrnCxSLKmT-oq7WmV4TahUZ7AnjC-sItmIdXuwt3SXlZlWeUXnLTAtfurC4wnfXBUrC_UpbsbbMedjvKEM230owXDDHd_quFHFGt_e4N-3oJAtqRlYodk-x2oQbJH5mEAJFtDmIDO6rxHvshDTKBRHI7FXR6yK_liVPzyr18-O2b_DgAA__-AQkhm">