// This makes a ref that was passed to us via &mut alias with things it should not alias with | |
fn retarget(x: &mut &u32, target: &mut u32) { | |
unsafe { *x = &mut *(target as *mut _); } | |
} | |
fn main() { | |
let target = &mut 42; | |
let mut target_alias = &42; // initial dummy value | |
retarget(&mut target_alias, target); | |
// now `target_alias` points to the same thing as `target` | |
*target = 13; | |
let _val = *target_alias; //~ ERROR does not exist on the borrow stack | |
} |