2 // Checks that struct-literal expression order-of-eval is as expected
3 // even when no Drop-implementations are involved.
5 use std::sync::atomic::{Ordering, AtomicUsize};
7 struct W { wrapped: u32 }
8 struct S { f0: W, _f1: i32 }
11 const VAL: u32 = 0x89AB_CDEF;
12 let w = W { wrapped: VAL };
14 _f1: { event(0x01); 23 },
15 f0: { event(0x02); w },
17 assert_eq!(s.f0.wrapped, VAL);
18 let actual = event_log();
20 assert!(expect == actual,
21 "expect: 0x{:x} actual: 0x{:x}", expect, actual);
24 static LOG: AtomicUsize = AtomicUsize::new(0);
26 fn event_log() -> usize {
27 LOG.load(Ordering::SeqCst)
31 let old_log = LOG.load(Ordering::SeqCst);
32 let new_log = (old_log << 8) + tag as usize;
33 LOG.store(new_log, Ordering::SeqCst);