<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/149985>149985</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
UNREACHABLE executed at SemaDecl.cpp:5534 since clang 3.5
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
mariete1223
</td>
</tr>
</table>
<pre>
If the first struct is removed the code is valid and ICE disappear.
## Assertion
No assertion but:
```
couldn't find in-class initializer
UNREACHABLE executed at /root/llvm-project/llvm/tools/clang/lib/Sema/SemaDecl.cpp:5534!
```
## Stack dump
```
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 -fno-verbose-asm -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -x c++ <source>
1. <source>:15:1: current parser token '}'
2. <source>:2:1: parsing struct/union/class body 'X'
#0 0x0000000003fc4898 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3fc4898)
#1 0x0000000003fc1cc4 llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3fc1cc4)
#2 0x0000000003f06498 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x00007f08ffa42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007f08ffa969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#5 0x00007f08ffa42476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#6 0x00007f08ffa287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#7 0x0000000003f11c5a (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f11c5a)
#8 0x00000000069e695d findDefaultInitializer(clang::CXXRecordDecl const*) SemaDecl.cpp:0:0
#9 0x00000000069ea957 checkDuplicateDefaultInit(clang::Sema&, clang::CXXRecordDecl*, clang::SourceLocation) SemaDecl.cpp:0:0
#10 0x0000000006a395ce clang::Sema::BuildAnonymousStructOrUnion(clang::Scope*, clang::DeclSpec&, clang::AccessSpecifier, clang::RecordDecl*, clang::PrintingPolicy const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6a395ce)
#11 0x0000000006a3ac0a clang::Sema::ParsedFreeStandingDeclSpec(clang::Scope*, clang::AccessSpecifier, clang::DeclSpec&, clang::ParsedAttributesView const&, llvm::MutableArrayRef<clang::TemplateParameterList*>, bool, clang::RecordDecl*&, clang::SourceLocation) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6a3ac0a)
#12 0x00000000066db7a9 clang::Parser::ParseCXXClassMemberDeclaration(clang::AccessSpecifier, clang::ParsedAttributes&, clang::Parser::ParsedTemplateInfo&, clang::ParsingDeclRAIIObject*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66db7a9)
#13 0x00000000066dd861 clang::Parser::ParseCXXClassMemberDeclarationWithPragmas(clang::AccessSpecifier&, clang::ParsedAttributes&, clang::TypeSpecifierType, clang::Decl*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66dd861)
#14 0x00000000066df69f clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation, clang::SourceLocation, clang::ParsedAttributes&, unsigned int, clang::Decl*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66df69f)
#15 0x00000000066e25c0 clang::Parser::ParseClassSpecifier(clang::tok::TokenKind, clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo&, clang::AccessSpecifier, bool, clang::Parser::DeclSpecContext, clang::ParsedAttributes&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66e25c0)
#16 0x00000000066b5b70 clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*, clang::ImplicitTypenameContext) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66b5b70)
#17 0x0000000006670c44 clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6670c44)
#18 0x0000000006671679 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6671679)
#19 0x000000000667937a clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x667937a)
#20 0x000000000667a315 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x667a315)
#21 0x000000000667a7d0 clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x667a7d0)
#22 0x000000000666c043 clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x666c043)
#23 0x0000000004972ad8 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4972ad8)
#24 0x0000000004c64eb5 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4c64eb5)
#25 0x0000000004be1c7e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4be1c7e)
#26 0x0000000004d58991 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4d58991)
#27 0x0000000000d9f10f cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xd9f10f)
#28 0x0000000000d95d6a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#29 0x00000000049d94a9 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
#30 0x0000000003f06934 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f06934)
#31 0x00000000049d9abf 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
#32 0x000000000499c6bd clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x499c6bd)
#33 0x000000000499d74e 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+++0x499d74e)
#34 0x00000000049a57b5 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x49a57b5)
#35 0x0000000000d9b5bf clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xd9b5bf)
#36 0x0000000000c4fa44 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xc4fa44)
#37 0x00007f08ffa29d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#38 0x00007f08ffa29e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#39 0x0000000000d95815 _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xd95815)
```
## Program
```
union X {
enum {
csize = 42,
cs = sizeof(int)
};
struct {
int data;
union X *cs[csize] = {};
};
struct {
int data;
union X *ds[2] = {};
};
};
```
To quickly reproduce:
https://godbolt.org/z/8WdEjj99r
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkWklz47YS_jXwBSUVCW7iwQdathLnTTKusZP4pgIBUEZMAgwAOnJ-_SuAlLlo8Thl5fCea8aWsHR__XWj0QSBteYbwdgliK5AdH2BG_Mk1WWFFWeG-QgFF7mkr5e3BTRPDBZcaQO1UQ0xkGuoWCVfGHV9RFJm215wySnEgsLb5Q2kXOO6ZljNgZd1_1AAUAAzrZkyXIq29RcJ8a4F5o0BwW547HX_vIzIpqQCoMTAggsKuZiREmsNueCG45L_zRTwsl9_-XaTLX_Mrr7cQLZlpDGMQmwgQCslpQFoVZYv1axW8g9Gdl8BWhkpSw3QipRYbGwzzwFa3bMKd3-uGSnnpK5BkEVREALkTwD25t0bTJ4hbap634xBn7PSmwMvvVNyo3AFsdo0FRNGgyCziGVtERJZ1bxkasa2dSkVUzuYszfW9MyoRjwDtMq56K24AugKzjb0L6yKWQhnGziTVi6uayu9MXVj5hrOKksCnM22i3iGdTXTr8LgLQiuuTCshLNCyNkLU7nUzPbD2T2czTaEzCxr5AlzAYLrk3jtYC1wrZ-kgbOCyFKqGeV4I6Q2nOhWB1FYP42bt5B0doBgqWWjCAPBDfAy3xI3agsyP7K_LHmkUYoJA2usNFPQyGcmIEAJSK7tby9DB6aj3Ww7i4tNF-0ArRphg9XxqjW0y8IKe2xFQYACD3pbb_cTFCRcpAvoQivIQJDpV91-uFNcGBcDDwoTBtCiH6TwX2upjWK4AigGaAm5MAClEKDFJwUDQFfetoMHUNqB9yfgfULCQ-CXJcOiqb-Ke74RuARo0QiXQygspVVxDqgWTA8VjaF6cZgu4NKGzTdG5AtTry22H7GgpdW46DgcjVlKYdjWdMvZc_9b-UEnPym8RVHgEEXI64xqM8J2Ea_jcFZy0WxnG9G0HWSu5Tx2kN2UHnA4FpjGaUFgbZ4Uw3T9zMvyY9Ld_F56NIUbJjHcaEfBR2GHSdwLjseC0SIpAohzqczHxLqJvdhk7D7fJxH-_JhxYnuli6HSOGVxGlG3h1yzAjeluR1sIGjRimvj_fHRRoyiNvdDIoU2AGU2miYbwjCC0ok2nEYJJE-MPF83dckJNmygd6yw3W7c0j8GwwEYdd-7DPZFEux21OPo7Eof5akYB2lEGJwicJ-uGl7STEjxWslG37tM-FX92ibCEWgia7YPywK4rxnZtycjhGlt-3jBLeej3lOmuuzJxeZOlpy87jwSnyHxdNS0QWSJ8yfEYeLhw8Td2S2HrhRj9wYLysWmp-I7eDvNznFWW7WZMYrnjWH6N87-GjC0HCT0nxuD85JlSuHXb6wAwXIg54FVdYkNu8MKV8ww9YW3YR_cWCm5lOVpj02B7cfn5_vKeqP31WiTiGOaJzjdo0oNPi8fH5d2Z_-ZVTlT1hKsOrSL73bN1AFHXDTUS3dk34pCHh7fhc-37Pb2a96WrNk5OGxZ6jkMJhzSRez_Mw5_5-bpTuFNhfU7dL4X0vsjHl5r9ibAfjmwXM5GmKWkJyycEFbEafEeYS1XnQHkQMRN187JhfU93L0VbK4s-ve4smz0XEVjrhiKiHeaKxtZg0gZcmTkcxcMtsj_Dxf0Izy9k1A_sFoPZIcDyXIodae7K0e_x4Nn8I1jv_dNPPZNHuXJad8Mlvqb8ZOVflaS_zm53cgv7W7Xkb3b7sbjbytbu3Fjc4zAFXuTegaHOMp7hyRjhyQeCcN3HfJVrRpBrL5rVtwKw1T7wPbx_erdEaMC511_nYEvx0jP12LClx8np3f_QQCPaHMHS9OMfBbW3q0Bz8Ga5aVnLZ2wlgYJPsnazbYNqqPV0rmYOgcX1to3LpA34QLbHesUFw-y_sJeWNluoUMSvtb4z4bdGTUusu3AH5Rsald-3xwomt8eJ36WtCnZbVVLZe4NNuxc-4AzsyfBn5KQ0NP7wIorbf5HmEhon4DR5HEiJl4Y7DGR3T8cfZbflQHt3zMAdpB6wKPaPUwThOlidKAgKfuBicwlurbppj0q75osvk-H2QHpYY4q5pDEIctHy2yl7CYr6AGcZ0LYYugRjurUMGc-SdiYyFbnrdAGC8IOc3ncpLPEb4ezt2JU0YU0WqTp6FGuw9sb8yIPPYvsGXuWZNzh69GPyh-PpoXvFZAQf11hK2Bwfj48z3jCqj-wa08uxm1oCV8kp-cxokXZ27CY2BDRGMMd7Uv_weWFgSX3FS7L3xgxUtnC86BBkzMdK6MrSkfnYlTxF6b2TwJROk4SNA1x6igZCC26YmitHKuut1167QsTEGQEl2WOyfO6EOPE3iruQmfpL2VVYUGnq_ig97TpxsnaaseWgAE5RnGx6baL1rVvE9Zrst36fvslx5qTtXbDOwpHg23D2ijMjd51T8ThsrRLQapBvx2S9dnchU9LuJsCUFLiKqcYoKSnCi12L0h-kvm-M6avj7w4DYZvYA69vOjO3hpxjwtWvo64PO23c7ymcYjfAn78RskGF85HhyH_d8FhGZ_XWJm5dzwK0Ji1lMQ5Pcqa8xre2xl3VI5S92SiHTA6Gv6-odmonBkY9rlVgjO7D6VJMZPSJGQfJeUnmevjjPwkc_vQf-SwfD8Xv0VAjbl1_v5R2kkSuzD5V6i0ZPVUjguuFEfJuOAawr4efB4VCAcqg2Mu-BepPEO16ujpyYsme3ge7VLarhLZgXepJOsSwfs79KfXHhZZj3tU_XkkLHAYQov4sxW3onvFyeQVckrTD75Kd1N6gYupQBZ6cL22c9baYGXWA7O-WwULByrSaaG28CPYCv98P1nhnerJNaK3m0TdxaD9a0TAy9ydFAgfIUiugJdBCCETTTX4an-I5n8zCIJrGCKAlqMe12z7ZfF2UaIbAJJrEOzkdJe-xoK5MJBig_th9qcF9QgByogG0ZVTD6Jrp8oKGMr9BCXUKkHvKug_jDl8kPDPhpPn8hUqVitJm_YhznU-GVO7my9oBdBqI2kuSzOXagPQ6m-AVovf6c0ff6SpuqCXAU2DFF-wSz-JAj-J4yC9eLokqRf6fpLQqAiCMEqivMjTRUAjP_AJY-EFv0QeirwEIS8NvCCdMy9OUUBZkAbUY34OQo9VmJdzm0es7guudcMu_TBNF9FFiXNWaneDD6EuwiwbF-rSXXPLm40GoVdybXQvwnBTsstjN-UOXHaDmovdPQEYzKOLRpWXE3q4eWryOZFVf6ductPOIdcArTrwL5fovwEAAP__UJpkqQ">