blob: 54fcc32e9bd7964f379b9d276dc0eb159b8e4fb5 [file] [log] [blame]
//@ run-pass
//@ needs-threads
use std::cell::Cell;
use std::thread;
#[derive(Default)]
struct Foo {
ptr: Cell<*const Foo>,
}
impl Foo {
fn touch(&self) {
if self.ptr.get().is_null() {
self.ptr.set(self);
} else {
assert!(self.ptr.get() == self);
}
}
}
impl Drop for Foo {
fn drop(&mut self) {
self.touch();
}
}
thread_local!(static FOO: Foo = Foo::default());
fn main() {
thread::spawn(|| {
FOO.with(|foo| foo.touch());
FOO.with(|foo| foo.touch());
})
.join()
.unwrap();
}