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

    <tr>
        <th>Summary</th>
        <td>
            Clang crash with ill-formed code with inaccessible abstract virtual constexpr destructor  
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            c++20
      </td>
    </tr>

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

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

<pre>
    Given the following

```cpp
class B{
  virtual constexpr ~B() = 0;
};

class D : B{};
```

Example godbolt: https://godbolt.org/z/91zohzbeT

```console
clang++: /root/llvm-project/clang/lib/Sema/SemaDeclCXX.cpp:13781: void clang::Sema::DefineImplicitDestructor(clang::SourceLocation, clang::CXXDestructorDecl*): Assertion `(Destructor->isDefaulted() && !Destructor->doesThisDeclarationHaveABody() && !Destructor->isDeleted()) && "DefineImplicitDestructor - call it for implicit default dtor"' 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-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>
1.      <source>:5:14: current parser token ';'
2.      <source>:5:1: parsing struct/union/class body 'D'
 #0 0x000055f67e5d81a4 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x000055f67e5d5f4c llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3e71f4c)
 #2 0x000055f67e50cf78 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007ffa4ef8b420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007ffa4ea5800b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
 #5 0x00007ffa4ea37859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #6 0x00007ffa4ea37729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
 #7 0x00007ffa4ea48fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #8 0x000055f680f83881 clang::Sema::DefineImplicitDestructor(clang::SourceLocation, clang::CXXDestructorDecl*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x681f881)
 #9 0x000055f680f84989 clang::Sema::CheckCompletedCXXClass(clang::Scope*, clang::CXXRecordDecl*)::'lambda1'(clang::CXXMethodDecl*)::operator()(clang::CXXMethodDecl*) const SemaDeclCXX.cpp:0:0
