Add test for the known case that doesn't work

This commit is contained in:
Nadrieril 2024-02-28 00:55:01 +01:00
parent 5d31e29b56
commit 97bfa106c7
2 changed files with 48 additions and 0 deletions

View 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);
}

View File

@ -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`.