//@ revisions: emscripten wasi seh //@[emscripten] compile-flags: --target wasm32-unknown-emscripten -Z emscripten-wasm-eh //@[wasi] compile-flags: --target wasm32-wasip1 -C panic=unwind //@[seh] compile-flags: --target x86_64-pc-windows-msvc //@[emscripten] needs-llvm-components: webassembly //@[wasi] needs-llvm-components: webassembly //@[seh] needs-llvm-components: x86 // Ensure a catch-all generates: // - `catchpad ... [ptr null]` on Wasm (otherwise LLVM gets confused) // - `catchpad ... [ptr null, i32 64, ptr null]` on Windows (otherwise we catch SEH exceptions) #![feature(no_core, lang_items, rustc_attrs)] #![crate_type = "lib"] #![no_std] #![no_core] #[lang = "sized"] trait Sized {} unsafe extern "C-unwind" { safe fn unwinds(); } #[lang = "panic_cannot_unwind"] fn panic_cannot_unwind() -> ! { loop {} } #[no_mangle] #[rustc_nounwind] pub fn doesnt_unwind() { // emscripten: %catchpad = catchpad within %catchswitch [ptr null] // wasi: %catchpad = catchpad within %catchswitch [ptr null] // seh: %catchpad = catchpad within %catchswitch [ptr null, i32 64, ptr null] unwinds(); }