about summary refs log tree commit diff
path: root/src/tools/miri/tests/pass
diff options
context:
space:
mode:
authorBen Kimock <kimockb@gmail.com>2022-10-17 22:17:07 -0400
committerBen Kimock <kimockb@gmail.com>2022-10-19 10:45:35 -0400
commite7faf046c0aca0438d948461b8a39046281248ea (patch)
treefe6326133e82b4835bbfdda2a6cbe8ccd734592d /src/tools/miri/tests/pass
parent1c294d1de2ce2d884191451064bda46952cfb87b (diff)
downloadrust-e7faf046c0aca0438d948461b8a39046281248ea.tar.gz
rust-e7faf046c0aca0438d948461b8a39046281248ea.zip
Never start the Stack::retain loop at offset 0 so that the left element is always inbounds
Diffstat (limited to 'src/tools/miri/tests/pass')
-rw-r--r--src/tools/miri/tests/pass/stacked-borrows/unknown-bottom-gc.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/tools/miri/tests/pass/stacked-borrows/unknown-bottom-gc.rs b/src/tools/miri/tests/pass/stacked-borrows/unknown-bottom-gc.rs
new file mode 100644
index 00000000000..e62ee528686
--- /dev/null
+++ b/src/tools/miri/tests/pass/stacked-borrows/unknown-bottom-gc.rs
@@ -0,0 +1,21 @@
+//@compile-flags: -Zmiri-permissive-provenance
+#![feature(strict_provenance)]
+
+use std::ptr;
+
+fn main() {
+    let mut v = 1u8;
+    let ptr = &mut v as *mut u8;
+
+    // Expose the allocation and use the exposed pointer, creating an unknown bottom
+    unsafe {
+        let p: *mut u8 = ptr::from_exposed_addr::<u8>(ptr.expose_addr()) as *mut u8;
+        *p = 1;
+    }
+
+    // Pile on a lot of SharedReadOnly at the top of the stack
+    let r = &v;
+    for _ in 0..1024 {
+        let _x = &*r;
+    }
+}