//@ run-pass | |
#![allow(stable_features)] | |
//@ needs-threads | |
#![feature(thread_local_try_with)] | |
use std::thread; | |
static mut DROP_RUN: bool = false; | |
struct Foo; | |
thread_local!(static FOO: Foo = Foo {}); | |
impl Drop for Foo { | |
fn drop(&mut self) { | |
assert!(FOO.try_with(|_| panic!("`try_with` closure run")).is_err()); | |
unsafe { | |
DROP_RUN = true; | |
} | |
} | |
} | |
fn main() { | |
thread::spawn(|| { | |
assert_eq!(FOO.try_with(|_| { 132 }).expect("`try_with` failed"), 132); | |
}) | |
.join() | |
.unwrap(); | |
assert!(unsafe { DROP_RUN }); | |
} |