| #![feature(c_unwind)] |
| |
| //! 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 |
| } |