Add test for the known case that doesn't work
This commit is contained in:
parent
5d31e29b56
commit
97bfa106c7
17
tests/ui/pattern/bindings-after-at/bind-by-copy-or-pat.rs
Normal file
17
tests/ui/pattern/bindings-after-at/bind-by-copy-or-pat.rs
Normal file
@ -0,0 +1,17 @@
|
||||
//@ known-bug: unknown
|
||||
#![allow(unused)]
|
||||
|
||||
struct A(u32);
|
||||
|
||||
pub fn main() {
|
||||
// The or-pattern bindings are lowered after `x`, which triggers the error.
|
||||
let x @ (A(a) | A(a)) = A(10);
|
||||
// ERROR: use of moved value
|
||||
assert!(x.0 == 10);
|
||||
assert!(a == 10);
|
||||
|
||||
// This works.
|
||||
let (x @ A(a) | x @ A(a)) = A(10);
|
||||
assert!(x.0 == 10);
|
||||
assert!(a == 10);
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
error[E0382]: use of moved value
|
||||
--> $DIR/bind-by-copy-or-pat.rs:8:16
|
||||
|
|
||||
LL | let x @ (A(a) | A(a)) = A(10);
|
||||
| - ^ ----- move occurs because value has type `A`, which does not implement the `Copy` trait
|
||||
| | |
|
||||
| | value used here after move
|
||||
| value moved here
|
||||
|
|
||||
help: borrow this binding in the pattern to avoid moving the value
|
||||
|
|
||||
LL | let ref x @ (A(a) | A(a)) = A(10);
|
||||
| +++
|
||||
|
||||
error[E0382]: use of moved value
|
||||
--> $DIR/bind-by-copy-or-pat.rs:8:23
|
||||
|
|
||||
LL | let x @ (A(a) | A(a)) = A(10);
|
||||
| - ^ ----- move occurs because value has type `A`, which does not implement the `Copy` trait
|
||||
| | |
|
||||
| | value used here after move
|
||||
| value moved here
|
||||
|
|
||||
help: borrow this binding in the pattern to avoid moving the value
|
||||
|
|
||||
LL | let ref x @ (A(a) | A(a)) = A(10);
|
||||
| +++
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0382`.
|
Loading…
x
Reference in New Issue
Block a user