rust/tests/ui/threads-sendsync/tls-dont-move-after-init.rs
2025-05-30 12:14:27 +02:00

38 lines
588 B
Rust

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