rust/tests/run-pass/concurrency/tls_lib_drop_single_thread.rs

33 lines
835 B
Rust
Raw Normal View History

// compile-flags: -Zmiri-tag-raw-pointers
//! Check that destructors of the thread locals are executed on all OSes.
2021-04-18 03:57:56 -05:00
#![feature(thread_local_const_init)]
use std::cell::RefCell;
struct TestCell {
value: RefCell<u8>,
}
impl Drop for TestCell {
fn drop(&mut self) {
eprintln!("Dropping: {}", self.value.borrow())
}
}
thread_local! {
static A: TestCell = TestCell { value: RefCell::new(0) };
2021-04-18 03:57:56 -05:00
static A_CONST: TestCell = const { TestCell { value: RefCell::new(10) } };
}
fn main() {
A.with(|f| {
assert_eq!(*f.value.borrow(), 0);
*f.value.borrow_mut() = 5;
});
2021-04-18 03:57:56 -05:00
A_CONST.with(|f| {
assert_eq!(*f.value.borrow(), 10);
2021-04-20 02:59:26 -05:00
*f.value.borrow_mut() = 5; // Same value as above since the drop order is different on different platforms
2021-04-18 03:57:56 -05:00
});
eprintln!("Continue main.")
}