1
1
//@revisions: stack tree
2
2
//@[tree]compile-flags: -Zmiri-tree-borrows
3
- #![ feature( coroutines, coroutine_trait, never_type) ]
3
+ #![ feature( coroutines, coroutine_trait, never_type, stmt_expr_attributes ) ]
4
4
5
5
use std:: fmt:: Debug ;
6
6
use std:: mem:: ManuallyDrop ;
@@ -43,9 +43,9 @@ fn basic() {
43
43
panic ! ( )
44
44
}
45
45
46
- finish ( 1 , false , || yield 1 ) ;
46
+ finish ( 1 , false , # [ coroutine ] || yield 1 ) ;
47
47
48
- finish ( 3 , false , || {
48
+ finish ( 3 , false , # [ coroutine ] || {
49
49
let mut x = 0 ;
50
50
yield 1 ;
51
51
x += 1 ;
@@ -55,27 +55,27 @@ fn basic() {
55
55
assert_eq ! ( x, 2 ) ;
56
56
} ) ;
57
57
58
- finish ( 7 * 8 / 2 , false , || {
58
+ finish ( 7 * 8 / 2 , false , # [ coroutine ] || {
59
59
for i in 0 ..8 {
60
60
yield i;
61
61
}
62
62
} ) ;
63
63
64
- finish ( 1 , false , || {
64
+ finish ( 1 , false , # [ coroutine ] || {
65
65
if true {
66
66
yield 1 ;
67
67
} else {
68
68
}
69
69
} ) ;
70
70
71
- finish ( 1 , false , || {
71
+ finish ( 1 , false , # [ coroutine ] || {
72
72
if false {
73
73
} else {
74
74
yield 1 ;
75
75
}
76
76
} ) ;
77
77
78
- finish ( 2 , false , || {
78
+ finish ( 2 , false , # [ coroutine ] || {
79
79
if {
80
80
yield 1 ;
81
81
false
@@ -88,7 +88,7 @@ fn basic() {
88
88
89
89
// also test self-referential coroutines
90
90
assert_eq ! (
91
- finish( 5 , true , static || {
91
+ finish( 5 , true , # [ coroutine ] static || {
92
92
let mut x = 5 ;
93
93
let y = & mut x;
94
94
* y = 5 ;
@@ -99,7 +99,7 @@ fn basic() {
99
99
10
100
100
) ;
101
101
assert_eq ! (
102
- finish( 5 , true , || {
102
+ finish( 5 , true , # [ coroutine ] || {
103
103
let mut x = Box :: new( 5 ) ;
104
104
let y = & mut * x;
105
105
* y = 5 ;
@@ -111,7 +111,7 @@ fn basic() {
111
111
) ;
112
112
113
113
let b = true ;
114
- finish ( 1 , false , || {
114
+ finish ( 1 , false , # [ coroutine ] || {
115
115
yield 1 ;
116
116
if b {
117
117
return ;
@@ -123,7 +123,7 @@ fn basic() {
123
123
drop ( x) ;
124
124
} ) ;
125
125
126
- finish ( 3 , false , || {
126
+ finish ( 3 , false , # [ coroutine ] || {
127
127
yield 1 ;
128
128
#[ allow( unreachable_code) ]
129
129
let _x: ( String , !) = ( String :: new ( ) , {
@@ -172,7 +172,7 @@ fn smoke_resume_arg() {
172
172
}
173
173
174
174
drain (
175
- & mut |mut b| {
175
+ & mut # [ coroutine ] |mut b| {
176
176
while b != 0 {
177
177
b = yield ( b + 1 ) ;
178
178
}
@@ -181,21 +181,21 @@ fn smoke_resume_arg() {
181
181
vec ! [ ( 1 , Yielded ( 2 ) ) , ( -45 , Yielded ( -44 ) ) , ( 500 , Yielded ( 501 ) ) , ( 0 , Complete ( -1 ) ) ] ,
182
182
) ;
183
183
184
- expect_drops ( 2 , || drain ( & mut |a| yield a, vec ! [ ( DropMe , Yielded ( DropMe ) ) ] ) ) ;
184
+ expect_drops ( 2 , || drain ( & mut # [ coroutine ] |a| yield a, vec ! [ ( DropMe , Yielded ( DropMe ) ) ] ) ) ;
185
185
186
186
expect_drops ( 6 , || {
187
187
drain (
188
- & mut |a| yield yield a,
188
+ & mut # [ coroutine ] |a| yield yield a,
189
189
vec ! [ ( DropMe , Yielded ( DropMe ) ) , ( DropMe , Yielded ( DropMe ) ) , ( DropMe , Complete ( DropMe ) ) ] ,
190
190
)
191
191
} ) ;
192
192
193
193
#[ allow( unreachable_code) ]
194
- expect_drops ( 2 , || drain ( & mut |a| yield return a, vec ! [ ( DropMe , Complete ( DropMe ) ) ] ) ) ;
194
+ expect_drops ( 2 , || drain ( & mut # [ coroutine ] |a| yield return a, vec ! [ ( DropMe , Complete ( DropMe ) ) ] ) ) ;
195
195
196
196
expect_drops ( 2 , || {
197
197
drain (
198
- & mut |a : DropMe | {
198
+ & mut # [ coroutine ] |a : DropMe | {
199
199
if false { yield ( ) } else { a }
200
200
} ,
201
201
vec ! [ ( DropMe , Complete ( DropMe ) ) ] ,
@@ -205,7 +205,7 @@ fn smoke_resume_arg() {
205
205
expect_drops ( 4 , || {
206
206
drain (
207
207
#[ allow( unused_assignments, unused_variables) ]
208
- & mut |mut a : DropMe | {
208
+ & mut # [ coroutine ] |mut a : DropMe | {
209
209
a = yield ;
210
210
a = yield ;
211
211
a = yield ;
@@ -228,7 +228,7 @@ fn uninit_fields() {
228
228
}
229
229
230
230
fn run < T > ( x : bool , y : bool ) {
231
- let mut c = || {
231
+ let mut c = # [ coroutine ] || {
232
232
if x {
233
233
let _a: T ;
234
234
if y {
0 commit comments