| //! Unwinding when the caller ABI is "C" (without "-unwind") is UB. | |
| // The opposite version (callee does not allow unwinding) is impossible to | |
| // even write: MIR validation catches functions that have `UnwindContinue` but | |
| // are not allowed to unwind. | |
| extern "C-unwind" fn unwind() { | |
| panic!(); | |
| } | |
| fn main() { | |
| let unwind: extern "C-unwind" fn() = unwind; | |
| let unwind: extern "C" fn() = unsafe { std::mem::transmute(unwind) }; | |
| std::panic::catch_unwind(|| unwind()).unwrap_err(); | |
| //~^ ERROR: unwinding past a stack frame that does not allow unwinding | |
| } |