2021-03-25 10:49:35 +00:00
|
|
|
// run-pass
|
2021-04-29 17:04:16 +00:00
|
|
|
// needs-unwind
|
2021-03-25 10:49:35 +00:00
|
|
|
// ignore-windows target requires uwtable
|
|
|
|
// compile-flags: -C panic=unwind -C force-unwind-tables=n
|
|
|
|
|
|
|
|
use std::panic::{self, AssertUnwindSafe};
|
|
|
|
|
|
|
|
struct Increase<'a>(&'a mut u8);
|
|
|
|
|
|
|
|
impl Drop for Increase<'_> {
|
|
|
|
fn drop(&mut self) {
|
|
|
|
*self.0 += 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[inline(never)]
|
|
|
|
fn unwind() {
|
|
|
|
panic!();
|
|
|
|
}
|
|
|
|
|
|
|
|
#[inline(never)]
|
|
|
|
fn increase(count: &mut u8) {
|
|
|
|
let _increase = Increase(count);
|
|
|
|
unwind();
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let mut count = 0;
|
|
|
|
assert!(panic::catch_unwind(AssertUnwindSafe(
|
|
|
|
#[inline(never)]
|
|
|
|
|| increase(&mut count)
|
|
|
|
)).is_err());
|
|
|
|
assert_eq!(count, 1);
|
|
|
|
}
|