summaryrefslogtreecommitdiffstats
path: root/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
commit698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch)
tree173a775858bd501c378080a10dca74132f05bc50 /src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.rs
parentInitial commit. (diff)
downloadrustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz
rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.rs')
-rw-r--r--src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.rs48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.rs b/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.rs
new file mode 100644
index 000000000..a6144c949
--- /dev/null
+++ b/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.rs
@@ -0,0 +1,48 @@
+fn main() {}
+
+struct U;
+
+fn slice() {
+ let mut arr = [U, U, U, U, U];
+ let hold_all = &arr;
+ let [ref _x0_hold, _x1, ref xs_hold @ ..] = arr; //~ ERROR cannot move out of `arr[..]`
+ _x1 = U; //~ ERROR cannot assign twice to immutable variable `_x1`
+ drop(hold_all);
+ let [_x0, ..] = arr; //~ ERROR cannot move out of `arr[..]`
+ drop(_x0_hold);
+ let [_, _, ref mut _x2, _x3, mut _x4] = arr;
+ //~^ ERROR cannot borrow `arr[..]` as mutable
+ //~| ERROR cannot move out of `arr[..]` because it is borrowed
+ //~| ERROR cannot move out of `arr[..]` because it is borrowed
+ drop(xs_hold);
+}
+
+fn tuple() {
+ let mut tup = (U, U, U, U);
+ let (ref _x0, _x1, ref _x2, ..) = tup;
+ _x1 = U; //~ ERROR cannot assign twice to immutable variable
+ let _x0_hold = &mut tup.0; //~ ERROR cannot borrow `tup.0` as mutable because it is also
+ let (ref mut _x0_hold, ..) = tup; //~ ERROR cannot borrow `tup.0` as mutable because it is also
+ *_x0 = U; //~ ERROR cannot assign to `*_x0`, which is behind a `&` reference
+ *_x2 = U; //~ ERROR cannot assign to `*_x2`, which is behind a `&` reference
+ drop(tup.1); //~ ERROR use of moved value: `tup.1`
+ let _x1_hold = &tup.1; //~ ERROR borrow of moved value: `tup.1`
+ let (.., ref mut _x3) = tup;
+ let _x3_hold = &tup.3; //~ ERROR cannot borrow `tup.3` as immutable
+ let _x3_hold = &mut tup.3; //~ ERROR cannot borrow `tup.3` as mutable more
+ let (.., ref mut _x4_hold) = tup; //~ ERROR cannot borrow `tup.3` as mutable more
+ let (.., ref _x4_hold) = tup; //~ ERROR cannot borrow `tup.3` as immutable
+ drop(_x3);
+}
+
+fn closure() {
+ let mut tup = (U, U, U);
+ let c1 = || {
+ let (ref _x0, _x1, _) = tup;
+ };
+ let c2 = || {
+ //~^ ERROR use of moved value
+ let (ref mut _x0, _, _x2) = tup;
+ };
+ drop(c1);
+}