// FIXME: add support for `// only-atomic` to compiletest/header.rs //@ only-x86_64 use std::sync::atomic::{AtomicI16, AtomicI32, AtomicI64, AtomicI8, AtomicIsize, Ordering}; fn main() { // `AtomicI8` test cases let x = AtomicI8::new(0); // Allowed load ordering modes let _ = x.load(Ordering::Acquire); let _ = x.load(Ordering::SeqCst); let _ = x.load(Ordering::Relaxed); // Allowed store ordering modes x.store(1, Ordering::Release); x.store(1, Ordering::SeqCst); x.store(1, Ordering::Relaxed); // Disallowed load ordering modes let _ = x.load(Ordering::Release); //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering let _ = x.load(Ordering::AcqRel); //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering // Disallowed store ordering modes x.store(1, Ordering::Acquire); //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering x.store(1, Ordering::AcqRel); //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering // `AtomicI16` test cases let x = AtomicI16::new(0); // Allowed load ordering modes let _ = x.load(Ordering::Acquire); let _ = x.load(Ordering::SeqCst); let _ = x.load(Ordering::Relaxed); // Allowed store ordering modes x.store(1, Ordering::Release); x.store(1, Ordering::SeqCst); x.store(1, Ordering::Relaxed); // Disallowed load ordering modes let _ = x.load(Ordering::Release); //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering let _ = x.load(Ordering::AcqRel); //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering // Disallowed store ordering modes x.store(1, Ordering::Acquire); //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering x.store(1, Ordering::AcqRel); //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering // `AtomicI32` test cases let x = AtomicI32::new(0); // Allowed load ordering modes let _ = x.load(Ordering::Acquire); let _ = x.load(Ordering::SeqCst); let _ = x.load(Ordering::Relaxed); // Allowed store ordering modes x.store(1, Ordering::Release); x.store(1, Ordering::SeqCst); x.store(1, Ordering::Relaxed); // Disallowed load ordering modes let _ = x.load(Ordering::Release); //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering let _ = x.load(Ordering::AcqRel); //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering // Disallowed store ordering modes x.store(1, Ordering::Acquire); //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering x.store(1, Ordering::AcqRel); //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering // `AtomicI64` test cases let x = AtomicI64::new(0); // Allowed load ordering modes let _ = x.load(Ordering::Acquire); let _ = x.load(Ordering::SeqCst); let _ = x.load(Ordering::Relaxed); // Allowed store ordering modes x.store(1, Ordering::Release); x.store(1, Ordering::SeqCst); x.store(1, Ordering::Relaxed); // Disallowed load ordering modes let _ = x.load(Ordering::Release); //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering let _ = x.load(Ordering::AcqRel); //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering // Disallowed store ordering modes x.store(1, Ordering::Acquire); //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering x.store(1, Ordering::AcqRel); //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering // `AtomicIsize` test cases let x = AtomicIsize::new(0); // Allowed load ordering modes let _ = x.load(Ordering::Acquire); let _ = x.load(Ordering::SeqCst); let _ = x.load(Ordering::Relaxed); // Allowed store ordering modes x.store(1, Ordering::Release); x.store(1, Ordering::SeqCst); x.store(1, Ordering::Relaxed); // Disallowed load ordering modes let _ = x.load(Ordering::Release); //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering let _ = x.load(Ordering::AcqRel); //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering // Disallowed store ordering modes x.store(1, Ordering::Acquire); //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering x.store(1, Ordering::AcqRel); //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering }