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

    <tr>
        <th>Summary</th>
        <td>
            Clang crash when lowering windows CXX exception
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

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

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

<pre>
    Given the [https://godbolt.org/z/Txd39vETh](input), clang crashes in `addTryBlockMapEntry` with this backtrace:


`
clang++: /root/llvm-project/llvm/include/llvm/Support/Casting.h:578: decltype(auto) llvm::cast(From*) [with To = llvm::GlobalVariable; From = llvm::Constant]: 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: /opt/compiler-explorer/clang-assertions-trunk/bin/clang++ -g -o /app/output.s -masm=intel -S -x ir -fcolor-diagnostics -fno-crash-diagnostics -O3 -lmsvcrt -target x86_64-pc-windows-msvc -fcxx-exceptions <source>
1.      Code generation
2.      Running pass 'Function Pass Manager' on module '<source>'.
3.      Running pass 'X86 DAG->DAG Instruction Selection' on function '@"?foo@@YAXH@Z"'
 #0 0x000000000391d768 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x391d768)
 #1 0x000000000391b44c llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x391b44c)
 #2 0x0000000003861d98 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007fbe03042520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007fbe030969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #5 0x00007fbe03042476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #6 0x00007fbe030287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #7 0x00007fbe0302871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
 #8 0x00007fbe03039e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
 #9 0x0000000002fd3203 addTryBlockMapEntry(llvm::WinEHFuncInfo&, int, int, int, llvm::ArrayRef<llvm::CatchPadInst const*>) WinEHPrepare.cpp:0:0
#10 0x0000000002fd8749 calculateCXXStateNumbers(llvm::WinEHFuncInfo&, llvm::Instruction const*, int) WinEHPrepare.cpp:0:0
#11 0x0000000002fd8cb7 llvm::calculateWinCXXEHStateNumbers(llvm::Function const*, llvm::WinEHFuncInfo&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x2fd8cb7)
#12 0x000000000497ea7e llvm::FunctionLoweringInfo::set(llvm::Function const&, llvm::MachineFunction&, llvm::SelectionDAG*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x497ea7e)
#13 0x0000000004a9aad4 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.0) SelectionDAGISel.cpp:0:0
#14 0x00000000024b646c (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) X86ISelDAGToDAG.cpp:0:0
#15 0x0000000002cd2dc1 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#16 0x00000000032b5323 llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x32b5323)
#17 0x00000000032b5561 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x32b5561)
#18 0x00000000032b5dc5 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x32b5dc5)
#19 0x0000000003b9c73c (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) BackendUtil.cpp:0:0
#20 0x0000000003b9cace clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3b9cace)
#21 0x00000000041b9fd5 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x41b9fd5)
#22 0x00000000044390a9 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x44390a9)
#23 0x00000000043c26de clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x43c26de)
#24 0x000000000451c0ce clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x451c0ce)
#25 0x0000000000c28ecc cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xc28ecc)
#26 0x0000000000c2215a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#27 0x00000000041fcdb9 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
#28 0x0000000003862244 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3862244)
#29 0x00000000041fd3af 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
#30 0x00000000041c3745 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x41c3745)
#31 0x00000000041c41ad 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+++0x41c41ad)
#32 0x00000000041cbf15 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x41cbf15)
#33 0x0000000000c26365 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xc26365)
#34 0x0000000000b1c824 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xb1c824)
#35 0x00007fbe03029d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#36 0x00007fbe03029e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#37 0x0000000000c21c4e _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xc21c4e)
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/eJzkWl1v2zrS_jXMDWFDomR9XOTCkeO0B-3boMl7TnZvDIqibW4oUktSib2_fkFKtkXFaU4WycECW7SNwo-ZZx4OZ4aUsNZsIyi9BLMrMFtc4NZspbpc7AWu2zRN04tSVvvLG_ZEBTRbCsHsamtMo0E0B2gJ0HIjq1JyM5VqA9DyXwAt73dVlD9d32_BbAFQxkTTGoBygApIOBYbSBTWW6ohExAkAa6qe7W_4pI8fsfNtTBqD5IAPjOzhWbLNCwxeTQKE2p1BgsQ-P8nQffgZAN0Zf9GcwjQUklpAFpy_lRPGiX_QcnhV4CWTBDeVvTUcNc2jVR2RIG1YWIz3YJoPkszK62ihJt9QwHKcGskQDl006I5iOYEawNQtlSyBmhu-8DsyuG_lxBEi8HQGy5LzH_HiuGSUxBdQTtrNKiQQhssjOUvmsO51lQZJh1bTGMQFfcSRNcAZb9j7tShBKAEAoQclKi433f9thOrTVtTYaBcQyaIrBtsWMkp7OwJAUIApXCNGafVtOPy9tv1_O4a6rasmYEYlu0GKmrpgUbCkQMws23LKbHGH7gcUc60bqkGaAmxqGDPvHMn5wqDFUYFbBRtlCRUa1pBLVvVNduZWGtJGDa0gqoVUBPFGtNDvjOYPMKqrZujmwRTEOS3Sm4Uro806N45ZGORWToYp2pCdw2XiirbZh1pgg-s64lRrXgEaFkyceju_AxONnAirTTcNFZma5rWTDWc1FjXIFowYSiHkzs42UGm4GRNJJdqUjG8EVIbRjScrIWcOBr85h8RnPBaPxFl4MRgtaEG7rJklcSThkyemajks57YAVbsbjehO0IbBxiCqOiJi647KkJLRSErCjdUUIXtuK4H2Z6frRBMbGCDtYYApctWEOdxt7bhOxZ4Y6lJoRSwllXLqR3lqUFpvxDROYEPWQIX85sJiK4X8xv4VWij2k7FHeXUPfXy1wfdVkMcWPeMlmsp7XMc_G3-8AXEwd87r-00QoCiAAa74PAnysMqTbLBltJ73T3cKiaM85X7zuGy0yCFn1dSG0Vx7XZUAZkw3f7KPshjALoKdj08GxOP-MMR_jKOyTn8BadYtM0Pccc2wu7-rBUuhFeQS6vlM9BaMB5a5KHNkrDKM1hYJ_5JiXyiat_B-4JFxa3SrGfSG1NIYejOTElj92zg_h1VRL2KdF3SIApiNENBbxpnJUDLfjNwJtrdZCParoNMtZwmDrib4sGOfZl5kq8JbMxWUVytHhnn71Pg5nsKZmPQcZrAjXZcvBd8nCae7MSXjbJ0HUFc2pj8Lsluoic5fSE5LN8tMyw9mZkvM8ppnrxPppviycyHXofWVYSCCJ4rH4ab-g8mrr_YePZVrOVwW49_nKbMlcL7n3QNomKQlLEh21tc2dAFic3QNtfbwJdDp-NW0QYr-tKb7e4ORtCzNM4hwZy0HBtaPDzcGWzo_7V1SZV-E_-pdxhIj6BOgettYOEYGClTr7TpIf7BRPHwcP3lVZzHlDGE8SszPjxQ9eiPLmPN8wJVnKcUpxS-BP1NPlPFxMaB6wIuNb80b7QO3zHZMkEPo170H5PcYn5zqBE_1vreOM_6yLMe5xhX8Sugvt5R3mfBVvwQL-zJfm2rM2faYGWmNuTCsejzzhd7zheXSZwQKwgLKfa1bDUUuKa6cYk677Q_ZMlifnMvPwLzQ5ZYGQd550HOPJCkQhUJX195WzANMJ0F80vmzsg7jyvxcjAqZxGKhq59a6ceSrd3I_rQCqID57lmOkY_S8I_gf67Kz79pe2bPgv5LAk95NkYeUVmA-ScbjDZ98XmyYavdXPy1b8Uf0VmHn4vi0ZlTtLozU13XTNjj6F1yfdfKG8OazJsByjr1LueK0weqajmvVsVUJuq62kF-2dLV41RXn61xXfzrJihq0MJPphU0TVuuVlVlFND35gYXbu83F83eHjs0bqtLZUuBvet_2_Y-QiFgjFZmNChWEtAL-SHO_z5LCxOJ7prsWGC9olhMOQLxRVVdxQrsv3Rn9-GOWYw1J7fbqh4Y9S9Oyu-MegbFptzQwbJwdiEaKsgP9H13jo_z-9pvYc1ilGtZk_0J10XwtyOFv5p3QfMJeP0bq8Nrfvl-690mY_eoZ1PDXco8mqyOCzzdTU74wc9150f7ihpDT3Qn31GgdEB8ZD65VUc5QHOh0iXyh7xjm4xhPpJIDsMHki_CooISirq09mp_epu3bprxpeMvm7Vp0TuHqdniFcuxbOQBKNg1EE-2fMkCX4J_4W9n1OPdvg8A7xSKiAoo4RAQsJVjZmfFAdHMLLFyj9wFdBvQwV8kqz6HDs6lJ4ZycgMFM4wPJBfhPdScs-Yuxpz_jslRvZlwBmbRtHXyuivRwbxOYeVYk9Unc9VqR821qQqc0fMQO7hcm2lHLeut9uJLgT2Rz5eYvK4WguL9OQ3ne7eh4qwkHWNRTXe1GfX8BiUpcs5mHvh-JRqjmH4OGG1IrtdGHa_lFgzYkM2s5gci95g27AyCjOjD90jcZhzuyekGvTbIc6JSrdwzok6zt0UgFKO67LCAKUnqlB2uG77TZbn1yMbXZIhFA9PX-euwrqen624w2vK_YuMXy_dJ2SmDrHn-fnIxaoIr-H_souMDm-v-YJ_PR2HJErj2avEubXDLzLmgU0vmI8m2gGv1Xy_GDrvR3fmDWz72ALCmT10qGhU6pA4xNV7eflNlvp1Un6T5TemzWtV7ovQfPSDBjPrAv3t4J_lsXeWv4RNS5bHJhqxWa7DV71sMXj2CoczFcNrq_AXsvkJ5ayjx-MvGiX2JEp6_g4VygG_CyvzF7ecr6XtD69JLDIPulcbBmVIMhRDC_qjdXeiPd2jtx4or_J3vqpxUzyZ47cdOY0DuFrZaSttsDKrgXF_WguNfS3paMFDElPYyf_4NbPCj9pHXytQpWzCmfdfSKz7EwYk_Y7o3s53H0XQHbPeVVEYRrGF2WoKJ0_QSKgphWxQ9vfKDhU_VNS0SlC7J-3k4xcUF9VlVOVRji_oZZiGYZBnYYIutpfJrMR5FKQox7MoDKsqzGY0ioMwQiSlAb1glyhAcRAhFOQBitE0TsI1CrK8Smc4SNMcxAGtMeNTu0umUm0u3NcAl1mCZtkFxyXl2n19glDPCQKzxYW6dN8QlO1GgzjgTBt9kmCY4fSyOH1MAp-3VEDe3-LD_u04LB4e4PG1-EWr-OV__umCw_vvAAAA___mxb9v">