File tree 2 files changed +52
-0
lines changed
src/test/ui/closures/2229_closure_analysis
2 files changed +52
-0
lines changed Original file line number Diff line number Diff line change
1
+ // edition:2021
2
+
3
+ enum SingleVariant {
4
+ A
5
+ }
6
+
7
+ struct TestStruct {
8
+ x : i32 ,
9
+ y : i32 ,
10
+ z : i32 ,
11
+ }
12
+
13
+ fn main ( ) {
14
+ let sv = SingleVariant :: A ;
15
+ let condition = true ;
16
+ // sv should not be captured as it is a SingleVariant
17
+ let _a = || {
18
+ match sv {
19
+ SingleVariant :: A if condition => ( ) ,
20
+ _ => ( )
21
+ }
22
+ } ;
23
+ let mut mut_sv = sv;
24
+ _a ( ) ;
25
+
26
+ // ts should be captured
27
+ let ts = TestStruct { x : 1 , y : 1 , z : 1 } ;
28
+ let _b = || { match ts {
29
+ TestStruct { x : 1 , .. } => ( ) ,
30
+ _ => ( )
31
+ } } ;
32
+ let mut mut_ts = ts;
33
+ //~^ ERROR: cannot move out of `ts` because it is borrowed
34
+ _b ( ) ;
35
+ }
Original file line number Diff line number Diff line change
1
+ error[E0505]: cannot move out of `ts` because it is borrowed
2
+ --> $DIR/match-edge-cases.rs:32:22
3
+ |
4
+ LL | let _b = || { match ts {
5
+ | -- -- borrow occurs due to use in closure
6
+ | |
7
+ | borrow of `ts` occurs here
8
+ ...
9
+ LL | let mut mut_ts = ts;
10
+ | ^^ move out of `ts` occurs here
11
+ LL |
12
+ LL | _b();
13
+ | -- borrow later used here
14
+
15
+ error: aborting due to previous error
16
+
17
+ For more information about this error, try `rustc --explain E0505`.
You can’t perform that action at this time.
0 commit comments