diff --git a/tests/fail/stacked_borrows/exposed_only_ro.rs b/tests/fail/stacked_borrows/exposed_only_ro.rs new file mode 100644 index 000000000000..b3adb0b855f6 --- /dev/null +++ b/tests/fail/stacked_borrows/exposed_only_ro.rs @@ -0,0 +1,12 @@ +// compile-flags: -Zmiri-permissive-provenance +#![feature(strict_provenance)] + +// If we have only exposed read-only pointers, doing a write through a wildcard ptr should fail. + +fn main() { + let mut x = 0; + let _fool = &mut x as *mut i32; // this would have fooled the old untagged pointer logic + let addr = (&x as *const i32).expose_addr(); + let ptr = std::ptr::from_exposed_addr_mut::(addr); + unsafe { ptr.write(0) }; //~ ERROR: borrow stack +}