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

    <tr>
        <th>Summary</th>
        <td>
            [clang] unexpected MultiVersionKind::None for resolver
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang:codegen,
            crash-on-valid,
            regression:19,
            clang:frontend:fuzzer
      </td>
    </tr>

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

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

<pre>
    **This testcase is generated by a fuzzer.**

Compiler Explorer: [https://godbolt.org/z/edWcav4b4](https://godbolt.org/z/edWcav4b4)

This invalid code will crash on clang assertion trunk:
```cpp
struct S2 {
  virtual void mv();
};
__attribute__((cpu_dispatch(ivybridge, generic)))
void S2::mv() {}
```

It seems that this goes back to clang-19.

Stack dump:
```
unexpected MultiVersionKind::None for resolver
UNREACHABLE executed at /root/llvm-project/clang/lib/CodeGen/CodeGenModule.cpp:4543!
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 -fno-verbose-asm -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics <source>
1.      <eof> parser at end of file
 #0 0x0000000003bf66c8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3bf66c8)
 #1 0x0000000003bf43cc llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3bf43cc)
 #2 0x0000000003b419c8 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x000070db16a42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x000070db16a969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #5 0x000070db16a42476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #6 0x000070db16a287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #7 0x0000000003b4d2ea (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3b4d2ea)
 #8 0x0000000004049a15 clang::CodeGen::CodeGenModule::GetOrCreateMultiVersionResolver(clang::GlobalDecl) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4049a15)
 #9 0x0000000004044095 clang::CodeGen::CodeGenModule::GetOrCreateLLVMFunction(llvm::StringRef, llvm::Type*, clang::GlobalDecl, bool, bool, bool, llvm::AttributeList, clang::CodeGen::ForDefinition_t) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4044095)
#10 0x0000000004046c48 clang::CodeGen::CodeGenModule::GetAddrOfFunction(clang::GlobalDecl, llvm::Type*, bool, bool, clang::CodeGen::ForDefinition_t) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4046c48)
#11 0x0000000003fc3ff1 clang::CodeGen::CodeGenVTables::addVTableComponent(clang::CodeGen::ConstantArrayBuilder&, clang::VTableLayout const&, unsigned int, llvm::Constant*, unsigned int&, unsigned int, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3fc3ff1)
#12 0x0000000003fc471b clang::CodeGen::CodeGenVTables::createVTableInitializer(clang::CodeGen::ConstantStructBuilder&, clang::VTableLayout const&, llvm::Constant*, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3fc471b)
#13 0x00000000040c918f (anonymous namespace)::ItaniumCXXABI::emitVTableDefinitions(clang::CodeGen::CodeGenVTables&, clang::CXXRecordDecl const*) ItaniumCXXABI.cpp:0:0
#14 0x0000000006bfc3c7 clang::Sema::DefineUsedVTables() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6bfc3c7)
#15 0x00000000068b2ab9 clang::Sema::ActOnEndOfTranslationUnitFragment(clang::Sema::TUFragmentKind) (.part.0) Sema.cpp:0:0
#16 0x00000000068b33c2 clang::Sema::ActOnEndOfTranslationUnit() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x68b33c2)
#17 0x000000000672674b clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x672674b)
#18 0x0000000006718b8a clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6718b8a)
#19 0x00000000045725c8 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x45725c8)
#20 0x000000000482d559 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x482d559)
#21 0x00000000047ac7ce clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x47ac7ce)
#22 0x000000000491335e clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x491335e)
#23 0x0000000000ce9aff cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xce9aff)
#24 0x0000000000ce17ba ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#25 0x00000000045b57c9 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
#26 0x0000000003b41e74 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3b41e74)
#27 0x00000000045b5dbf 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
#28 0x000000000457c0ad clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x457c0ad)
#29 0x000000000457d19d 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+++0x457d19d)
#30 0x0000000004584555 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4584555)
#31 0x0000000000ce6999 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xce6999)
#32 0x0000000000bb3494 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xbb3494)
#33 0x000070db16a29d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#34 0x000070db16a29e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#35 0x0000000000ce126e _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xce126e)
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/eJzkWs1y2zgSfhr6gqKKBP8PPsiylfGsZ5yKnWxuKhAEJUxIgAuAipSn3wJAWQQtzcRT1uxhU0pCgkD31x-60Q2QSEq6ZoRce8mNl9xeoV5tuLje0z8Qi_M4uSp5tb_24NyD8-cNlUARqTCSBFAJ1oQRgRSpQLkHCNT9jx9EzGxnL7j1guHfBW872hAB7nZdwwURXjQHXnKzUaqTXjT34NKDyzWvSt6oGRdrDy5_eHBJqn9jtI3L2EtuPZj_fHdYjNUb3JRtUUMrgHlFwHfaNAALJDeAM4AbxNYASUmEopwBJXr2TeuxMtLA_nDX2RapRI8VeILAy25sEwBbKlSPGrDltALt1oO5RhENz73s9uV6tUJKCVr2iqxWpl-Ou35VUdkhhTcezOl2XwparYkHF5ZkirU0-zNCjJonqFFG84M6gye7neAeU3GvgCSklUBtkAJKE7PmRIIS4W9AcUuFHxaz8aAnpZ9Wfdu9JsXe9ozsOoK1J_zWN4p-IUJSzv5FWWUR_s4ZATUXQBDJmy0Rdtzn3z_dzRe_zG8e7gDZEdxrCUgBDy4F58qDy6bZtn4n-B8E61uDTzfT0oPLBa_IB8KOV7_xqm_ITM9UNI-TOPJgaDV9fLibP90B2ZctVQCBsl8DQToulDZ74llUbfpyhnk7AHiNg0rZE-nBJUCsApThpq8IUBsyeJXmUwmEzQx2gnSCYyIlqYDkvbDNeiSSkmNqQkj0DEgsaKdmZ2kPZl5QfBR8LVALkFj3LWFKmmiCS94ZhoZY88kh1gbW_BcHl771cLgsKTuSeuPBG-Cvq-9I1H4M_DXwuZaLuk5L71XXq5kEfqu5AL6_y1MfydaXe6bQzotuKVOkAX7NuL8louSS6OfAfwK-v8bYV5w3eIMo86LbP8WrO0uGOrnhCvg15g0XfkXRmnGpKJZWh2HaafaixUBvdGcJCzVhXrQgvPaiO9AhIYnQHkZYBXgNatqQIYI9GAUg2AWHP1FZpynOgXEA48RyL-3FR0GZMtPzbOc4P3YS6PuKSyUIaj2Y6nmmTJnY1CH6LpPkwZtgN8B7WRA0_nCCP44wPoV_0RDE-u6RPdE1Q40H856ZNFCBhmstl0CrwThooYs2Dgucg4We1E8E8y0RewvvF8SqRivNByadPgvOFNmpIeYD8_dFRTSoyIKqDFMUwwQGg2l2Bdnl6SqN_YayfuevWW8f4Jnks9QAN0Mc2LErs0iLGoNObQRB1eqbTixvUmDGOwqSKeg4S8FaGi7eCj7OUkd26sqGeVZHAJV6GXyTZDPQkZxNZrOCBL2_Fxmxjt58rDcO4gKFiU1jg68POWJ8Y9OEbfpA1KNYCIIUGaeuT4c8BfORsA8NL1FzS3BzgRgZwDvWFRPr4qD4u9Y9PHz5bdkzrKE4K9aTEpStP5FaL1bH5ud9R0wptwBnGFiAkvOT_x-lzA-lzgOVaiLLAb_k4pbUlFGNb3WJFXOg71gcwigMJvymOM7fyO-8qsRjPWL2LFsnuZ1S9z_lR5vv8ONmlBpHdR3-FT9fnlHZkCHVoKqy93oPwBnRK3h-XgCTCjE1FwLtb3raVNqOdEKLlfeA9rxXAOshQ5-XJGbyxJjvg-CBc7fjybF2Ot4_D1oKHY7hhOM4C8s3cYxNfNume-0gqKE_pkvXSaKfzE7m7UyfZfZytGlWHNoiN3RxEea11osYZ_uW9xIw1BLZmQKtsGjvFWK0bxdfv85v7m0Taamydh7DS_4pdc4EvOJs8fWrLk1EpaP-QNpcc-Iof12vaJvisU1pWeMIZ2PhT6RF9sqAJZ8lqV6Q5BcgfsDgEJ84IPMSorI4DXKO1SO7Y9Vj_SwQkw3SKj8zqpYCrdtXa8Fx4PPnQw-zhbR2zTok1EwXY0D3PM1gOgEXRRi-EdyFmLRYHCadminNYJrFTuR_NNuV0fUz7x7IlgwZZczdY4f-05OPSnjRYtSsO34QvO90eo_uXrvrkQ-b1u5bvSd-UkgR0_n9ebBmOjzkLg9hXuboFQ_zp-cT7mINcpPoBTAbSA5mtzJLMpjgU5XD3FYFpunOnnDMD4XCJXK4BTJGCt0aJ4dVkjjxuhR6C8WqE1AvBNJicEA6hUacIZxh4tJp1d6bdIPJaUbPW3URXx5wOoY42TwuwihKHEMGyEd7thyj1_Bf2WtzyHsbYPE5Bjh5NcCkQHUNMA5XLaLuxsGUaWZhWeANEsdkpxeaBXDb4MIcjV7GDovSMSOemBFmJQIH8hfhs1kpxrugFjXNF4IVF_dt15y0aVL7aBnD8cOoOipAJeiWiJP5CSbuslEmGS7smfFRbj3sJVbCcGueHs6T74aSDzVNifC3Vc3cBd_qHnxoES5426LDIewxqE_OoVRDP95p7UhzcGqXqDGYCX4ZsFrh3S4M7U2JJMUraboPLDqddcNKCUSVPDyeiENNo2OCi9Fz3WVUYRonspybIR7MGtSWFfJgdqQK5ofjrF95eXo-0ukhFMnicXl74qjJPvnUsydUk2bv0PnnU3eJczWD2PH8bOpiVVmD_2cXmRSPZ30hn6R0HKDqLHFm7tCrjHlg01nMJwN1B2c79XNd506xM7LtnQsIbbbjUNNSpwqLN_PyKy_leVJ-5eUDlef2mK-X5hc_6BDVLjBs2n-Wx8FZ_hE2NVljNt2XDHGSx0mSnEN-O7p2CocTFcO5WfgH2bxAOWvocfgLJ4k9LYqhnD1UKAf8ZlmZD4vCX6ftd69JNDIHulMbBmUZxUUMNOj31m1FO7onr0JgURVvfBVihjgy46lMEgdgtdLDVlIhoVYj435aC4ldLcm0koMpAVb--8-ZFv6iffw4mgMiBDefLtgPBuphhwHwEBE1og2pwHeqNoDsqLLfGoRRrGH2kgB_CxQHkhBAR2V_MflIQhDVC0Z0TOrBkxfuV9V1VBVRga7IdZhFQZGnSVpcba6rtKpxFeVpHsAwDLKKlEEaY4gJSREk9RW9hgGM9aMwitIgnxWwrDNYhjXGcQ0L6MUBaRFtZjpWZlysr8xr7uswTKIwu2pQSRppPhSB8LA4aBPXhHkQenCh281LWc5887XFS7Mga0GktFkhLI7dBzEHLk0J9cMcXkIvub0S1-bFe9mvpRcHDZVKHtEpqhrz4YqVktyCt3-HcNWL5vrvv_4fqNlew_8GAAD__wm2yEo">