2021-11-13 14:40:26 -06:00
|
|
|
// compile-flags: -Zmiri-tag-raw-pointers
|
2020-10-28 07:50:27 -05:00
|
|
|
//! This demonstrates a provenance problem that requires tracking of raw pointers to be detected.
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let mut l = 13;
|
|
|
|
let raw1 = &mut l as *mut _;
|
|
|
|
let raw2 = &mut l as *mut _; // invalidates raw1
|
|
|
|
// Without raw pointer tracking, Stacked Borrows cannot distinguish raw1 and raw2, and thus
|
|
|
|
// fails to realize that raw1 should not be used any more.
|
2022-02-05 18:44:56 -06:00
|
|
|
unsafe { *raw1 = 13; } //~ ERROR does not exist in the borrow stack
|
2020-10-28 07:50:27 -05:00
|
|
|
unsafe { *raw2 = 13; }
|
|
|
|
}
|