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

    <tr>
        <th>Summary</th>
        <td>
            Clang crash when compiling libc++ for Wasm with `-mexception-handling`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang,
            libc++
      </td>
    </tr>

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

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

<pre>
    For context, I ran into this issue when trying to use Zig to compile C++ code for Wasm with exception handling enabled, but I was able to reduce the issue down to something more reasonable using Clang alone so I could submit this bug report. I'm not sure precisely what the issue is, so I just left "libc++" in the title since that's where the reproduction code comes from. I used C-Vise to help find the part causing the crash so that the reproducer isn't too big.

Reproducer files: [repro.tar.gz](https://github.com/user-attachments/files/21206485/repro.tar.gz)
Crash output:
```
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: clang++ -target wasm32-wasi -mexception-handling -O2 -c reduced.cpp
1.      <eof> parser at end of file
2.      Optimizer
3.      Running pass "function<eager-inv>(ee-instrument<>,lower-expect,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;no-switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,sroa<modify-cfg>,early-cse<>)" on module "reduced.cpp"
4.      Running pass "early-cse<>" on function "_ZnwmRKSt9nothrow_t"
 #0 0x00007f547882914a llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/lib64/libLLVM.so.20.1+0x22914a)
 #1 0x00007f54788260d4 llvm::sys::RunSignalHandlers() (/lib64/libLLVM.so.20.1+0x2260d4)
 #2 0x00007f547873f8e4 (/lib64/libLLVM.so.20.1+0x13f8e4)
 #3 0x00007f5478027c30 __restore_rt (/lib64/libc.so.6+0x19c30)
 #4 0x00007f547a387939 (/lib64/libLLVM.so.20.1+0x1d87939)
 #5 0x00007f547a387ef1 llvm::simplifyInstruction(llvm::Instruction*, llvm::SimplifyQuery const&) (/lib64/libLLVM.so.20.1+0x1d87ef1)
 #6 0x00007f5479b88199 (/lib64/libLLVM.so.20.1+0x1588199)
 #7 0x00007f5479b875d4 llvm::EarlyCSEPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/lib64/libLLVM.so.20.1+0x15875d4)
 #8 0x00007f547b3e9bd1 (/lib64/libLLVM.so.20.1+0x2de9bd1)
 #9 0x00007f5478a2287e llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/lib64/libLLVM.so.20.1+0x42287e)
#10 0x00007f547b3c66c1 (/lib64/libLLVM.so.20.1+0x2dc66c1)
#11 0x00007f5478a271a8 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/lib64/libLLVM.so.20.1+0x4271a8)
#12 0x00007f547b3d3271 (/lib64/libLLVM.so.20.1+0x2dd3271)
#13 0x00007f5478a21344 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/lib64/libLLVM.so.20.1+0x421344)
#14 0x00007f5482596fc1 (/lib64/libclang-cpp.so.20.1+0x1796fc1)
#15 0x00007f548258e8c1 clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, 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*) (/lib64/libclang-cpp.so.20.1+0x178e8c1)
#16 0x00007f5482a334c8 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/lib64/libclang-cpp.so.20.1+0x1c334c8)
#17 0x00007f5481012d39 clang::ParseAST(clang::Sema&, bool, bool) (/lib64/libclang-cpp.so.20.1+0x212d39)
#18 0x00007f548371907f clang::FrontendAction::Execute() (/lib64/libclang-cpp.so.20.1+0x291907f)
#19 0x00007f548367b8f4 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/lib64/libclang-cpp.so.20.1+0x287b8f4)
#20 0x00007f54837acb8e clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/lib64/libclang-cpp.so.20.1+0x29acb8e)
#21 0x0000556d169a6695 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/bin/clang-20+0xa695)
#22 0x0000556d169a2727 (/usr/bin/clang-20+0x6727)
#23 0x00007f548321bfcd (/lib64/libclang-cpp.so.20.1+0x241bfcd)
#24 0x00007f547873f5f0 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/lib64/libLLVM.so.20.1+0x13f5f0)
#25 0x00007f548321b885 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/lib64/libclang-cpp.so.20.1+0x241b885)
#26 0x00007f54831d7b19 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/lib64/libclang-cpp.so.20.1+0x23d7b19)
#27 0x00007f54831d7dd7 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/lib64/libclang-cpp.so.20.1+0x23d7dd7)
#28 0x00007f54831fa929 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/lib64/libclang-cpp.so.20.1+0x23fa929)
#29 0x0000556d169a1b54 clang_main(int, char**, llvm::ToolContext const&) (/usr/bin/clang-20+0x5b54)
#30 0x0000556d169b19a8 main (/usr/bin/clang-20+0x159a8)
#31 0x00007f54780115f5 __libc_start_call_main (/lib64/libc.so.6+0x35f5)
#32 0x00007f54780116a8 __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x36a8)
#33 0x0000556d1699fe05 _start (/usr/bin/clang-20+0x3e05)
clang++: error: clang frontend command failed with exit code 139 (use -v to see invocation)
clang version 20.1.7 (Fedora 20.1.7-1.fc42)
Target: wasm32-unknown-wasi
Thread model: posix
InstalledDir: /usr/bin
clang++: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: /tmp/reduced-6c4c86.cpp
clang++: note: diagnostic msg: /tmp/reduced-6c4c86.sh
clang++: note: diagnostic msg: 

********************
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEWV1vrDgS_TXkxaIFBhp4yAPpm76T2cwmm2RmpHlpGbvo9gRs1jb5mF-_sqEDdDr3duZKs1KkJMY-PnWqXP4oojXfCoBzL7nwki9npDM7qc45Ea3iDQRJkJ-Vkr2er6VCVAoDL8bDK3SFFBGICyOR2XGNuNYdoOcdCGTUKxdbZCTqNKA_uPuTyqblNaCVhy88fIGoZIAqqdDvRDfomZsdghcKreFSoB0RrLYYIEhZA7MTlp1BV-iZaGSbLKQC1lFAZgfD7Ew-C_tBywbMzo5vpAKkgGjpgFCnbeuqJmKLSC0FIC3RFaKyqxnSXdlw05tTdlukoJXKLNCVh9MGCWmQ7hSgVgHlGupX9LwjZjI915anA_yz0wbVUBnkYVzzkvZWexgjLtwQw00NSHPhLCDGw6m28qneIAWtkqyjTg6nFZUNaFQp2SzQlVWWoZX_G9dOih3ULaq4YG5wS5RBlPTG2gaqiN5ZZmbPeI8PCnEtPJwaZKREJd8uvKDwguJu7FDxGrQXFchLLty4hSFqsf3LS754ONsZ09qvHl57eL3lZteVCyobD687DconxhC6a0AY7eF1j4XXOMTBMs4SD69nkDj3gmLl6MrOtJ2xyEHhLYPhJyhury-L-8u9t8jEVU6Jj-nU9dP-l98q-SdQ4-G1852lhIhgiAtadwwmqpWEPhpFKFjnto4sBW3l17JTfbMdSbSWlBMDDKlOIE0Vb40V894Q-ohY17S9LcHCC_JbJbeKNIiobddrExWI2rgc1odviNqCsQHfRNh_Jpojv3lbIv7bEvFvMPLpsBjYgratFxShncOLViArL7q0AaFBIWIQCIZk5VzqBQW23W5awxv-FygvKCLbcNcJYZFborWN36oTLg4tHtmC8rl48qJLD2cAPhfaKGeCF61c66qWz6B8eGmdwCvNm7bm1Suttl60KqXotBvlm50CvZM186IvoRddCOlXUj0TxXz9zA3d-VQK1n8YGhQRW_CN9Dm1ck6-GOnXUj52tvURoLX_2UCwXXaSa-NT2TRSuKln7bUkTPvaSAXat4nITetXpKsNF9thFi4eDxF0C7SriQG_rCV9dE2DrT1EqYiguwHgrXMnWgWMU2Mzku4l00oSL1o1krnBVinbDETVrz7VsNc2txlECtRI1tVgnTP1O8ZeUMTHXPgOyKHsHWt7bP4Qz83dv-5NLqTZKfm8MT0e8nAUoOAlCIIgrZI4zTKchzFBbjlFhRcV-lX3f9wqLoyL94d-xWRjJ0WeN1IbBaTx8NKuGi6Mh3Pk4cyuSl4u4_739fVvvyy0XOBgEXr4InjBbsI-N1g64QGdZcDiY3TuOnHPt4LUP9nFAkq7qU6b0WKOM-LZjGlUZRCfABO6jiNMNIMJcEqjAG02Clz0bZR5j0kt4LJHy2kUjGDxFIxEWZpHp5gWMtdzxEkOcaAKp2oOIX3lFnqfCKZ-nbUX1q_jt_th7H86UK_29KCN8_2pPKEKR57LKc-8zLIwPwkncT1HnPQAJ01m0XNpl8rq_vKW6CGMVDe3eL3Ph30Yjx8KQepXzfUvRNg86UWrI4Ps6jtVgsSRG6lnU-plBHnJwlOimbmeI04-i0OCcZbCxA5r-jdt-FtW25__q5yxs7NXwWaRYK4mXS7paWq6niNOeKBmGpJsYsYvLlc_yD1lq27BSGukOi5IP-BTcgxDPiWGpTkagedisAinp4nheo440YEYYRTHJ4TW3ubPG_xRWP1DKlr7RuunOTnDSb6sjoWUO-f5tG3nqz113UewZA6WQUbD4Yzo6ELDzQWhjyDYTX9Wxtnk86q_cSmboImgeylmPRh8BXHjTpT6nVT3RnGxvYNq3rwXtjhAG6gUR1LElTCq0_wJ7qBaCXNr5ro_VUOmXfMa7l-1gaY__yBtWP-lE_y_HWzag5H2UNE-K25gsz9aTAYxcIe4DYMaDHxnYB9KR01aSaG7BpSz-UhYfORP57HRn8uZP0kUxTT71myusT-6PCgidE2ssr8KfuDo4v5htb-YH4_bDwhSR2EkON0ZszAIMYvyKcFbe40o7h_m099DQ4bYKaWsx98nE8FuppHHdJvLojTMg7Sa8lgra-5bqPXb9gvQzsBHJ7wPJs4d9jhzPpt5mZZZFaNvranp3PvIzz6m-in_4MzN_8YOB3NdCC0zmLIbeIwknyQl7zm9TwyfCWucu3lHVvvtL0mWLFzmZLnME0RpuGkIn6fkQinyavNJtKI7ovYHwmK_8GZteIWeJGczcp1WHl6XFnbds8OBI0WWeTIywgeMcIrT7yEsU5yOCNFMaRyWFWUnCxS77iNYfHh5SKpgkhzda8cdUPkE6nW_kN_uL6SC-nWm4v7WtlFOSStSTy3vr4in3UuSKhgZJofmZlkyDSym-NM-Ia1W4Uo2DRHscOEddfRbMpZulyH1LA2PW8xb-n0bsNnQl5cw7P8piebUpmp3I3fhM-tsGzZGEW5v5v3nAzhS13Y12EPX23fbpRgTlos0F4Cf8XWWTUJvluOjkKVlmH-opFuH5F0O28s7W7QHA22HyYVq9Y05pl2LWaL-rLGRM2c0Nj00lrH0s8b-LEv9saU_y_KaazOzdBI9Danr34Aaqa6atp5GW0u4dbR7YjhdnCEkfkwixiaJZL6VhRXJ8Yfx8GXy9yyVH8nhH0n7D0p0-o4RObNHUfKD_ByWybDL7veMPSm3zIt37woPUtZDpjzyqvBhjk_KZNxN3x61BhZlmJMM2fm_BxMm-eTmdPAaFYRhUiVos7FybLQhymwoqevNBPn4806UVGMiOXhxCsJwSbI5qpMqDr5eX12sNniBF8m34ZdT0tHc-LyCIEE98PfMjyAYeE7eq72oQKCUu9L2rkTVcPRBdIihivAa2L7Ww01f1wj7V6tOA_KfXPUGAPHJ0eVtJvQESnMpkI2shdvR18CkIkODHy4qGuN-xIN7Prdshhf0TjwK-SzcS7r9vlNAGGokg9r2aqXmL17gnrNIXQP7wp0tMyXemSykvVcUiHGyFVIbTlGjt25cUOwj92_9uCLMUOooHh6K1U_o4adLtL65vr75_erfX9H66vryHj3cuOaLX7-iu8vbm7uHvsZwe6xOkWm7Rj6sVbx1UIDcVgkMkaH-crrZeG2a1lV13Lu0v6QxzZZDWeKHYfTusz74cTfsS09n7DxieZSTMzgP0wTHcZzE6dnunKZZGAZxRVmG6TIty7BKCQ7jNGNRGgX4jJ_jACdBGkYYB3mQLsq8DMs4hywlLCR56sUBNITXC5viFlJtz1xV6jyMsyQJzmpSQq1dhRbjwXrs4dVhbdFLvpypc1ffKrut9uKg5troEdUVHc_78mdf3XIF2742y8UWjXAHtVlvGRyrPllZOlWf__2q22Di0zn-XwAAAP__CKElWw">