demo_mut_advanced_unique(our: &mut i32) -> i321 fn demo_mut_advanced_unique(our: &mut 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 
unknown_code_1(x: &i32)19 fn unknown_code_1(x: &i32) { unsafe {
20     LEAK = x as *const _ as *mut _;
21 } }
22 
unknown_code_2()23 fn unknown_code_2() { unsafe {
24     *LEAK = 7; //~ ERROR borrow stack
25 } }
26 
main()27 fn main() {
28     demo_mut_advanced_unique(&mut 0);
29 }
30