rust/tests/fail/stacked_borrows/box_exclusive_violation1.rs

34 lines
658 B
Rust
Raw Normal View History

2022-07-13 17:59:33 -05:00
fn demo_box_advanced_unique(mut our: Box<i32>) -> i32 {
unknown_code_1(&*our);
// This "re-asserts" uniqueness of the reference: After writing, we know
// our tag is at the top of the stack.
*our = 5;
unknown_code_2();
// We know this will return 5
*our
}
// Now comes the evil context
use std::ptr;
static mut LEAK: *mut i32 = ptr::null_mut();
fn unknown_code_1(x: &i32) {
unsafe {
LEAK = x as *const _ as *mut _;
}
}
fn unknown_code_2() {
unsafe {
2022-07-13 17:59:33 -05:00
*LEAK = 7; //~ ERROR: /write access .* tag does not exist in the borrow stack/
}
}
fn main() {
2022-07-13 17:59:33 -05:00
demo_box_advanced_unique(Box::new(0));
}