#10 0x000055f680f85138 clang::Sema::CheckCompletedCXXClass(clang::Scope*, clang::CXXRecordDecl*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6821138)
#11 0x000055f680f86e4a clang::Sema::ActOnFinishCXXMemberSpecification(clang::Scope*, clang::SourceLocation, clang::Decl*, clang::SourceLocation, clang::SourceLocation, clang::ParsedAttributesView const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6822e4a)
#12 0x000055f680be7963 clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation, clang::SourceLocation, clang::ParsedAttributes&, unsigned int, clang::Decl*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6483963)
#13 0x000055f680be9b43 clang::Parser::ParseClassSpecifier(clang::tok::TokenKind, clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, bool, clang::Parser::DeclSpecContext, clang::ParsedAttributes&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6485b43)
#14 0x000055f680bc655b clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x646255b)
#15 0x000055f680b9111c clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x642d11c)
#16 0x000055f680b919e0 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) (.part.0) Parser.cpp:0:0
#17 0x000055f680b9719b clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x643319b)
#18 0x000055f680b9802a clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x643402a)
#19 0x000055f680b8c49a clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x642849a)
#20 0x000055f67f8e42c8 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x51802c8)
#21 0x000055f67f17fdb9 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4a1bdb9)
#22 0x000055f67f1085ee clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x49a45ee)
#23 0x000055f67f2601f3 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4afc1f3)
#24 0x000055f67bb56714 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x13f2714)
#25 0x000055f67bb4f848 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#26 0x000055f67ef77089 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#27 0x000055f67e50d71a llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3da971a)
#28 0x000055f67ef7779f clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#29 0x000055f67ef40ca9 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x47dcca9)
#30 0x000055f67ef4172d 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+++0x47dd72d)
#31 0x000055f67ef4b4dc clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x47e74dc)
#32 0x000055f67bb54af3 clang_main(int, char**) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x13f0af3)
#33 0x00007ffa4ea39083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#34 0x000055f67bb4f43e _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x13eb43e)
clang-16: 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/eJzlWllz2zgS_jXyC0ou3seDHhTZyWQ3U0nFrql5U4EAKGFDEVwQdOT59dsAKImgjjgpKS_roiUKRx9fNxqNJgtBX2cf-AurkVozVIqqEt95vZp4DxNv3n8mnr1I09gWUuG2Re8m6Tv7G6EXLlWHK0RE3Sq2bSSapI_vJkE2CXI0CR-QNwn7wZP04XA_IPcA4-aW6HDEjvlwwuMWb5qKoZWghaiUnrdWqmnhZhK8h6vvuBdyBb_-gf_c_0es_ynY82nNQGxRsb04AEDwTl9AGSZLIRR8VdXLZtpI8R9G9M9-3PuKF_D5xDa4_3pgpFr8_fe9xiuc-2Ga-ZrQi-AU2UkgZzg3M8zdAyt5zT6CTpxw9cBaJTuihAT8huNFJwn7JAhWXNSTYDEkBvwO87QAkwCwyDXfedsyqacgrWyQHcZNJ-Ejb4E77irF6M5cQQIXfPnuSCpY-7zW44GvNEL8gV_Y_B340A-m6kkV27NwhgbntEdTRHBVIa7ALyXi_QBErbyIGoSCSZCiEvOK0Xtrvy-fHudPj6jtig2MxqjoVkiyRkiFlBg7ClfrrrgnYtPb99jMvG071sINwjVFvCZVR5lZLUTido0KTL4piQnTFmmAkRSEAeQUtcZgulnPBB8XhGMAAcmuRi2RvFG9yE8KiCDabbTD2CYPuvIvUqwk3iAsV92G1artHVI0xgHFpgG95RQWXCUkkzunnOKdydspgFl_g46C1wef1b6Npiv6HctyGsEdmgpNF4PHAvVONZ26b9F0o7FA0-k2S4DmZtq-1gpvYT3zWrEKTZ-gb0XIVAlRkTUGFuHDRfH04LbGTbsWCk1LIqBjSjle1aJVnADLshZTA6zb3CoKtIkVPfAgVix6eMNHC5ivAXOaw3ms11-kQSOdlAAgarAEaMARvkHIA9fRgQY-DYXgHAVNQE-EwIisd4IqXW1W4XsbvQpYBJrew54a_Ao95G09-IvjMklZTDMfR-iLBPSMxZ-12zzxVY2rP8BFKg1RpsOEXbzIdrV9IPHM_562P6IdlxFBxoVNQGhf2z4yVAzXXfO5ttSAQ1e3cAt-WAntDHotZldyKri8bchSH4TRC30vbeBK65EyzdBC2_krI-KFydcxDgCSls0ZsxDgd1t1GpCwZ5GWJY5YmRUR-MlyKSGggB5LWP5WTxuvwaWXSTSteN1tp6u6sx2NWkuG6X0r7j2jix8BFUeTyGGD48zzCiQxb9kb6BNNOTGUoxAmOpRjlzLsG3GOcCHeJPmAchDARIdyMqac7q3-Zppp4NJMXZpRVtLk52iGIUxxaGYDL8m8MguzzP_dW-a1V0OS-SWo4eiZj_SM8iw_redizci3hdDpDuwcIPJCh5uRlkQ0zAg_1k-vG0mddMBsfWmFNwXFvg5WDimY8ydTa3E0BzjAlm_wNRv4DybZRBAdZ0ODNatjmDcCIvbBB34DENc3cuCD6Hsja938kW4Ji_Bp3eZEfa7f85q3a4PlpmDyqWGEl3znuW9Q86Kz71V_-5SLnV_0PkrnSkledIq1f3H23RrdJHa3ADgA_ByAAwfggqV5Eh7JKAf3bwL3apAYIBZov9uaDe20Ua4PV5SFgIYDVziCKy-iH8ClV1gPFRtFVkig7M2zzqT-zWv6s96oCfcQXRKCPjNY85A2f6xLMfAwZ9ac6JR7IOoCEjJRXaC9k6DPKN5iylsYKQYbOEaKXCORJI6Li_gMTmN7_Udh8Teg_eso9yM_Ac8D6p-45nubhZEEAKmDeexinvu-T36I-WcJJwCiWUIq8hHUkza5_nFAGI2AQ8V5Ax1BfQNAAgr6OoAkY0By5r3VCR1cYEs7jrC_AMt43zoNyz2c0ZTO23NkJTydc6Qj7VI_v7zEHrfWugMtr6HRDUwZhqCLY8pspGzmBfiiss-i-cReWGX3pqGWnxv83459UTB6MYouH6Tomq-s1GfmI90Pec6fgnaVTtrhSAMHYMVuFVfDCNR0cHAz7iIjUX6Mw_zpeZQMmKJeMtxP7PctliGcAhyZA6d6UGYsCoiTHC8EZR9YPTerzTY9bhkBD-ybdkW5q0oa--BDxEl1A6cWUfppSQvnPPNe6g2gpidEvY2QEfYLkMERMnCF9LKYMRdOy_YjbHq41gWgU4ie1-omvgw-EYGcjiKho0iQeH7pJHK9yAd9XsSpTPdI35sEpQiXBORzFBgmOWlRxEkKeQ8h_nKjS4hBdqhizaXEryawLMgay11GMjeBBqKM0wYNg-LZlfXwwzIAMR09YlePCA7yGdqhv_CfTagYaPO0wVX1F9P1Bl25OKmUcSIq-cuZ7StInEpamaZelttnCwdGZb8FL6WBzvT2J3dT1YRLl9Z16XpZ1m48t7x7F1n44CUbDNn9aM2eNNGh8XOj2ePKaXyC_bFe9duENaAp6-q-5ZJst75vfxS45WTZmuE9SM5g3bBUEnNdELfdI3KgnPZ5IQf9esj8EMIPZYqJWxWxRZEeK9C0L5L-SxSnDZKOSps09fHAFqcKmLbna1c_4ZJVrw6el213g2otxZACuTtPNvaxNC_R_7WPjPLLs86Qu8hFHsH5WeSM8fDRlriD04nWo4l6wLnz2YWhcyebGeh21ZCfUgJqDz1q9CSkjPw0oD-LC4DengcFevWx0QHlUujd-0GDuXaB4_LMRRx7Z_ktaFIAy0HTH6FZRJSck_xhcO9kBidSgnNW-I1oXj8BSVkK8Dj4BaMEBJKUPoPapSA7-U1Ymd8spfCwmxqNHmLhMPeyEC2X-sEJBDuIP0bAn3x2EwERh0s0TlyikCFL__pKsgKo79nb6X4CXoCYlDr6zi30qOzzaXAL6x72sT76ztUasS3Xa5sy5IP4-ilmy9D0RT_SbyGP54Mkt-e0y2-RZKqTNdMOqieP3v24YzM_SQIvC7IkvaOzkOZhju8UVxWbLYxg9kG_EYNX1bQUcsOoFcY21tgUJHhRMYSLVr8OoE68E0MP7zagu05Ws19_GSFOYz-5W8_ipEz8jHhB4PlhWGaeTz3MSuwVAWUZi-8qXLCqnU1iMEewf36u35uIH-74LNAzcw9mR14Y3We0KEqSkhjTLA9KbxJ5cATm1b2WQ79OcydnRqSiW7XQWUHEbQ-d4BW61s16du0al_xbzwt3ai3kzLbdGUVmRov_AQxGOpw">