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

    <tr>
        <th>Summary</th>
        <td>
            Crash in Inliner when using WebAssembly exception handling
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    The attached program crashes in the inliner when wasm exception handling is enabled.
It was reduced with creduce, but I haven't attempted to reduce it manually yet.

```
class a;
class b {
public:
  a *operator->();
};
class c {
  void m_fn1();
  void e();
};
class f {
public:
  void g();
};
class a {
public:
  int h() { am.g(); return 0;}
  f am;
};
void c::e() {
  c *ao;
  bool ap = false;
  try {
    m_fn1();
    try {
      b d;
      int aq = d->h();
      if (aq)
        ap = true;
      m_fn1();
    } catch (int) {
    }
  } catch (...) {
    if (ap)
      ao = 0;
  }
}
```
command:
```
```
"/path/to/clang-15" "-cc1" "-triple" "wasm32-unknown-emscripten" "-emit-obj"  "-target-feature" "+exception-handling" "-mllvm" "-wasm-enable-eh"  "-O1"  "-std=gnu++17"  "-fcxx-exceptions" "-fexceptions" "-exception-model=wasm"  "-x" "c++" "repro.cpp"
```

It gives the following assertion failure:
```
clang-15: /s/llvm-upstream/llvm-project/llvm/lib/Transforms/Utils/InlineFunction.cpp:667: void HandleInlinedEHPad(llvm::InvokeInst *, llvm::BasicBlock *, llvm::ClonedCodeInfo &): Assertion `UnwindDest->getFirstNonPHI()->isEHPad() && "unexpected BasicBlock!"' 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: /s/emr/install/bin/clang-15 -cc1 -triple wasm32-unknown-emscripten -emit-obj -target-feature +exception-handling -mllvm -wasm-enable-eh -O1 -std=gnu++17 -fcxx-exceptions -fexceptions -exception-model=wasm -x c++ repro.cpp
1.      <eof> parser at end of file
2.      Optimizer
 #0 0x00007fe0fc8b75c3 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/local/google/home/dschuff/s/emr/install/bin/../lib/libLLVMSupport.so.15git+0x23f5c3)
 #1 0x00007fe0fc8b527e llvm::sys::RunSignalHandlers() (/usr/local/google/home/dschuff/s/emr/install/bin/../lib/libLLVMSupport.so.15git+0x23d27e)
 #2 0x00007fe0fc8b7a8a SignalHandler(int) Signals.cpp:0:0
 #3 0x00007fe100878200 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12200)
 #4 0x00007fe0fc1568a1 raise ./signal/../sysdeps/unix/sysv/linux/raise.c:50:1
 #5 0x00007fe0fc140546 abort ./stdlib/abort.c:81:7
 #6 0x00007fe0fc14042f get_sysdep_segment_value ./intl/loadmsgcat.c:509:8
 #7 0x00007fe0fc14042f _nl_load_domain ./intl/loadmsgcat.c:970:34
 #8 0x00007fe0fc14f222 (/lib/x86_64-linux-gnu/libc.so.6+0x31222)
 #9 0x00007fe0fe0213b4 llvm::InlineFunction(llvm::CallBase&, llvm::InlineFunctionInfo&, llvm::AAResults*, bool, llvm::Function*) (/usr/local/google/home/dschuff/s/emr/install/bin/../lib/libLLVMTransformUtils.so.15git+0x1e63b4)
#10 0x00007fe0ff626061 llvm::InlinerPass::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/usr/local/google/home/dschuff/s/emr/install/bin/../lib/libLLVMipo.so.15git+0x2c6061)
#11 0x00007fe0ff62e4ad llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::InlinerPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) Inliner.cpp:0:0
#12 0x00007fe0fdb0c221 llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/usr/local/google/home/dschuff/s/emr/install/bin/../lib/libLLVMAnalysis.so.15git+0x36d221)
#13 0x00007fe0ff62e78d llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) Inliner.cpp:0:0
#14 0x00007fe0fdb0fe0b llvm::DevirtSCCRepeatedPass::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/usr/local/google/home/dschuff/s/emr/install/bin/../lib/libLLVMAnalysis.so.15git+0x370e0b)
#15 0x00007fe0ff62ed4d llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::DevirtSCCRepeatedPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) Inliner.cpp:0:0
#16 0x00007fe0fdb0e57a llvm::ModuleToPostOrderCGSCCPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/usr/local/google/home/dschuff/s/emr/install/bin/../lib/libLLVMAnalysis.so.15git+0x36f57a)
#17 0x00007fe0ff62eb0d llvm::detail::PassModel<llvm::Module, llvm::ModuleToPostOrderCGSCCPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) Inliner.cpp:0:0
#18 0x00007fe0fd55ef04 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/usr/local/google/home/dschuff/s/emr/install/bin/../lib/libLLVMCore.so.15git+0x463f04)
#19 0x00007fe0ff628ca6 llvm::ModuleInlinerWrapperPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/usr/local/google/home/dschuff/s/emr/install/bin/../lib/libLLVMipo.so.15git+0x2c8ca6)
#20 0x00007fe0fb799f8d llvm::detail::PassModel<llvm::Module, llvm::ModuleInlinerWrapperPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) PassBuilder.cpp:0:0
#21 0x00007fe0fd55ef04 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/usr/local/google/home/dschuff/s/emr/install/bin/../lib/libLLVMCore.so.15git+0x463f04)
#22 0x00007fe1002f8de2 (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&) BackendUtil.cpp:0:0
#23 0x00007fe1002efee0 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) (/usr/local/google/home/dschuff/s/emr/install/bin/../lib/libclangCodeGen.so.15git+0x285ee0)
#24 0x00007fe10069dc94 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) CodeGenAction.cpp:0:0
#25 0x00007fe0fa5f9cf3 clang::ParseAST(clang::Sema&, bool, bool) (/usr/local/google/home/dschuff/s/emr/install/bin/../lib/../lib/libclangParse.so.15git+0x66cf3)
#26 0x00007fe0fef180e0 clang::FrontendAction::Execute() (/usr/local/google/home/dschuff/s/emr/install/bin/../lib/libclangFrontend.so.15git+0x16b0e0)
#27 0x00007fe0fee888a8 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/local/google/home/dschuff/s/emr/install/bin/../lib/libclangFrontend.so.15git+0xdb8a8)
#28 0x00007fe1008629b3 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/local/google/home/dschuff/s/emr/install/bin/../lib/libclangFrontendTool.so.15git+0x49b3)
#29 0x0000000000215150 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/s/emr/install/bin/clang-15+0x215150)
#30 0x0000000000213030 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#31 0x0000000000212dc5 main (/s/emr/install/bin/clang-15+0x212dc5)
#32 0x00007fe0fc1417fd __libc_start_main ./csu/../csu/libc-start.c:332:16
#33 0x000000000020ff3a _start (/s/emr/install/bin/clang-15+0x20ff3a)

```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztWl1z27gO_TXOC8ceibJk-yEPjhO3mWlvM026--ihRMjWRl8lqcTZX78gJdmibCc3e5Pd3k47qW2JJAgc4ACUyLDgT-d3GyBMKRZtgJNSFGvBMhIJJjcgSZIThe1JniY5CPK4gZw8MpkR2EZQqqTIyYblHFvXJJEEchamwEcD53LgzK-V7ksE8CpC2Y-J2qBgczWgCxJWilzj8AfIB3SitBKQlQp7qqIZRBJFMpZXLE2fyBOoRnDzGTjNn7mMUiYlYQPvonsdksGkuVFWYZpEA68ZTggjAzovShBMFWI48K4GdDqgs52EweSyJy3aSyPkoUg4yVZx7vbGNU3worj4GeWMiPWLItgzIpJckU0tQfciLBvtBSLCqhI5cbRAFNuMibHX0emMPka6N4e90HZcpLFkRQeDsChSwkoy8C5JzFIJnTYlnrqDyQkYj3REuYRbXWo72XczEddu3BwRhL0QbTpl33VL5zZpdVSigt6QU1ohLiRiKtpoiTh7DwvTob2w-o5Go4O-jV5lTy9WGK2czsQ7qfsfPQoUGbKF70Kg19y_pHRAlyVTiNdSFfiBIZWvh66PLagTHUaR2_5UIilTaK50BvDosMrv8-IxH0ImI2xWmsd1b8gSNSzCP_R1PZyJNahhDAyDrhUzoBe7NDJs00grIkvTh6y90BMO6-QyhM1O6hd391MqNPtynVcoFP_cya4ljrbb4W4e2YqMD2_tlckKDinK0_PuBG2bflE9RXMlAHPmKCpLbdBRmNtcuE4eMKPqdBoXaVo86pyJFAZh0mjMklRDc8J3O9d4c5x1iTovNUDDqpRKAHK2uUZl_oBINZf6Kwnx806wXMaFyPTAbypJ9fe1yerLKo-0BsYGbx4EEz2HoftH7ROou_GrjzeMY6QauSYNXOcPxT02S6XJr1P6vu2CySS6SIvo_rBtkRYob4EYX-cxhjkNDMHmZL5DA-3-liNC_BKk0pzG6FkmQqr_FPnNx-uak_p-Ilu9DLG0qEC7pcphWyIQWE32qgyoa8JuYtDe1ambT1fz2ysiqxDDFjNqWK0xO5aFULoSbZQqpVacLvFvjUWsCkfItA7ENvCJlBVofAnCh8kpSisOxu-mqpKQRfdKsLoIliZ-IkDLOZFFJerbeiTGRhElTJsgqpzUHGtUvsV6fU94lZW7gHGwaXbT1G-kW5VBrmQnXiATWjt0F5ZT_BUmeYfzRLOdNDwnJxlOdtwmPVKTo3QmNZFJj8IEuUsOSUv6bCVdnpITDCXDLWlISfZ0NKC4GpSBt4AixmAhJRMYYbjSwJUKJ0VMYgyDuifVPb-g8Cz5E0STcgfUc4izdfDfJAYnjqbhxI-8TizLJ1n_uBFYCIxb7mrfdogi2OOqaHkaaP-2RUOH7bKS2jEYoEy7ZV0Ua51pl5si019cRpsqjp91oi4rDdPx89On3z7fVqUO4JEsRq6PQYvYOFvqxaj9vtCgeW7PPJ9O4Jh5X6v8NlnnLK1zgpA7xv3DFnBU0LKA9h3EpoxYuu6LdH1bNqnOMf93gry9INdxppMpdRyyWgnMQIWAlVCNsbWW22mwCsZDjPFqOzQhrBtKtUEvc620YxR2KUqx9B1b-rp-MGUuESyRQDQG0qjYIoL4cyg1bFWebOsbD2YqnBa_zbiRXpb52hp3P41vTzN2_HFAWKiTmhGseG2HuWUkTF38mOwlBH0JYxoTJPyqVmolYa1TzOqBpVWtO6KcmjhgPJNrXPU0munkPt0LnhwTvMrTlR644kXG8LHjtLzZRJvqjfcCpz2BMTW1-SVnRdpNgXGTh36ilptmXZngUNcLx6Rb-7q102L7AuMaaw40VD81Rte-gy7z-VeQVYp5uy6aehFt99hPOX9f_u2WDGa5YNPQhQDh2OGl84iVJ-OABk7gHtgubrCoNTmxslH7xP580sh9EKzc1LduF4tDgJAcTzKRn1nO1khtb_GyiO54uw9K1099wQt97NXLBxT6reRYmGtf1euXd_REUha9LBhpdC343R78MGa8ozQHhSueplKhDz7X5fOV4HWdaDXcYJIE8QC8dg_If8Bp_6PHUMTPGYeNkw5rnA4Tq1jy0Iko7bLUhMbftOiXk3-KZNPabGccL-CU2hnH62ecyfTtM85PGJC_EucPyqlnE-e4lzjxK-zIvISHRCiU-xVK0I_svxY6b5d7Jg6CbeUev597-Pjtc89xn_6i7w8als_SN-jRF_wJ68jEAKlSuCtuCqm-CA7CTKL9PeesxMf_45jVw16FUTOksfrfKOQxmm6RadInU-i8jkwtDItXIfpWRNojeiq038BNzwaX9fqB-z7ETvdVwak1zDHY_nVD3y8eF4UAOxbHgYdIWbE468XiNGLBQVQ1zvgd00P53CuFHxqOIw_12tguGtR6pxJOZrP4lUvs08w8guH_FSG1xhdVkvITpKTuL1K-ESkptV6MUwxCMK9XWV7kT1lRSZKzDGRptj1mtQlXWaL0dl4Wpk8fIS2hKaFfq7zZZGH6LeZNUoIORJRmNqLqThcsuoecz5sXnQtiNop0S5Un3ytYlcoGTG-wlI8iUbBqt1k6gzjEDNcJK2QHKHhhYO3J2lsvTXtXFOmXSpWVWiZ10Pw3c_ZG7SeckcZw_cb1eFTbexQUYgCHdJDTsDdC6ilsYC8Tts6xIieRvMrXBndjaKfLR2DIqVtgItp8afbdIvxQh131Du4HyF_odWd2CV_o9Al_HeuyR-1WiSRff4X4WDZr3pb_WCH0Xrw1VjbY90rI1Md4sLg7tgImmPFoNj6C0wIxr7KWpPW-mdkASA1Nv-VJL5Lmt3c4RsG2XX43Cs27Zwl6wWs9tTE_nkWx19XlRu_OomB7plvIWBMN7W5I_f0u-B6B2qhlAx0EqLqFs_WAAbE7dWxiLoVGaxeQNVm3EFVqd5jq_YKlnby3iRPgc5AdLdajAMB0OmVTm_FZiTlL6DMfLI_AsqPl2vS02e9Zzp6xlIdoh2Xo1N7rDegstEKxMWlv7wPqeWjeAR7vuSlnGaiLSK9wowmWje1auv5HXd_1MSQjd6X3V60lylwI9qRTq7eINky0GXjevG-w7-ENfTjIMvXl4yV1fjI6dJXcHa9olfQcvNWiv3DvDNM7qt5mKP03iPAJ8jor06MamyDjInk4sTbcHXpoJ6U88onZdX6lOXqgZQ7t7US7k5iT1Up7D6sDE2q129yOZNW6uP6pOw1NJ7PNjcLw0w32wj1bbXxA8hipxb5ScTN0r7h94OyMn3t85s3YmUpUCucLc2oJtb7ungKupD7d8zuE7SrvyJHgs0qk53___JTvTx3vbHMe08Cl48CdUSRqFE9mIY8n8YzzGR0zPxifpSyEVJ4PfH0oL4dHYkToo17-5VlyTh1KncBBoo8dGoy8gE1CZxx7U98PIoDB2MESgysurceoEOszcW5UCqu1xMY0kUruG_HBIVnnAGY6lM8qtSnEecPnMzP1uVH9L2jMsSU">