]> git.lizzy.rs Git - rust.git/blob - src/tools/miri/tests/fail/stacked_borrows/box_exclusive_violation1.rs
Reintroduce the span printing in miri (plus point to spans where possible)
[rust.git] / src / tools / miri / tests / fail / stacked_borrows / box_exclusive_violation1.rs
1 fn demo_box_advanced_unique(mut our: Box<i32>) -> i32 {
2     unknown_code_1(&*our);
3
4     // This "re-asserts" uniqueness of the reference: After writing, we know
5     // our tag is at the top of the stack.
6     *our = 5;
7
8     unknown_code_2();
9
10     // We know this will return 5
11     *our
12 }
13
14 // Now comes the evil context
15 use std::ptr;
16
17 static mut LEAK: *mut i32 = ptr::null_mut();
18
19 fn unknown_code_1(x: &i32) {
20     unsafe {
21         LEAK = x as *const _ as *mut _;
22     }
23 }
24
25 fn unknown_code_2() {
26     unsafe {
27         *LEAK = 7; //~ ERROR: /write access .* tag does not exist in the borrow stack/
28     }
29 }
30
31 fn main() {
32     demo_box_advanced_unique(Box::new(0));
33 }