| //@ revisions: edition2021 edition2024 |
| //@ ignore-wasm no panic or subprocess support |
| //@ [edition2024] compile-flags: -Zunstable-options |
| //@ [edition2024] edition: 2024 |
| //@ run-pass |
| //@ needs-unwind |
| #![cfg_attr(edition2024, feature(shorter_tail_lifetimes))] |
| |
| use std::sync::Mutex; |
| |
| struct PanicOnDrop; |
| impl Drop for PanicOnDrop { |
| fn drop(&mut self) { |
| panic!() |
| } |
| } |
| |
| fn f(m: &Mutex<i32>) -> i32 { |
| let _x = PanicOnDrop; |
| *m.lock().unwrap() |
| } |
| |
| fn main() { |
| let m = Mutex::new(0); |
| let _ = std::panic::catch_unwind(|| f(&m)); |
| #[cfg(edition2024)] |
| assert!(m.lock().is_ok()); |
| #[cfg(edition2021)] |
| assert!(m.lock().is_err()); |
| } |