diff options
| author | The Miri Cronjob Bot <miri@cron.bot> | 2025-01-29 05:25:22 +0000 |
|---|---|---|
| committer | The Miri Cronjob Bot <miri@cron.bot> | 2025-01-29 05:25:22 +0000 |
| commit | 667da1e3bd869ca323475c29d707b8b3855ff3d7 (patch) | |
| tree | 829257597b699289e20daa4015f9bad015ef0710 /src/tools/miri/tests | |
| parent | 548929f3d67b90330dc3f6ad20c97588d8ca8357 (diff) | |
| parent | 122fb29eb639aae852b9dcba0fd7aefc691be118 (diff) | |
| download | rust-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.rs | 35 |
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); +} |
