blob: 8898205bfb9ac6a68bd5169c709403c92cdd411a [file] [log] [blame] [edit]
// We disable the GC for this test because it would change what is printed.
//@compile-flags: -Zmiri-tree-borrows -Zmiri-provenance-gc=0
#[path = "../../utils/mod.rs"]
#[macro_use]
mod utils;
// Check the formatting of the trees.
fn main() {
unsafe {
alignment_check();
structure_check();
}
}
// Alignment check: we split the array at indexes with different amounts of
// decimal digits to verify proper padding.
unsafe fn alignment_check() {
let data: &mut [u8] = &mut [0; 1024];
name!(data.as_ptr()=>2, "data");
name!(data.as_ptr()=>2, "data");
let alloc_id = alloc_id!(data.as_ptr());
let x = &mut data[1];
name!(x as *mut _, "data[1]");
*x = 1;
let x = &mut data[10];
name!(x as *mut _, "data[10]");
*x = 1;
let x = &mut data[100];
name!(x as *mut _, "data[100]");
*x = 1;
let _val = data[100]; // So that the above is Frz
let x = &mut data[1000];
name!(x as *mut _, "data[1000]");
*x = 1;
print_state!(alloc_id);
}
// Tree structure check: somewhat complex organization of reborrows.
unsafe fn structure_check() {
let x = &0u8;
name!(x);
let xa = &*x;
name!(xa);
let xb = &*x;
name!(xb);
let xc = &*x;
name!(xc);
let xaa = &*xa;
name!(xaa);
let xab = &*xa;
name!(xab);
let xba = &*xb;
name!(xba);
let xbaa = &*xba;
name!(xbaa);
let xbaaa = &*xbaa;
name!(xbaaa);
let xbaaaa = &*xbaaa;
name!(xbaaaa);
let xca = &*xc;
name!(xca);
let xcb = &*xc;
name!(xcb);
let xcaa = &*xca;
name!(xcaa);
let xcab = &*xca;
name!(xcab);
let xcba = &*xcb;
name!(xcba);
let xcbb = &*xcb;
name!(xcbb);
let alloc_id = alloc_id!(x);
print_state!(alloc_id);
}