about summary refs log tree commit diff
path: root/src/tools/miri/tests
diff options
context:
space:
mode:
authorThe Miri Cronjob Bot <miri@cron.bot>2025-01-29 05:25:22 +0000
committerThe Miri Cronjob Bot <miri@cron.bot>2025-01-29 05:25:22 +0000
commit667da1e3bd869ca323475c29d707b8b3855ff3d7 (patch)
tree829257597b699289e20daa4015f9bad015ef0710 /src/tools/miri/tests
parent548929f3d67b90330dc3f6ad20c97588d8ca8357 (diff)
parent122fb29eb639aae852b9dcba0fd7aefc691be118 (diff)
downloadrust-667da1e3bd869ca323475c29d707b8b3855ff3d7.tar.gz
rust-667da1e3bd869ca323475c29d707b8b3855ff3d7.zip
Merge from rustc
Diffstat (limited to 'src/tools/miri/tests')
-rw-r--r--src/tools/miri/tests/pass/disjoint-array-accesses.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/tools/miri/tests/pass/disjoint-array-accesses.rs b/src/tools/miri/tests/pass/disjoint-array-accesses.rs
new file mode 100644
index 00000000000..50d0ea52ad4
--- /dev/null
+++ b/src/tools/miri/tests/pass/disjoint-array-accesses.rs
@@ -0,0 +1,35 @@
+// This is a regression test for issue #135671 where a MIR refactor about arrays and their lengths
+// unexpectedly caused borrowck errors for disjoint borrows of array elements, for which we had no
+// tests. This is a collection of a few code samples from that issue.
+
+//@revisions: stack tree
+//@[tree]compile-flags: -Zmiri-tree-borrows
+
+struct Test {
+    a: i32,
+    b: i32,
+}
+
+fn one() {
+    let inputs: &mut [_] = &mut [Test { a: 0, b: 0 }];
+    let a = &mut inputs[0].a;
+    let b = &mut inputs[0].b;
+
+    *a = 0;
+    *b = 1;
+}
+
+fn two() {
+    let slice = &mut [(0, 0)][..];
+    std::mem::swap(&mut slice[0].0, &mut slice[0].1);
+}
+
+fn three(a: &mut [(i32, i32)], i: usize, j: usize) -> (&mut i32, &mut i32) {
+    (&mut a[i].0, &mut a[j].1)
+}
+
+fn main() {
+    one();
+    two();
+    three(&mut [(1, 2), (3, 4)], 0, 1);
+}