<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/74566>74566</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Parser crash in debug build due to delegating constructor (only in >= c++17)
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang:frontend
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
sandeepkosuri
</td>
</tr>
</table>
<pre>
Clang crashes while compiling this test case, (This crash goes away if I use `-std=c++11` or `-std=c++14`)
```C++
// short_test.cpp
struct A {
A();
};
struct B {
operator A();
} obj;
A::A() : A(obj) { }
```
Here is the command to compile and the backtrace of the error:
```bash
$ ./install_dbg/bin/clang++ -c short_test.cpp
clang++: llvm-project/llvm/include/llvm/Support/Casting.h:578: decltype(auto) llvm::cast(From*) [with To = clang::CXXConstructExpr; From = clang::Expr]: Assertion `isa<To>(Val) && "cast<Ty>() argument of incompatible type!"` 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: ./install_dbg/bin/clang++ -c short_test.cpp
1. short_test.cpp:9:17: current parser token '{'
#0 0x0000000006289d42 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) llvm-project/llvm/lib/Support/Unix/Signals.inc:723:0
#1 0x000000000628a17a PrintStackTraceSignalHandler(void*) llvm-project/llvm/lib/Support/Unix/Signals.inc:798:0
#2 0x0000000006287b37 llvm::sys::RunSignalHandlers() llvm-project/llvm/lib/Support/Signals.cpp:105:0
#3 0x0000000006289640 llvm::sys::CleanupOnSignal(unsigned long) llvm-project/llvm/lib/Support/Unix/Signals.inc:367:0
#4 0x00000000061c0810 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:73:0
#5 0x00000000061c0cb7 CrashRecoverySignalHandler(int) llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:391:0
#6 0x00007f00526318c0 __restore_rt (/lib64/libpthread.so.0+0x168c0)
#7 0x00007f005188dc6b raise (/lib64/libc.so.6+0x4ac6b)
#8 0x00007f005188f305 abort (/lib64/libc.so.6+0x4c305)
#9 0x00007f0051885c6a __assert_fail_base (/lib64/libc.so.6+0x42c6a)
#10 0x00007f0051885cf2 (/lib64/libc.so.6+0x42cf2)
#11 0x0000000006da1729 decltype(auto) llvm::cast<clang::CXXConstructExpr, clang::Expr>(clang::Expr*) llvm-project/llvm/include/llvm/Support/Casting.h:578:0
#12 0x000000000a0c9c73 clang::Sema::BuildDelegatingInitializer(clang::TypeSourceInfo*, clang::Expr*, clang::CXXRecordDecl*) llvm-project/clang/lib/Sema/SemaDeclCXX.cpp:4731:0
#13 0x000000000a0ca259 clang::Sema::BuildBaseInitializer(clang::QualType, clang::TypeSourceInfo*, clang::Expr*, clang::CXXRecordDecl*, clang::SourceLocation) llvm-project/clang/lib/Sema/SemaDeclCXX.cpp:4812:0
#14 0x000000000a0c91f5 clang::Sema::BuildMemInitializer(clang::Decl*, clang::Scope*, clang::CXXScopeSpec&, clang::IdentifierInfo*, clang::OpaquePtr<clang::QualType>, clang::DeclSpec const&, clang::SourceLocation, clang::Expr*, clang::SourceLocation) llvm-project/clang/lib/Sema/SemaDeclCXX.cpp:4616:0
#15 0x000000000a0c7b7c clang::Sema::ActOnMemInitializer(clang::Decl*, clang::Scope*, clang::CXXScopeSpec&, clang::IdentifierInfo*, clang::OpaquePtr<clang::QualType>, clang::DeclSpec const&, clang::SourceLocation, clang::SourceLocation, llvm::ArrayRef<clang::Expr*>, clang::SourceLocation, clang::SourceLocation) llvm-project/clang/lib/Sema/SemaDeclCXX.cpp:4345:0
#16 0x0000000009bf1bc6 clang::Parser::ParseMemInitializer(clang::Decl*) llvm-project/clang/lib/Parse/ParseDeclCXX.cpp:3898:0
#17 0x0000000009bf0f87 clang::Parser::ParseConstructorInitializer(clang::Decl*) llvm-project/clang/lib/Parse/ParseDeclCXX.cpp:3761:0
#18 0x0000000009b9cfab clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) llvm-project/clang/lib/Parse/Parser.cpp:1496:0
#19 0x0000000009bbf7d0 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::SourceLocation*, clang::Parser::ForRangeInit*) llvm-project/clang/lib/Parse/ParseDecl.cpp:2273:0
#20 0x0000000009b9bdd2 clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) llvm-project/clang/lib/Parse/Parser.cpp:1237:0
#21 0x0000000009b9bf62 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) llvm-project/clang/lib/Parse/Parser.cpp:1258:0
#22 0x0000000009b9b249 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) llvm-project/clang/lib/Parse/Parser.cpp:1062:0
#23 0x0000000009b9a0f9 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) llvm-project/clang/lib/Parse/Parser.cpp:755:0
#24 0x0000000009b953ed clang::ParseAST(clang::Sema&, bool, bool) llvm-project/clang/lib/Parse/ParseAST.cpp:162:0
#25 0x000000000715a9cc clang::ASTFrontendAction::ExecuteAction() llvm-project/clang/lib/Frontend/FrontendAction.cpp:1183:0
#26 0x0000000006ebb529 clang::CodeGenAction::ExecuteAction() llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:1155:0
#27 0x000000000715a2f3 clang::FrontendAction::Execute() llvm-project/clang/lib/Frontend/FrontendAction.cpp:1073:0
#28 0x000000000707ffce clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1057:0
#29 0x00000000072e8e98 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:272:0
#30 0x0000000002cca697 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) llvm-project/clang/tools/driver/cc1_main.cpp:294:0
#31 0x0000000002cbb723 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) llvm-project/clang/tools/driver/driver.cpp:366:0
#32 0x0000000002cbb8f5 clang_main(int, char**, llvm::ToolContext const&)::'lambda'(llvm::SmallVectorImpl<char const*>&)::operator()(llvm::SmallVectorImpl<char const*>&) const llvm-project/clang/tools/driver/driver.cpp:507:0
#33 0x0000000002cbceb1 int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::'lambda'(llvm::SmallVectorImpl<char const*>&)>(long, llvm::SmallVectorImpl<char const*>&) llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:47:0
#34 0x0000000006f29fa3 llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::operator()(llvm::SmallVectorImpl<char const*>&) const llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:0
#35 0x0000000006f28dbf 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'()::operator()() const llvm-project/clang/lib/Driver/Job.cpp:440:0
#36 0x0000000006f291f2 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) llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:0
#37 0x0000000005119ae0 llvm::function_ref<void ()>::operator()() const llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:0
#38 0x00000000061c0e71 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:427:0
#39 0x0000000006f28fac clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const llvm-project/clang/lib/Driver/Job.cpp:440:0
#40 0x0000000006ecd82f clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const llvm-project/clang/lib/Driver/Compilation.cpp:199:0
#41 0x0000000006ecdb67 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const llvm-project/clang/lib/Driver/Compilation.cpp:253:0
#42 0x0000000006edf628 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) llvm-project/clang/lib/Driver/Driver.cpp:1891:0
#43 0x0000000002cbca61 clang_main(int, char**, llvm::ToolContext const&) llvm-project/clang/tools/driver/driver.cpp:542:0
#44 0x0000000002cea341 main llvm-project/build_rel/tools/clang/tools/driver/clang-driver.cpp:16:0
#45 0x00007f005187824d __libc_start_main (/lib64/libc.so.6+0x3524d)
#46 0x0000000002cb9d6a _start /home/abuild/rpmbuild/BUILD/glibc-2.31/csu/../sysdeps/x86_64/start.S:122:0
clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 18.0.0 (https://github.com/llvm/llvm-project.git 1296d20adfb0978afe38d67efab9818079d870ca)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: llvm-project/./install_dbg/bin
clang++: note: diagnostic msg:
********************
```
I have attached the relevant crash reproduction files
[crash_reproducer_cpp.txt](https://github.com/llvm/llvm-project/files/13577235/crash_reproducer_cpp.txt)
[crash_reproducer_sh.txt](https://github.com/llvm/llvm-project/files/13577236/crash_reproducer_sh.txt)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW11v4zaz_jXMDRFDor4vcuHYcZsixe7ZuMXeGRRF2ezKog5JZZ3z6w9ISbbI2E7ipMUL9C2CRhHJ4TPPDGeGFBdLydY1pTcgugXR_Aq3asPFjcR1QWnzg8tWsKucF883swrXa0gElhsq4c8NqygkfNuwitVrqDZMQkWlggRLCtAMApQu9UszAq45lRD_xM-QlfAetpJCEHvXUhUgmBOAbgG69X0Qe5CLIy0hiD2AMuDNgTfVz-Zn1rX2b9ECoAWUGy7USiOZkKbpmqQSLVFwCkHSd4YQwilAqZYZDAKS-f4ZWgNv7YG8oQIrLo5JgDz_y5UyBYH-6XtDEEzNSN1T_5lo8XNHtf5P8_9fqaBQ07sxjG9xXUDFe_IpNH9uKMwx-aEEJhTy0rygQnCh57ZF51huBspCOAFowWqpcFWtinwN0CJnNUALos3d8QuvyVFau_-POmrNquppe90I_hclCqCF_tPMQKq2oIcXj23TcKF7zLBUrF5PNiCYRkmqZRSUVOq5oQCluFVcs2SGGRoJlgqgdCH4FqCpYTC6_cnUBi45BMEcdoBM39n37zNed1a82zUCBLdQD3T7mbZobiwjJRWK8Vp7IZMYBLMlB8EdQOmfuDLToRigGAKEDJRgtnzu2nUjFut2S2ulbcBqbSKsWF5R2OnjA4S0k5eYVbSYjHn8-nA3fbyDss23TEEM83YNBdUkaWNvlGqkBmu8fM3Ups0nRFMwMOoQz6RsqdQrQvtHz3_nQmZB7r1Fr9VG0EZwQqWkBZS8Fd1rPRJLyQnDihZQtDWURLBG9cAfFSY_YNFum72XeRPgZV8FXwu83ZOhgX_E0Xwt1GkIphkIpn6iRZNWCM15g4WkAir-g9YQoESvWpQMaxEFHvR23vBfjNKsCNHIs-Sz7B6-ClYro9yyYyg9dBL454pLJSjeGkeYQVarwUNfOn7Fcsvb_6jZTr9g6xpXcsJqAoJpggIQTL0DUN8Biv0EQwdVJ-JXXBcVFQClT5wV_YL4CJQstaEgB0qSB8kxzr61tYVI9gvibVgGEJ1lfS-yQQSu4eLQOwZiVlFct82XHgpAaVub_FbAimsv-xA3QZzYsEILlk-81Pd03sM1r5-3vJWwxlsqG-NDWQ9Rr75vlPAnKp5nvFZ0p-63TdW1duSZPgClxrNm8EIdjs3UE5w4_ha5ipA8gdZ419ve5fRnkASZb0OJeyhJ6XkRigM_JR5crQSVigu6Egoax9JzxGH3u1EbQXExkXziAXTr7fw4JYdyQUtNxlL9NC1InEOBmS5DXHFEC4qNoBCTOLcEpY6gMvAiiHN-DNdYEAm8yBKUOYIiEmO4WmGTflY6P6xy_Bo8RGJ8KItQ4HsvpJboNRElskTYsafAfoKyN2TkYHYu76LZi3RrUqb78lz8elcN4R0UsiIY9khGkmCM5pFucfd027KqmNOKrrEWd18zxXDF_s94_GjE8rmhjyZL3tclN6Bf6vfi7ez7d70GRDGnpDquaZ8LhwWkgXW_9JDZ9-_9ogmTwLd1DBwdMYqyMzreYklPavc_La6WxtYW_M9S2mruBD5wgnXJ9QFGUh_ZjISu1f0yOsPI73R7kpAT0AnXHB1R2LQ8NpT0BcKo9b6gtWIlo-I4iV8a_L8t_aqEvZ72JtGLxhqgsempINHr7eWELsFvMNmn2ST2Y9smkWOTJE_IcZtMifpS_ytt8rLxEGinQuDnb7S0gQxWfIHjXfNcbOUgjGwrx2MrZ3np5yQez_zVVOmj5zfZ-RV8RtDw20YYpJmTERIHoVemyVmE-2TGxd-KNImduJ7aSDNS4vws0kVbE23QOS2ZRqpNmzoDWL3W82JziPHSPV_ILJZ021RYmcB_yqnHox6wot3IqVLigen-7yRGDFuBMHOCSGZTkpdJ4Z2Fr3X9RfC2OcnE8bhw4KgvWY9pbDRkeav0Xvu1he5GljHUBRffcL02afkiN-oJQ2hc3OsNnOf4UF4U6FXCvoiRJ93XiopuP_Uu_d_W46wRpoRQKXWbidAXOhEKEpsT3-WkjF_nRDsD47VFzclF9unMuM7zScxEdmxEyGUGhdlZZu52nXOMGPpn2LhIXy-260QUOPpirzyv75I3D_SJVl28T18vFPbxx2TuuyNhYl_2_M6LtqL3W72teVRYUdP5EkWTyM7KKHT0jAJavNBz-ri0VerSvgGcc14dfr8H0_RxOdDvsm9VhIkf4YxYFeH0cbkQOvrWxdQsuaHkoaRVtH919KDJxjMIGT12gwdgfupETauKiWmeR8jyixkv6C-0_hCqXsbhycHk2jBx2UKltZM9Q9WnkOS5qcUqTxIvKUtCbZLMJwpxX0uFa0KP83Ragzd4_wi0O9vhNNGJ_lYJkSCa0iy190UG4EHe0z6Fp-e0e0NUGuAuzSpanJxpyOaJvWDsI2xECI6zBBLir7aY1dZB9XizsMFiqNv2-wTrHZrB0-fHgwaK80oCtCgEe9IJZzHMO4DNQhusb4PN8wQFcFB55nccjCA_bnFV_UlNmW2ORI8gj-0tkZbRl2ejyvTtKnQPQ_0d27WmffitFUiHQ4SB7_6IVuM05E3fBK9rBCip8DYvMEDJJTz0YobPkf3HyEsEdW8uIy3y7NVlH9YjkhOa-5DVakRL2RdQK2H8UzdeSMDdcARZVTkmP1ZlPSTf_xAL3elx5tx-POubDfPGo9DpfKl358uHoTTF1d1OCSzNkWjoWMj-blGirMTB32mdv81DL6Mjzmw6IoeOtMjLcTro_b6L-TN_1n2Cd9Pr0chrbjF0FHQwQDAbKa8Eq9d9WdiF5f2A1Yrsdr7f_ZFjychKmu49RVZn_WKlBGZKDs2OOFxVOrNwMWrXXaaHkm66p_mo85-ON68GkC71zYfw8RvPh8Oj0LNNEbue6ZfIZKbT7mlaB3ynw8F_TemY8hCYPivKOMnTqlYj388w9d5nxrd72oWBwN77Bqn7GZQm_gjxsc-YXcu3tn7EJa2eLec5r-FnfD0NkRPZMzeUlZj8q0PZh0NSaF8aoaRI0ensYOp4_GL3NfBsbR-cgeZa14nD1TNdp9b2_H1aj-AOe6XMzo2h72qfx8l7tf-N5_K06r_x_IFJZal-rj7Y-0GDmejKk_ew1TvLJ3KGIntXHNpXZmhRxig9hW8-erY2g0f2m6e4_gc5e2V3u2dpPt4h-Glmf9YIX2wRcOx_xr7qwh1MaG-yw9CGR7FeBxqYKz9vWVWsBK1Gc5zeLeuGa2tm5wNpGNnXN5IUhQVcrSqW65CJhTL0nL3QEUQoLMYXOsLYITsrYgw7cRCgxYZvdcLERheAFqLZDo-3f9w_zAFarPUU12gS-FoN2QK0mEwAWshnWdBGK7lL45UBY8ROHs3R8ohV55LocDO1szks-0OR_e3W7nokNLc66Y5pGxcU-kGoVW8lhddPUHEoKYVsdDiTjSaDT1RIxmvopxNvYq5lve8O5WTNFPRRFhfIw0WZe1mS4pIGaREntMR5lvqpl2RFmnjkcAlnicWa6qoAdpRct_WPmv-srytWt7vrdd32_cyVJbjlBa1074ZLtuua7rtLkrSYM3HkRu3xe5THWK65ouY6LcPrmkvFCNxKs9573_jAz-nbyvdwg58oxEphsqHd1WRBK_qEa9XfPTW3TYvWFEewZBWVvYDo1nRYDR2oWJGmmaidAtH83RYEaNEJRws_iJIEBZH231Mz7NfMERRy83kg4mMg-gkGDFfFTVBkQYav6I2feH4ahr6XXm1ugtz3cJaGGQoSP_D9vMBxidOgiBBCeV5csRvkocBHXuzFKEXpBFHshWFaeF4WliHKQejRLWbVRKOccLG-MleFb5IwiuOrCue0kuZfAyA05Idyf8aKQDS_EjdGwbxdSxB6FZNKHoQppip6032L6M3NaljQvF1DE1dg0VK9eIv9Pasugnef1_U65XX1rAeZvDOHw78BSADKrlpR3Vx-F9ro-P8BAAD__8FW7Ck">