//@ ignore-emscripten thread_local!(static FOO: Foo = Foo); thread_local!(static BAR: Bar = Bar(1)); thread_local!(static BAZ: Baz = Baz); static mut HIT: bool = false; struct Foo; struct Bar(i32); struct Baz; impl Drop for Foo { fn drop(&mut self) { BAR.with(|_| {}); } } impl Drop for Bar { fn drop(&mut self) { assert_eq!(self.0, 1); self.0 = 2; BAZ.with(|_| {}); assert_eq!(self.0, 2); } } impl Drop for Baz { fn drop(&mut self) { unsafe { HIT = true; } } } fn main() { std::thread::spawn(|| { FOO.with(|_| {}); }).join().unwrap(); assert!(unsafe { HIT }); }