| //@ skip-filecheck | |
| // EMIT_MIR_FOR_EACH_PANIC_STRATEGY | |
| // EMIT_MIR tail_expr_drop_order_unwind.method_1.ElaborateDrops.after.mir | |
| #![deny(tail_expr_drop_order)] | |
| use std::backtrace::Backtrace; | |
| #[derive(Clone)] | |
| struct Guard; | |
| impl Drop for Guard { | |
| fn drop(&mut self) { | |
| println!("Drop!"); | |
| } | |
| } | |
| #[derive(Clone)] | |
| struct OtherDrop; | |
| impl Drop for OtherDrop { | |
| fn drop(&mut self) { | |
| println!("Drop!"); | |
| } | |
| } | |
| fn method_1(g: Guard) { | |
| match method_2(&g.clone()) { | |
| Ok(other_drop) => { | |
| // repro needs something else being dropped too. | |
| } | |
| Err(err) => {} | |
| } | |
| } | |
| fn method_2(_: &Guard) -> Result<OtherDrop, ()> { | |
| panic!("Method 2 panics!"); | |
| } |