File tree Expand file tree Collapse file tree 2 files changed +48
-0
lines changed
tests/ui/pattern/bindings-after-at Expand file tree Collapse file tree 2 files changed +48
-0
lines changed Original file line number Diff line number Diff line change 1+ //@ known-bug: unknown
2+ #![ allow( unused) ]
3+
4+ struct A ( u32 ) ;
5+
6+ pub fn main ( ) {
7+ // The or-pattern bindings are lowered after `x`, which triggers the error.
8+ let x @ ( A ( a) | A ( a) ) = A ( 10 ) ;
9+ // ERROR: use of moved value
10+ assert ! ( x. 0 == 10 ) ;
11+ assert ! ( a == 10 ) ;
12+
13+ // This works.
14+ let ( x @ A ( a) | x @ A ( a) ) = A ( 10 ) ;
15+ assert ! ( x. 0 == 10 ) ;
16+ assert ! ( a == 10 ) ;
17+ }
Original file line number Diff line number Diff line change 1+ error[E0382]: use of moved value
2+ --> $DIR/bind-by-copy-or-pat.rs:8:16
3+ |
4+ LL | let x @ (A(a) | A(a)) = A(10);
5+ | - ^ ----- move occurs because value has type `A`, which does not implement the `Copy` trait
6+ | | |
7+ | | value used here after move
8+ | value moved here
9+ |
10+ help: borrow this binding in the pattern to avoid moving the value
11+ |
12+ LL | let ref x @ (A(a) | A(a)) = A(10);
13+ | +++
14+
15+ error[E0382]: use of moved value
16+ --> $DIR/bind-by-copy-or-pat.rs:8:23
17+ |
18+ LL | let x @ (A(a) | A(a)) = A(10);
19+ | - ^ ----- move occurs because value has type `A`, which does not implement the `Copy` trait
20+ | | |
21+ | | value used here after move
22+ | value moved here
23+ |
24+ help: borrow this binding in the pattern to avoid moving the value
25+ |
26+ LL | let ref x @ (A(a) | A(a)) = A(10);
27+ | +++
28+
29+ error: aborting due to 2 previous errors
30+
31+ For more information about this error, try `rustc --explain E0382`.
You can’t perform that action at this time.
0 commit comments