| // run-pass | |
| // needs-unwind | |
| #![allow(dead_code)] | |
| #![allow(non_upper_case_globals)] | |
| // ignore-emscripten no threads support | |
| use std::thread; | |
| static mut dropped: bool = false; | |
| struct A { | |
| b: B, | |
| } | |
| struct B { | |
| foo: isize, | |
| } | |
| impl Drop for A { | |
| fn drop(&mut self) { | |
| panic!() | |
| } | |
| } | |
| impl Drop for B { | |
| fn drop(&mut self) { | |
| unsafe { dropped = true; } | |
| } | |
| } | |
| pub fn main() { | |
| let ret = thread::spawn(move|| { | |
| let _a = A { b: B { foo: 3 } }; | |
| }).join(); | |
| assert!(ret.is_err()); | |
| unsafe { assert!(dropped); } | |
| } |