]> git.lizzy.rs Git - rust.git/blob - src/test/ui/issues/issue-29948.rs
Auto merge of #65838 - estebank:resilient-recovery, r=Centril
[rust.git] / src / test / ui / issues / issue-29948.rs
1 // run-pass
2 // ignore-wasm32-bare compiled with panic=abort by default
3
4 use std::panic;
5
6 impl<'a> panic::UnwindSafe for Foo<'a> {}
7 impl<'a> panic::RefUnwindSafe for Foo<'a> {}
8
9 struct Foo<'a>(&'a mut bool);
10
11 impl<'a> Drop for Foo<'a> {
12     fn drop(&mut self) {
13         *self.0 = true;
14     }
15 }
16
17 fn f<T: FnOnce()>(t: T) {
18     t()
19 }
20
21 fn main() {
22     let mut ran_drop = false;
23     {
24         let x = Foo(&mut ran_drop);
25         let x = move || { let _ = x; };
26         f(x);
27     }
28     assert!(ran_drop);
29
30     let mut ran_drop = false;
31     {
32         let x = Foo(&mut ran_drop);
33         let result = panic::catch_unwind(move || {
34             let x = move || { let _ = x; panic!() };
35             f(x);
36         });
37         assert!(result.is_err());
38     }
39     assert!(ran_drop);
40 }