about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2023-08-03 14:14:14 +0200
committerRalf Jung <post@ralfj.de>2023-08-03 14:15:14 +0200
commit3c39dc2cba7434e88e580274d20e5d4ae0f8ab1c (patch)
treef88bc3aedfeab59c68895de0174e430a3c4e8a5f
parent460e92b6a9108ae3a8d020022d8dac2c73ba1904 (diff)
downloadrust-3c39dc2cba7434e88e580274d20e5d4ae0f8ab1c.tar.gz
rust-3c39dc2cba7434e88e580274d20e5d4ae0f8ab1c.zip
add test checking that overlapping assignments work
-rw-r--r--src/tools/miri/tests/pass/ptr_raw.rs9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/tools/miri/tests/pass/ptr_raw.rs b/src/tools/miri/tests/pass/ptr_raw.rs
index 3ba0fba9a94..2f184358907 100644
--- a/src/tools/miri/tests/pass/ptr_raw.rs
+++ b/src/tools/miri/tests/pass/ptr_raw.rs
@@ -20,6 +20,15 @@ fn basic_raw() {
     assert_eq!(*x, 23);
 }
 
+fn assign_overlapping() {
+    // Test an assignment where LHS and RHS alias.
+    // In Mir, that's UB (see `fail/overlapping_assignment.rs`), but in surface Rust this is allowed.
+    let mut mem = [0u32; 4];
+    let ptr = &mut mem as *mut [u32; 4];
+    unsafe { *ptr = *ptr };
+}
+
 fn main() {
     basic_raw();
+    assign_overlapping();
 }