// Make sure the workaround for "crate ... required to be available in rlib format, but was not // found in this form" errors works without `-C prefer-dynamic` (`panic!` calls foreign function // `__rust_start_panic`). // no-prefer-dynamic #![feature(c_unwind, unboxed_closures)] use std::panic; #[no_mangle] extern "C-unwind" fn good_unwind_c() { panic!(); } #[no_mangle] fn good_unwind_rust() { panic!(); } // Diverging function calls are on a different code path. #[no_mangle] extern "rust-call" fn good_unwind_rust_call(_: ()) -> ! { panic!(); } fn main() -> ! { extern "C-unwind" { fn good_unwind_c(); } panic::catch_unwind(|| unsafe { good_unwind_c() }).unwrap_err(); extern "Rust" { fn good_unwind_rust(); } panic::catch_unwind(|| unsafe { good_unwind_rust() }).unwrap_err(); extern "rust-call" { fn good_unwind_rust_call(_: ()) -> !; } unsafe { good_unwind_rust_call(()) } }