about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2024-12-25 10:45:48 +0100
committerRalf Jung <post@ralfj.de>2024-12-25 10:45:48 +0100
commit00dfa3ba2d21577649e882ee65309fdbee08bf6d (patch)
tree4d12ca75ff31f2ba6276b9bff66aecfe07785d94 /src
parent6de3a2e3a9c45e12f63a8e861131a39b1eb0e021 (diff)
downloadrust-00dfa3ba2d21577649e882ee65309fdbee08bf6d.tar.gz
rust-00dfa3ba2d21577649e882ee65309fdbee08bf6d.zip
miri: add test for overlapping typed_swap
Diffstat (limited to 'src')
-rw-r--r--src/tools/miri/tests/fail/intrinsics/typed-swap-overlap.rs13
-rw-r--r--src/tools/miri/tests/fail/intrinsics/typed-swap-overlap.stderr15
2 files changed, 28 insertions, 0 deletions
diff --git a/src/tools/miri/tests/fail/intrinsics/typed-swap-overlap.rs b/src/tools/miri/tests/fail/intrinsics/typed-swap-overlap.rs
new file mode 100644
index 00000000000..7a9ad63ad7b
--- /dev/null
+++ b/src/tools/miri/tests/fail/intrinsics/typed-swap-overlap.rs
@@ -0,0 +1,13 @@
+#![feature(core_intrinsics)]
+#![feature(rustc_attrs)]
+
+use std::intrinsics::typed_swap;
+use std::ptr::addr_of_mut;
+
+fn main() {
+    let mut a = [0_u8; 100];
+    unsafe {
+        let a = addr_of_mut!(a);
+        typed_swap(a, a); //~ERROR: called on overlapping ranges
+    }
+}
diff --git a/src/tools/miri/tests/fail/intrinsics/typed-swap-overlap.stderr b/src/tools/miri/tests/fail/intrinsics/typed-swap-overlap.stderr
new file mode 100644
index 00000000000..5c9cbb78c1e
--- /dev/null
+++ b/src/tools/miri/tests/fail/intrinsics/typed-swap-overlap.stderr
@@ -0,0 +1,15 @@
+error: Undefined Behavior: `copy_nonoverlapping` called on overlapping ranges
+  --> tests/fail/intrinsics/typed-swap-overlap.rs:LL:CC
+   |
+LL |         typed_swap(a, a);
+   |         ^^^^^^^^^^^^^^^^ `copy_nonoverlapping` called on overlapping ranges
+   |
+   = help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior
+   = help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information
+   = note: BACKTRACE:
+   = note: inside `main` at tests/fail/intrinsics/typed-swap-overlap.rs:LL:CC
+
+note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
+
+error: aborting due to 1 previous error
+