| // compile-flags: -O | |
| // On x86 the closure is inlined in foo() producting something like | |
| // define i32 @foo() [...] { | |
| // tail call void @bar() [...] | |
| // ret i32 0 | |
| // } | |
| // On riscv the closure is another function, placed before fn foo so CHECK can't | |
| // find it | |
| // ignore-riscv64 FIXME | |
| #![crate_type = "lib"] | |
| extern "C" { | |
| fn bar(); | |
| } | |
| // CHECK-LABEL: @foo | |
| #[no_mangle] | |
| pub unsafe fn foo() -> i32 { | |
| // CHECK: call void @bar | |
| // CHECK: ret i32 0 | |
| std::panic::catch_unwind(|| { | |
| bar(); | |
| 0 | |
| }) | |
| .unwrap() | |
| } |