10
10
11
11
struct A { a : int , b : Box < int > }
12
12
13
- fn deref_after_move ( ) {
13
+ fn borrow < T > ( _: & T ) { }
14
+
15
+ fn use_after_move ( ) {
14
16
let x = A { a : 1 , b : box 2 } ;
15
17
drop ( x. b ) ;
16
18
drop ( * x. b ) ; //~ ERROR use of partially moved value: `*x.b`
17
19
}
18
20
19
- fn deref_after_fu_move ( ) {
21
+ fn use_after_fu_move ( ) {
20
22
let x = A { a : 1 , b : box 2 } ;
21
23
let y = A { a : 3 , .. x } ;
22
24
drop ( * x. b ) ; //~ ERROR use of partially moved value: `*x.b`
@@ -25,37 +27,35 @@ fn deref_after_fu_move() {
25
27
fn borrow_after_move ( ) {
26
28
let x = A { a : 1 , b : box 2 } ;
27
29
drop ( x. b ) ;
28
- let p = & x. b ; //~ ERROR use of moved value: `x.b`
29
- drop ( * * p) ;
30
+ borrow ( & x. b ) ; //~ ERROR use of moved value: `x.b`
30
31
}
31
32
32
33
fn borrow_after_fu_move ( ) {
33
34
let x = A { a : 1 , b : box 2 } ;
34
35
let _y = A { a : 3 , .. x } ;
35
- let p = & x. b ; //~ ERROR use of moved value: `x.b`
36
- drop ( * * p) ;
36
+ borrow ( & x. b ) ; //~ ERROR use of moved value: `x.b`
37
37
}
38
38
39
39
fn move_after_borrow ( ) {
40
40
let x = A { a : 1 , b : box 2 } ;
41
- let p = & x. b ;
41
+ let y = & x. b ;
42
42
drop ( x. b ) ; //~ ERROR cannot move out of `x.b` because it is borrowed
43
- drop ( * * p ) ;
43
+ borrow ( & * y ) ;
44
44
}
45
45
46
46
fn fu_move_after_borrow ( ) {
47
47
let x = A { a : 1 , b : box 2 } ;
48
- let p = & x. b ;
49
- let _y = A { a : 3 , .. x } ; //~ ERROR cannot move out of `x.b` because it is borrowed
50
- drop ( * * p ) ;
48
+ let y = & x. b ;
49
+ let _z = A { a : 3 , .. x } ; //~ ERROR cannot move out of `x.b` because it is borrowed
50
+ borrow ( & * y ) ;
51
51
}
52
52
53
53
fn mut_borrow_after_mut_borrow ( ) {
54
54
let mut x = A { a : 1 , b : box 2 } ;
55
- let p = & mut x. a ;
56
- let q = & mut x. a ; //~ ERROR cannot borrow `x.a` as mutable more than once at a time
57
- drop ( * p ) ;
58
- drop ( * q ) ;
55
+ let y = & mut x. a ;
56
+ let z = & mut x. a ; //~ ERROR cannot borrow `x.a` as mutable more than once at a time
57
+ drop ( * y ) ;
58
+ drop ( * z ) ;
59
59
}
60
60
61
61
fn move_after_move ( ) {
@@ -84,21 +84,7 @@ fn fu_move_after_fu_move() {
84
84
85
85
// The following functions aren't yet accepted, but they should be.
86
86
87
- fn move_after_borrow_correct ( ) {
88
- let x = A { a : 1 , b : box 2 } ;
89
- let p = & x. a ;
90
- drop ( x. b ) ; //~ ERROR cannot move out of `x.b` because it is borrowed
91
- drop ( * p) ;
92
- }
93
-
94
- fn fu_move_after_borrow_correct ( ) {
95
- let x = A { a : 1 , b : box 2 } ;
96
- let p = & x. a ;
97
- let _y = A { a : 3 , .. x } ; //~ ERROR cannot move out of `x.b` because it is borrowed
98
- drop ( * p) ;
99
- }
100
-
101
- fn copy_after_field_assign_after_uninit ( ) {
87
+ fn use_after_field_assign_after_uninit ( ) {
102
88
let mut x: A ;
103
89
x. a = 1 ;
104
90
drop ( x. a ) ; //~ ERROR use of possibly uninitialized variable: `x.a`
@@ -107,8 +93,7 @@ fn copy_after_field_assign_after_uninit() {
107
93
fn borrow_after_field_assign_after_uninit ( ) {
108
94
let mut x: A ;
109
95
x. a = 1 ;
110
- let p = & x. a ; //~ ERROR use of possibly uninitialized variable: `x.a`
111
- drop ( * p) ;
96
+ borrow ( & x. a ) ; //~ ERROR use of possibly uninitialized variable: `x.a`
112
97
}
113
98
114
99
fn move_after_field_assign_after_uninit ( ) {
@@ -118,8 +103,8 @@ fn move_after_field_assign_after_uninit() {
118
103
}
119
104
120
105
fn main ( ) {
121
- deref_after_move ( ) ;
122
- deref_after_fu_move ( ) ;
106
+ use_after_move ( ) ;
107
+ use_after_fu_move ( ) ;
123
108
124
109
borrow_after_move ( ) ;
125
110
borrow_after_fu_move ( ) ;
@@ -132,10 +117,7 @@ fn main() {
132
117
fu_move_after_move ( ) ;
133
118
fu_move_after_fu_move ( ) ;
134
119
135
- move_after_borrow_correct ( ) ;
136
- fu_move_after_borrow_correct ( ) ;
137
-
138
- copy_after_field_assign_after_uninit ( ) ;
120
+ use_after_field_assign_after_uninit ( ) ;
139
121
borrow_after_field_assign_after_uninit ( ) ;
140
122
move_after_field_assign_after_uninit ( ) ;
141
123
}
0 commit comments