| // 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; |
| x.do_bad(); |
| unsafe { |
| let _oof = *z; //~ ERROR: /read access .* tag does not exist in the borrow stack/ |
| } |
| } |
| |
| trait Bad { |
| fn do_bad(&mut self) { |
| // who knows |
| } |
| } |
| |
| impl Bad for i32 {} |