]> git.lizzy.rs Git - rust.git/blob - src/tools/miri/tests/pass/stacked-borrows/stack-printing.rs
Merge commit 'd822110d3b5625b9dc80ccc442e06fc3cc851d76' into clippyup
[rust.git] / src / tools / miri / tests / pass / stacked-borrows / stack-printing.rs
1 //@compile-flags: -Zmiri-permissive-provenance
2 #![feature(strict_provenance)]
3 use std::{
4     alloc::{self, Layout},
5     mem::ManuallyDrop,
6 };
7
8 extern "Rust" {
9     fn miri_get_alloc_id(ptr: *const u8) -> u64;
10     fn miri_print_borrow_stacks(alloc_id: u64);
11 }
12
13 fn get_alloc_id(ptr: *const u8) -> u64 {
14     unsafe { miri_get_alloc_id(ptr) }
15 }
16
17 fn print_borrow_stacks(alloc_id: u64) {
18     unsafe { miri_print_borrow_stacks(alloc_id) }
19 }
20
21 fn main() {
22     let ptr = unsafe { alloc::alloc(Layout::new::<u8>()) };
23     let alloc_id = get_alloc_id(ptr);
24     print_borrow_stacks(alloc_id);
25
26     assert!(!ptr.is_null());
27     print_borrow_stacks(alloc_id);
28
29     unsafe { *ptr = 42 };
30     print_borrow_stacks(alloc_id);
31
32     let _b = unsafe { ManuallyDrop::new(Box::from_raw(ptr)) };
33     print_borrow_stacks(alloc_id);
34
35     let _ptr = unsafe { &*ptr };
36     print_borrow_stacks(alloc_id);
37
38     // Create an unknown bottom, and print it
39     let ptr = ptr as usize as *mut u8;
40     unsafe {
41         *ptr = 5;
42     }
43     print_borrow_stacks(alloc_id);
44
45     unsafe { alloc::dealloc(ptr, Layout::new::<u8>()) };
46 }