//@ 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); } | |
} |