clarify bind-by-move-neither-can-livee..
This commit is contained in:
parent
6fa8f4a57b
commit
427b1c33e9
|
@ -1,3 +1,7 @@
|
|||
// This test is taken directly from #16053.
|
||||
// It checks that you cannot use an AND-pattern (`binding @ pat`)
|
||||
// where one side is by-ref and the other is by-move.
|
||||
|
||||
#![feature(bindings_after_at)]
|
||||
//~^ WARN the feature `bindings_after_at` is incomplete and may cause the compiler to crash
|
||||
|
||||
|
@ -9,4 +13,24 @@ fn main() {
|
|||
Some(ref _y @ _z) => { }, //~ ERROR cannot bind by-move and by-ref in the same pattern
|
||||
None => panic!()
|
||||
}
|
||||
|
||||
let x = Some(X { x: () });
|
||||
match x {
|
||||
Some(_z @ ref _y) => { }, //~ ERROR cannot bind by-move with sub-bindings
|
||||
//~^ ERROR borrow of moved value
|
||||
None => panic!()
|
||||
}
|
||||
|
||||
let mut x = Some(X { x: () });
|
||||
match x {
|
||||
Some(ref mut _y @ _z) => { }, //~ ERROR cannot bind by-move and by-ref in the same pattern
|
||||
None => panic!()
|
||||
}
|
||||
|
||||
let mut x = Some(X { x: () });
|
||||
match x {
|
||||
Some(_z @ ref mut _y) => { }, //~ ERROR cannot bind by-move with sub-bindings
|
||||
//~^ ERROR borrow of moved value
|
||||
None => panic!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
warning: the feature `bindings_after_at` is incomplete and may cause the compiler to crash
|
||||
--> $DIR/bind-by-move-neither-can-live-while-the-other-survives-1.rs:1:12
|
||||
--> $DIR/bind-by-move-neither-can-live-while-the-other-survives-1.rs:5:12
|
||||
|
|
||||
LL | #![feature(bindings_after_at)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
@ -7,7 +7,7 @@ LL | #![feature(bindings_after_at)]
|
|||
= note: `#[warn(incomplete_features)]` on by default
|
||||
|
||||
error[E0009]: cannot bind by-move and by-ref in the same pattern
|
||||
--> $DIR/bind-by-move-neither-can-live-while-the-other-survives-1.rs:9:23
|
||||
--> $DIR/bind-by-move-neither-can-live-while-the-other-survives-1.rs:13:23
|
||||
|
|
||||
LL | Some(ref _y @ _z) => { },
|
||||
| ---------^^
|
||||
|
@ -15,6 +15,50 @@ LL | Some(ref _y @ _z) => { },
|
|||
| | by-move pattern here
|
||||
| by-ref pattern here
|
||||
|
||||
error: aborting due to previous error
|
||||
error[E0007]: cannot bind by-move with sub-bindings
|
||||
--> $DIR/bind-by-move-neither-can-live-while-the-other-survives-1.rs:19:14
|
||||
|
|
||||
LL | Some(_z @ ref _y) => { },
|
||||
| ^^^^^^^^^^^ binds an already bound by-move value by moving it
|
||||
|
||||
For more information about this error, try `rustc --explain E0009`.
|
||||
error[E0009]: cannot bind by-move and by-ref in the same pattern
|
||||
--> $DIR/bind-by-move-neither-can-live-while-the-other-survives-1.rs:26:27
|
||||
|
|
||||
LL | Some(ref mut _y @ _z) => { },
|
||||
| -------------^^
|
||||
| | |
|
||||
| | by-move pattern here
|
||||
| by-ref pattern here
|
||||
|
||||
error[E0007]: cannot bind by-move with sub-bindings
|
||||
--> $DIR/bind-by-move-neither-can-live-while-the-other-survives-1.rs:32:14
|
||||
|
|
||||
LL | Some(_z @ ref mut _y) => { },
|
||||
| ^^^^^^^^^^^^^^^ binds an already bound by-move value by moving it
|
||||
|
||||
error[E0382]: borrow of moved value
|
||||
--> $DIR/bind-by-move-neither-can-live-while-the-other-survives-1.rs:19:19
|
||||
|
|
||||
LL | Some(_z @ ref _y) => { },
|
||||
| -----^^^^^^
|
||||
| | |
|
||||
| | value borrowed here after move
|
||||
| value moved here
|
||||
|
|
||||
= note: move occurs because value has type `X`, which does not implement the `Copy` trait
|
||||
|
||||
error[E0382]: borrow of moved value
|
||||
--> $DIR/bind-by-move-neither-can-live-while-the-other-survives-1.rs:32:19
|
||||
|
|
||||
LL | Some(_z @ ref mut _y) => { },
|
||||
| -----^^^^^^^^^^
|
||||
| | |
|
||||
| | value borrowed here after move
|
||||
| value moved here
|
||||
|
|
||||
= note: move occurs because value has type `X`, which does not implement the `Copy` trait
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0007, E0009, E0382.
|
||||
For more information about an error, try `rustc --explain E0007`.
|
||||
|
|
Loading…
Reference in New Issue