2018-08-30 07:18:55 -05:00
|
|
|
// run-pass
|
2019-01-26 10:14:49 -06:00
|
|
|
use std::sync::atomic::{AtomicUsize, Ordering};
|
2017-08-31 04:21:11 -05:00
|
|
|
|
2019-01-26 10:14:49 -06:00
|
|
|
static DROP_COUNTER: AtomicUsize = AtomicUsize::new(0);
|
2017-08-31 04:21:11 -05:00
|
|
|
|
2016-08-28 18:10:12 -05:00
|
|
|
struct A(i32);
|
|
|
|
|
|
|
|
impl Drop for A {
|
2017-08-31 04:21:11 -05:00
|
|
|
fn drop(&mut self) {
|
|
|
|
// update global drop count
|
|
|
|
DROP_COUNTER.fetch_add(1, Ordering::SeqCst);
|
|
|
|
}
|
2016-08-28 18:10:12 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
static FOO: A = A(123);
|
2017-08-31 04:21:11 -05:00
|
|
|
const BAR: A = A(456);
|
|
|
|
|
|
|
|
impl A {
|
|
|
|
const BAZ: A = A(789);
|
|
|
|
}
|
2016-08-28 18:10:12 -05:00
|
|
|
|
|
|
|
fn main() {
|
2017-08-31 04:21:11 -05:00
|
|
|
assert_eq!(DROP_COUNTER.load(Ordering::SeqCst), 0);
|
|
|
|
assert_eq!(&FOO.0, &123);
|
|
|
|
assert_eq!(DROP_COUNTER.load(Ordering::SeqCst), 0);
|
|
|
|
assert_eq!(BAR.0, 456);
|
|
|
|
assert_eq!(DROP_COUNTER.load(Ordering::SeqCst), 1);
|
|
|
|
assert_eq!(A::BAZ.0, 789);
|
|
|
|
assert_eq!(DROP_COUNTER.load(Ordering::SeqCst), 2);
|
2016-08-28 18:10:12 -05:00
|
|
|
}
|