blob: 18e039fdd0dfebc2c8a0fa6a447c85239898ca34 [file] [log] [blame]
//@compile-flags: -Zmiri-genmc -Zmiri-disable-stacked-borrows
// Test that we can read the initial value of global, heap and stack allocations in GenMC mode.
#![no_main]
use std::sync::atomic::AtomicU64;
use std::sync::atomic::Ordering::*;
static X: AtomicU64 = AtomicU64::new(1234);
#[unsafe(no_mangle)]
fn miri_start(_argc: isize, _argv: *const *const u8) -> isize {
// Read initial value of global allocation.
if 1234 != unsafe { *X.as_ptr() } {
std::process::abort();
}
if 1234 != X.load(SeqCst) {
std::process::abort();
}
// Read initial value of stack allocation.
let a = AtomicU64::new(0xBB);
if 0xBB != unsafe { *a.as_ptr() } {
std::process::abort();
}
if 0xBB != a.load(SeqCst) {
std::process::abort();
}
// Read initial value of heap allocation.
let b = Box::new(AtomicU64::new(0xCCC));
if 0xCCC != unsafe { *b.as_ptr() } {
std::process::abort();
}
if 0xCCC != b.load(SeqCst) {
std::process::abort();
}
0
}