//@compile-flags: -Zmiri-tree-borrows // This test is the TB counterpart to fail/stacked_borrows/fnentry_invalidation, // but the SB version passes TB without error. // An additional write access is inserted so that this test properly fails. // Test that spans displayed in diagnostics identify the function call, not the function // definition, as the location of invalidation due to FnEntry retag. Technically the FnEntry retag // occurs inside the function, but what the user wants to know is which call produced the // invalidation. fn main() { let mut x = 0i32; let z = &mut x as *mut i32; unsafe { *z = 1; } x.do_bad(); unsafe { *z = 2; //~ ERROR: /write access through .* is forbidden/ } } trait Bad { fn do_bad(&mut self) { // who knows } } impl Bad for i32 {}