]> git.lizzy.rs Git - rust.git/blob - tests/ui/consts/issue-90762.rs
Rollup merge of #106699 - eholk:await-chains-drop-tracking, r=wesleywiser
[rust.git] / tests / ui / consts / issue-90762.rs
1 // run-pass
2 #![allow(unreachable_code)]
3
4 use std::sync::atomic::{AtomicBool, Ordering, AtomicUsize};
5
6 struct Print(usize);
7
8 impl Drop for Print {
9     fn drop(&mut self) {
10         println!("{}", self.0);
11         FOO[self.0].store(true, Ordering::Relaxed);
12         assert_eq!(BAR.fetch_sub(1, Ordering::Relaxed), self.0);
13     }
14 }
15
16 const A: Print = Print(0);
17 const B: Print = Print(1);
18
19 static FOO: [AtomicBool; 3] =
20     [AtomicBool::new(false), AtomicBool::new(false), AtomicBool::new(false)];
21 static BAR: AtomicUsize = AtomicUsize::new(2);
22
23 fn main() {
24     loop {
25         std::mem::forget(({ A }, B, Print(2), break));
26     }
27     for (i, b) in FOO.iter().enumerate() {
28         assert!(b.load(Ordering::Relaxed), "{} not set", i);
29     }
30     assert_eq!(BAR.fetch_add(1, Ordering::Relaxed), usize::max_value());
31 }