| // compile-flags: -O |
| |
| // On x86 the closure is inlined in foo() producing 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 |
| // On s390x the closure is also in another function |
| // ignore-s390x FIXME |
| // On loongarch64 the closure is also in another function |
| // ignore-loongarch64 FIXME |
| |
| #![crate_type = "lib"] |
| #![feature(c_unwind)] |
| |
| 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() |
| } |