1
Fork 0

Auto merge of #3327 - RalfJung:tree-interior_mut_reborrow, r=RalfJung

tree borrows: add a test to sb_fails

This is something that happens in the wild (https://github.com/rust-lang/rust/issues/121626), so TB accepting this is good. Let's make sure we notice if this ever changes.
This commit is contained in:
bors 2024-02-26 09:56:19 +00:00
commit 908b33ebff

View file

@ -1,9 +1,10 @@
//@compile-flags: -Zmiri-tree-borrows
// These tests fail Stacked Borrows, but pass Tree Borrows.
// A modified version of each is also available that fails Tree Borrows.
// They all have in common that in SB a mutable reborrow is enough to produce
// The first four have in common that in SB a mutable reborrow is enough to produce
// write access errors, but in TB an actual write is needed.
// A modified version of each is also available that fails Tree Borrows.
mod fnentry_invalidation {
// Copied directly from fail/stacked_borrows/fnentry_invalidation.rs
@ -73,9 +74,22 @@ mod static_memory_modification {
}
}
// This one is about direct writes to local variables not being in conflict
// with interior mutable reborrows.
#[allow(unused_assignments)] // spurious warning
fn interior_mut_reborrow() {
use std::cell::UnsafeCell;
let mut c = UnsafeCell::new(42);
let ptr = c.get(); // first create interior mutable ptr
c = UnsafeCell::new(13); // then write to parent
assert_eq!(unsafe { ptr.read() }, 13); // then read through previous ptr
}
fn main() {
fnentry_invalidation::main();
pass_invalid_mut::main();
return_invalid_mut::main();
static_memory_modification::main();
interior_mut_reborrow();
}