<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/84522>84522</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang crashes when attempting to initialise a constexpr static data member from a non-constexpr static member function template
</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>
cjdb
</td>
</tr>
</table>
<pre>
**Sample code**
Both of the following snippets cause Clang to crash in isolation.
```cpp
struct ClangCrasher {
template <int...> static auto BuildMap() {}
static constexpr auto value = BuildMap();
};
```
```cpp
struct ClangCrasher {
template <int...> static auto BuildMap() { return 0; }
static constexpr auto value = BuildMap<>();
};
```
**Diagnostic**
```
Unexpected undeduced type!
UNREACHABLE executed at /root/llvm-project/clang/lib/CodeGen/CodeGenTypes.cpp:548!
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-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -std=c++20 <source> -isystem/opt/compiler-explorer/libs/google-benchmark/trunk/include
1. <eof> parser at end of file
2. Per-file LLVM IR generation
#0 0x00000000038ee468 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x38ee468)
#1 0x00000000038ec14c llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x38ec14c)
#2 0x0000000003833fb8 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x00007f08d1242520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007f08d12969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#5 0x00007f08d1242476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#6 0x00007f08d12287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#7 0x000000000383f24a (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x383f24a)
#8 0x0000000003d39cd3 clang::CodeGen::CodeGenTypes::ConvertType(clang::QualType) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3d39cd3)
#9 0x0000000003d3abd9 clang::CodeGen::CodeGenTypes::ConvertTypeForMem(clang::QualType, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3d3abd9)
#10 0x0000000003cc8651 clang::CodeGen::CodeGenModule::GetAddrOfGlobalVar(clang::VarDecl const*, llvm::Type*, clang::CodeGen::ForDefinition_t) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3cc8651)
#11 0x0000000003cf1f3a clang::CodeGen::CodeGenModule::EmitDeferred() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3cf1f3a)
#12 0x0000000003cf4e63 clang::CodeGen::CodeGenModule::Release() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3cf4e63)
#13 0x00000000041869fa (anonymous namespace)::CodeGeneratorImpl::HandleTranslationUnit(clang::ASTContext&) ModuleBuilder.cpp:0:0
#14 0x000000000418551d clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x418551d)
#15 0x0000000006160d5c clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6160d5c)
#16 0x0000000004184de8 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4184de8)
#17 0x0000000004400319 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4400319)
#18 0x000000000437d84e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x437d84e)
#19 0x00000000044e246e clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x44e246e)
#20 0x0000000000c25566 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xc25566)
#21 0x0000000000c1d2ca ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#22 0x00000000041c64d9 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
#23 0x0000000003834464 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3834464)
#24 0x00000000041c6acf 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
#25 0x000000000418e675 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x418e675)
#26 0x000000000418f0dd 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+++0x418f0dd)
#27 0x0000000004197015 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4197015)
#28 0x0000000000c22a4d clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xc22a4d)
#29 0x0000000000b17e04 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xb17e04)
#30 0x00007f08d1229d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#31 0x00007f08d1229e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#32 0x0000000000c1cd8e _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xc1cd8e)
```
**Compiler details**
```
$ clang --version
clang version 19.0.0git (https://github.com/llvm/llvm-project.git 0d4978f3cf8f917d88c19ec0ba3b1b3ef092cef1)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /opt/compiler-explorer/clang-assertions-trunk-20240308/bin
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWV9z2yrT_zTKDSOPhGRZusiFYyfntNO-p2-T01sPgpXNCQINoNT59s8AcmKcP-dJJ-nN02k8NmJ3f_tj2V0EMYZvJcB5Mr9I5uszMtqd0uf0H9aetYrdnyd4meDlNekHAYgqBmEgydZJNn1eKLtDqkN2B6hTQqifXG6RkXwYwBpEyWgArQSRW2QVopqYHeIScaMEsVzJ2aSsysJ_OgxhxFg9UhtEV04MNEoWF-EhQhb6QRALKClWXNrZbJYUl8hYYjlFZLQKXYxcsK9kSHCd4MbLLtYH8WkiVdJY2A86iNwRMTqN6xPhpJjsOg0P3w-Qf6MHSIMdtURZUlygX3GnWCXF5RucCp9-1decbKUyltMoCmKBvyXsB6AWGBolAzZSYMjeD5DgfJrxf98vl6s_lxdfLhHsgY5uLrEowVdaKZvgKyHu-nTQ6h-g7id1_Llh3ib4aqUY_AHy8dvN_QBm5kgvlvOyfrDz7cvl8voSmbHtuUUEteMWaRiUti4Qd9YOJimWCb5K8NWW293YzqjqJ_NPUXBjRjAJvkJEMsQlFSMDH_UhpltCb60mFBK8QoOGQSsKxgBDRo06DDtJYoyinDin9SiRoZoPdtoE15bQW8TG3vkShrJZkjXftNpq0iOit2MP0jrgji81eH5UP3ABOoX9IJQGfeAsJcaAdpvMpFaP8jbBVy2Xj5ReJPgCpVv2k-guLVG6RalyeskwOO2jHUY7MyjtHRcoTfd1lRLTp-ZeWrJPijWXFgRKr1GabilNrVKC7giXSbF-FZ6bbCQZzE5ZlHZUCaVT9hBfBqWdVKknNh42liXFmgboOHNbZ6K3uEQpN_fGQv-qacFbt4pbpbYC0hYk3fVEO2oOFE1rG_jPHf9JsQLVORMD0Qa0C1eQzKW9jotpJvYrBTp1Q-jLlx9f0afvaAsStE9001ZNcJGhbJ8d_hU1QFnVyEddsUyKpbk34cs3zaX1MXETAqt-nKTJz40yVgPpE1y54OLS-iTh9va7REaCL7L9BM-liwf8-Ql-mpf0OfwrAUSOw1_ymm8lEQmuR-kLDkNCOSsfgdaBidDiGG1RdG2NfDr-DlTdgb4P8P4kkglntJ6YjOaslLSwt1Oeyfzfg4liMrHosprluMRzF5retZC09nW1qcpUcDnu060cwwM6M2pWeeBeJIJdxjqbqukoGuxOA2GbWy7E2wx4-cjA_BR0uajQ1ngu3gq-XFSR7irWjetFVyDSutz7Js1eMNK8OFnNDpfk_aPIq43s1pFdVjSUFSgIhlifytLxD1-ZDiPyDrS98YWwPpL7_5GIMPr-myGgjNxoTtwgLWt-zY0rpb-6VPu8MyvUKiU-ximH-cEpl47ifEppXc3zf3Pqq2KjgDD0B9glY_qv7g-hWiJ-EB279YPoNVARuivf-6yO0l1w2A--ZPNK6TV0XHLn4eZD0nTwOqIlTtO0y7uCvIWWy57bNXSgNbBDB_reqD2oCDU-QV1C9a8b7Rj1dxBADHwYYIcnAlwcAy7zumo6n5GIVPK-V6NBkvRgBl_Bmwi36wyU_tQPIgyHEnSjiTThcPS35DaOxeX1zVSKfNlvUPDd9_egn5Ynh7A8QTif5-yY0gtCb0GylZJm7EH_OpZ3ZnuCGrE9P_alyquMzemxL99cg7a8vomRXkNPpjYp5KUPy08TpAhzdcJ_yaB-JqSX1LeJYe-Fg9E09CGxPAGJkEbVtSyzrMij8nCl3XpL9gzUDwIZMEQgo1JcFgtWlxDTGcx-ksYSSeF5Rl_26mNiOeCMHGlitgGXVeTIBPnRnztFyVP4T_x1xegDVsLjO3YAR4U3o3g-rypEab7p3Rnw-Liy1Jrcf4cuKVZ0R_RjKS0ufeGMxvAK3SnOPsaPgDJyI4_dyBmmBB3IX-U3PlMcOXPdEyF-AH3I3c_4VJ00CUqJKVce5vkoY5rfvZC2MY7TBq1K1nhijvR2o_RBu9GeW__08HbnMkyhRIiW0NtNJx3Sx7gJtqcYWuUr1fdEstNN_ewa-mO4G1ODs04cB0f8WM3l1s-8nBb4QWCzoft9nocfLTGcboyfPrEYTXYDG6sJt-bw-EQdEcLtCaWPnrspy8cU74MocO5FErwQpG8ZSfDikSpcH46kn1X7_HoUJ0ePsqzKo6V47rg4tSSjvCYdiPuIzteX7iPOxh5xFPnlaYgR2qH_5RBxpM8Gou0sezUW5iclHarF_EXi_NqRJxXzwGaUzE8E3YSjhLF6xcbx1GXU7Bz59s4NhHM7CqjTVqfLGHsrL59Va14m5bNqv3BjI1JeS80PcTAQrsOb9rfwOAXLb2HTkRWxGbdjebPI8hejbH30PWocnukYXlqF38jmB7Sznp6Iv_qkP8GknKLx0KEc8Pu0snx6tn-hbL97T-KQRdCj3jBr8wVkJXKg39t2UH1s--H99OHtXcOaN77O9CKRzvxUJ5QZ2myc2MZYou3myLn_2gqUsRV80slRVgMK-t99zbzyR-sv35sd-nPEwBIuzCu3ZwkuQ3yiNL0DbR6uDcLgNITyZpbNsi33Tr3tJmvmpDJWNou6K2hXd02-YHVN8wZo1pKizdsCuqzBFLrH10k3RG_BdTNoWpRR3kr1Ux4tTpjnX0-jXjEQbvagDN-HR_50IgSwtUscv3R9leIMl1mR1dOixAyesfOCNUVDzuA8X2RNkzdlWZ3tzheLLJtnrCiLbg6MdXlTZB2Fomvmi6yExRk_PyjOF8UCVzOGF1WWF9U8p928AZaUGfSEi5ljcqb09szfBp7X5RzjM0FaEMbfoWM8hQlO8Mr98jdYSqZc3hHhjjQ4ma_P9LlfknbcmqTMBDfWPKq23Ao4DzfmXh4M-rkDiYi10A-Wh5t0_zaRCG4AkaN73-kimBFLUA99Cxp1WvWIIKlk-mTeYcrUiz7cSZ-NWpz_-h2pJ-Y_AQAA__8SS9oJ">