| // compile-flags: -C panic=abort -O | |
| #![crate_type = "lib"] | |
| #![feature(unwind_attributes, core_intrinsics)] | |
| extern "C" { | |
| #[unwind(allow)] | |
| fn bar(data: *mut u8); | |
| } | |
| extern "Rust" { | |
| fn catch(data: *mut u8, exception: *mut u8); | |
| } | |
| // CHECK-LABEL: @foo | |
| #[no_mangle] | |
| pub unsafe fn foo() -> i32 { | |
| // CHECK: call void @bar | |
| // CHECK: ret i32 0 | |
| std::intrinsics::r#try(|x| bar(x), 0 as *mut u8, |x, y| catch(x, y)) | |
| } |