1 //@compile-flags: -Zmiri-permissive-provenance
2 #![feature(strict_provenance)]
9 fn miri_get_alloc_id(ptr: *const u8) -> u64;
10 fn miri_print_borrow_stacks(alloc_id: u64);
13 fn get_alloc_id(ptr: *const u8) -> u64 {
14 unsafe { miri_get_alloc_id(ptr) }
17 fn print_borrow_stacks(alloc_id: u64) {
18 unsafe { miri_print_borrow_stacks(alloc_id) }
22 let ptr = unsafe { alloc::alloc(Layout::new::<u8>()) };
23 let alloc_id = get_alloc_id(ptr);
24 print_borrow_stacks(alloc_id);
26 assert!(!ptr.is_null());
27 print_borrow_stacks(alloc_id);
30 print_borrow_stacks(alloc_id);
32 let _b = unsafe { ManuallyDrop::new(Box::from_raw(ptr)) };
33 print_borrow_stacks(alloc_id);
35 let _ptr = unsafe { &*ptr };
36 print_borrow_stacks(alloc_id);
38 // Create an unknown bottom, and print it
39 let ptr = ptr as usize as *mut u8;
43 print_borrow_stacks(alloc_id);
45 unsafe { alloc::dealloc(ptr, Layout::new::<u8>()) };