1 // MIR for `b::{closure#0}` 0 generator_resume
2 /* generator_layout = GeneratorLayout {
5 ty: impl std::future::Future<Output = ()>,
6 source_info: SourceInfo {
7 span: $DIR/async_await.rs:15:8: 15:14 (#9),
10 ignore_for_traits: false,
12 _1: GeneratorSavedTy {
13 ty: impl std::future::Future<Output = ()>,
14 source_info: SourceInfo {
15 span: $DIR/async_await.rs:16:8: 16:14 (#12),
18 ignore_for_traits: false,
28 storage_conflicts: BitMatrix(2x2) {
34 fn b::{closure#0}(_1: Pin<&mut [async fn body@$DIR/async_await.rs:14:18: 17:2]>, _2: &mut Context<'_>) -> Poll<()> {
35 debug _task_context => _38; // in scope 0 at $DIR/async_await.rs:+0:18: +3:2
36 let mut _0: std::task::Poll<()>; // return place in scope 0 at $DIR/async_await.rs:+0:18: +3:2
37 let _3: (); // in scope 0 at $DIR/async_await.rs:+1:5: +1:14
38 let mut _4: impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+1:8: +1:14
39 let mut _5: impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+1:5: +1:8
40 let mut _6: impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+1:8: +1:14
41 let mut _7: (); // in scope 0 at $DIR/async_await.rs:+0:18: +3:2
42 let _8: (); // in scope 0 at $DIR/async_await.rs:+1:8: +1:14
43 let mut _9: std::task::Poll<()>; // in scope 0 at $DIR/async_await.rs:+1:8: +1:14
44 let mut _10: std::pin::Pin<&mut impl std::future::Future<Output = ()>>; // in scope 0 at $DIR/async_await.rs:+1:8: +1:14
45 let mut _11: &mut impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+1:8: +1:14
46 let mut _12: &mut impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+1:8: +1:14
47 let mut _13: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+1:5: +1:14
48 let mut _14: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+1:5: +1:14
49 let mut _15: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+1:8: +1:14
50 let mut _16: isize; // in scope 0 at $DIR/async_await.rs:+1:8: +1:14
51 let mut _18: !; // in scope 0 at $DIR/async_await.rs:+1:5: +1:14
52 let mut _19: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+1:8: +1:14
53 let mut _20: (); // in scope 0 at $DIR/async_await.rs:+1:8: +1:14
54 let mut _21: impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+2:8: +2:14
55 let mut _22: impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+2:5: +2:8
56 let mut _23: impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+2:8: +2:14
57 let _24: (); // in scope 0 at $DIR/async_await.rs:+2:8: +2:14
58 let mut _25: std::task::Poll<()>; // in scope 0 at $DIR/async_await.rs:+2:8: +2:14
59 let mut _26: std::pin::Pin<&mut impl std::future::Future<Output = ()>>; // in scope 0 at $DIR/async_await.rs:+2:8: +2:14
60 let mut _27: &mut impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+2:8: +2:14
61 let mut _28: &mut impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+2:8: +2:14
62 let mut _29: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+2:5: +2:14
63 let mut _30: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+2:5: +2:14
64 let mut _31: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+2:8: +2:14
65 let mut _32: isize; // in scope 0 at $DIR/async_await.rs:+2:8: +2:14
66 let mut _34: !; // in scope 0 at $DIR/async_await.rs:+2:5: +2:14
67 let mut _35: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+2:8: +2:14
68 let mut _36: (); // in scope 0 at $DIR/async_await.rs:+2:8: +2:14
69 let mut _37: (); // in scope 0 at $DIR/async_await.rs:+0:18: +3:2
70 let mut _38: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+0:18: +3:2
71 let mut _39: u32; // in scope 0 at $DIR/async_await.rs:+0:18: +3:2
73 debug __awaitee => (((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])) as variant#3).0: impl std::future::Future<Output = ()>); // in scope 1 at $DIR/async_await.rs:+1:8: +1:14
74 let _17: (); // in scope 1 at $DIR/async_await.rs:+1:5: +1:14
78 debug result => _17; // in scope 3 at $DIR/async_await.rs:+1:5: +1:14
82 debug __awaitee => (((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])) as variant#4).0: impl std::future::Future<Output = ()>); // in scope 4 at $DIR/async_await.rs:+2:8: +2:14
83 let _33: (); // in scope 4 at $DIR/async_await.rs:+2:5: +2:14
87 debug result => _33; // in scope 6 at $DIR/async_await.rs:+2:5: +2:14
92 _39 = discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2]))); // scope 0 at $DIR/async_await.rs:+0:18: +3:2
93 switchInt(move _39) -> [0: bb1, 1: bb29, 3: bb27, 4: bb28, otherwise: bb30]; // scope 0 at $DIR/async_await.rs:+0:18: +3:2
97 _38 = move _2; // scope 0 at $DIR/async_await.rs:+0:18: +3:2
98 StorageLive(_3); // scope 0 at $DIR/async_await.rs:+1:5: +1:14
99 StorageLive(_4); // scope 0 at $DIR/async_await.rs:+1:8: +1:14
100 StorageLive(_5); // scope 0 at $DIR/async_await.rs:+1:5: +1:8
101 _5 = a() -> bb2; // scope 0 at $DIR/async_await.rs:+1:5: +1:8
103 // + span: $DIR/async_await.rs:15:5: 15:6
104 // + literal: Const { ty: fn() -> impl Future<Output = ()> {a}, val: Value(<ZST>) }
108 _4 = <impl Future<Output = ()> as IntoFuture>::into_future(move _5) -> bb3; // scope 0 at $DIR/async_await.rs:+1:8: +1:14
110 // + span: $DIR/async_await.rs:15:8: 15:14
111 // + literal: Const { ty: fn(impl Future<Output = ()>) -> <impl Future<Output = ()> as IntoFuture>::IntoFuture {<impl Future<Output = ()> as IntoFuture>::into_future}, val: Value(<ZST>) }
115 StorageDead(_5); // scope 0 at $DIR/async_await.rs:+1:13: +1:14
116 nop; // scope 0 at $DIR/async_await.rs:+1:8: +1:14
117 (((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])) as variant#3).0: impl std::future::Future<Output = ()>) = move _4; // scope 0 at $DIR/async_await.rs:+1:8: +1:14
118 goto -> bb4; // scope 1 at $DIR/async_await.rs:+1:8: +1:14
122 StorageLive(_8); // scope 1 at $DIR/async_await.rs:+1:8: +1:14
123 StorageLive(_9); // scope 1 at $DIR/async_await.rs:+1:8: +1:14
124 StorageLive(_10); // scope 2 at $DIR/async_await.rs:+1:8: +1:14
125 StorageLive(_11); // scope 2 at $DIR/async_await.rs:+1:8: +1:14
126 StorageLive(_12); // scope 2 at $DIR/async_await.rs:+1:8: +1:14
127 _12 = &mut (((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])) as variant#3).0: impl std::future::Future<Output = ()>); // scope 2 at $DIR/async_await.rs:+1:8: +1:14
128 _11 = &mut (*_12); // scope 2 at $DIR/async_await.rs:+1:8: +1:14
129 _10 = Pin::<&mut impl Future<Output = ()>>::new_unchecked(move _11) -> bb5; // scope 2 at $DIR/async_await.rs:+1:8: +1:14
131 // + span: $DIR/async_await.rs:15:8: 15:14
132 // + literal: Const { ty: unsafe fn(&mut impl Future<Output = ()>) -> Pin<&mut impl Future<Output = ()>> {Pin::<&mut impl Future<Output = ()>>::new_unchecked}, val: Value(<ZST>) }
136 StorageDead(_11); // scope 2 at $DIR/async_await.rs:+1:13: +1:14
137 StorageLive(_13); // scope 2 at $DIR/async_await.rs:+1:5: +1:14
138 StorageLive(_14); // scope 2 at $DIR/async_await.rs:+1:5: +1:14
139 StorageLive(_15); // scope 2 at $DIR/async_await.rs:+1:8: +1:14
140 _15 = _38; // scope 2 at $DIR/async_await.rs:+1:8: +1:14
141 _14 = move _15; // scope 2 at $DIR/async_await.rs:+1:5: +1:14
142 goto -> bb6; // scope 2 at $DIR/async_await.rs:+1:5: +1:14
146 _13 = &mut (*_14); // scope 2 at $DIR/async_await.rs:+1:5: +1:14
147 StorageDead(_15); // scope 2 at $DIR/async_await.rs:+1:13: +1:14
148 _9 = <impl Future<Output = ()> as Future>::poll(move _10, move _13) -> bb7; // scope 2 at $DIR/async_await.rs:+1:8: +1:14
150 // + span: $DIR/async_await.rs:15:8: 15:14
151 // + literal: Const { ty: for<'a, 'b, 'c> fn(Pin<&'a mut impl Future<Output = ()>>, &'b mut Context<'c>) -> Poll<<impl Future<Output = ()> as Future>::Output> {<impl Future<Output = ()> as Future>::poll}, val: Value(<ZST>) }
155 StorageDead(_13); // scope 2 at $DIR/async_await.rs:+1:13: +1:14
156 StorageDead(_10); // scope 2 at $DIR/async_await.rs:+1:13: +1:14
157 _16 = discriminant(_9); // scope 1 at $DIR/async_await.rs:+1:8: +1:14
158 switchInt(move _16) -> [0: bb10, 1: bb8, otherwise: bb9]; // scope 1 at $DIR/async_await.rs:+1:8: +1:14
162 _8 = const (); // scope 1 at $DIR/async_await.rs:+1:8: +1:14
163 StorageDead(_14); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
164 StorageDead(_12); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
165 StorageDead(_9); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
166 StorageDead(_8); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
167 StorageLive(_19); // scope 1 at $DIR/async_await.rs:+1:8: +1:14
168 StorageLive(_20); // scope 1 at $DIR/async_await.rs:+1:8: +1:14
169 _20 = (); // scope 1 at $DIR/async_await.rs:+1:8: +1:14
170 Deinit(_0); // scope 1 at $DIR/async_await.rs:+1:8: +1:14
171 discriminant(_0) = 1; // scope 1 at $DIR/async_await.rs:+1:8: +1:14
172 discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2]))) = 3; // scope 1 at $DIR/async_await.rs:+1:8: +1:14
173 return; // scope 1 at $DIR/async_await.rs:+1:8: +1:14
177 unreachable; // scope 1 at $DIR/async_await.rs:+1:8: +1:14
181 StorageLive(_17); // scope 1 at $DIR/async_await.rs:+1:5: +1:14
182 _17 = ((_9 as Ready).0: ()); // scope 1 at $DIR/async_await.rs:+1:5: +1:14
183 _3 = _17; // scope 3 at $DIR/async_await.rs:+1:5: +1:14
184 StorageDead(_17); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
185 StorageDead(_14); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
186 StorageDead(_12); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
187 StorageDead(_9); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
188 StorageDead(_8); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
189 goto -> bb12; // scope 0 at $DIR/async_await.rs:+1:13: +1:14
193 StorageDead(_20); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
194 _38 = move _19; // scope 1 at $DIR/async_await.rs:+1:8: +1:14
195 StorageDead(_19); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
196 _7 = const (); // scope 1 at $DIR/async_await.rs:+1:8: +1:14
197 goto -> bb4; // scope 1 at $DIR/async_await.rs:+1:8: +1:14
201 nop; // scope 0 at $DIR/async_await.rs:+1:13: +1:14
202 goto -> bb13; // scope 0 at $DIR/async_await.rs:+1:14: +1:15
206 StorageDead(_4); // scope 0 at $DIR/async_await.rs:+1:14: +1:15
207 StorageDead(_3); // scope 0 at $DIR/async_await.rs:+1:14: +1:15
208 StorageLive(_21); // scope 0 at $DIR/async_await.rs:+2:8: +2:14
209 StorageLive(_22); // scope 0 at $DIR/async_await.rs:+2:5: +2:8
210 _22 = a() -> bb14; // scope 0 at $DIR/async_await.rs:+2:5: +2:8
212 // + span: $DIR/async_await.rs:16:5: 16:6
213 // + literal: Const { ty: fn() -> impl Future<Output = ()> {a}, val: Value(<ZST>) }
217 _21 = <impl Future<Output = ()> as IntoFuture>::into_future(move _22) -> bb15; // scope 0 at $DIR/async_await.rs:+2:8: +2:14
219 // + span: $DIR/async_await.rs:16:8: 16:14
220 // + literal: Const { ty: fn(impl Future<Output = ()>) -> <impl Future<Output = ()> as IntoFuture>::IntoFuture {<impl Future<Output = ()> as IntoFuture>::into_future}, val: Value(<ZST>) }
224 StorageDead(_22); // scope 0 at $DIR/async_await.rs:+2:13: +2:14
225 nop; // scope 0 at $DIR/async_await.rs:+2:8: +2:14
226 (((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])) as variant#4).0: impl std::future::Future<Output = ()>) = move _21; // scope 0 at $DIR/async_await.rs:+2:8: +2:14
227 goto -> bb16; // scope 4 at $DIR/async_await.rs:+2:8: +2:14
231 StorageLive(_24); // scope 4 at $DIR/async_await.rs:+2:8: +2:14
232 StorageLive(_25); // scope 4 at $DIR/async_await.rs:+2:8: +2:14
233 StorageLive(_26); // scope 5 at $DIR/async_await.rs:+2:8: +2:14
234 StorageLive(_27); // scope 5 at $DIR/async_await.rs:+2:8: +2:14
235 StorageLive(_28); // scope 5 at $DIR/async_await.rs:+2:8: +2:14
236 _28 = &mut (((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])) as variant#4).0: impl std::future::Future<Output = ()>); // scope 5 at $DIR/async_await.rs:+2:8: +2:14
237 _27 = &mut (*_28); // scope 5 at $DIR/async_await.rs:+2:8: +2:14
238 _26 = Pin::<&mut impl Future<Output = ()>>::new_unchecked(move _27) -> bb17; // scope 5 at $DIR/async_await.rs:+2:8: +2:14
240 // + span: $DIR/async_await.rs:16:8: 16:14
241 // + literal: Const { ty: unsafe fn(&mut impl Future<Output = ()>) -> Pin<&mut impl Future<Output = ()>> {Pin::<&mut impl Future<Output = ()>>::new_unchecked}, val: Value(<ZST>) }
245 StorageDead(_27); // scope 5 at $DIR/async_await.rs:+2:13: +2:14
246 StorageLive(_29); // scope 5 at $DIR/async_await.rs:+2:5: +2:14
247 StorageLive(_30); // scope 5 at $DIR/async_await.rs:+2:5: +2:14
248 StorageLive(_31); // scope 5 at $DIR/async_await.rs:+2:8: +2:14
249 _31 = _38; // scope 5 at $DIR/async_await.rs:+2:8: +2:14
250 _30 = move _31; // scope 5 at $DIR/async_await.rs:+2:5: +2:14
251 goto -> bb18; // scope 5 at $DIR/async_await.rs:+2:5: +2:14
255 _29 = &mut (*_30); // scope 5 at $DIR/async_await.rs:+2:5: +2:14
256 StorageDead(_31); // scope 5 at $DIR/async_await.rs:+2:13: +2:14
257 _25 = <impl Future<Output = ()> as Future>::poll(move _26, move _29) -> bb19; // scope 5 at $DIR/async_await.rs:+2:8: +2:14
259 // + span: $DIR/async_await.rs:16:8: 16:14
260 // + literal: Const { ty: for<'a, 'b, 'c> fn(Pin<&'a mut impl Future<Output = ()>>, &'b mut Context<'c>) -> Poll<<impl Future<Output = ()> as Future>::Output> {<impl Future<Output = ()> as Future>::poll}, val: Value(<ZST>) }
264 StorageDead(_29); // scope 5 at $DIR/async_await.rs:+2:13: +2:14
265 StorageDead(_26); // scope 5 at $DIR/async_await.rs:+2:13: +2:14
266 _32 = discriminant(_25); // scope 4 at $DIR/async_await.rs:+2:8: +2:14
267 switchInt(move _32) -> [0: bb22, 1: bb20, otherwise: bb21]; // scope 4 at $DIR/async_await.rs:+2:8: +2:14
271 _24 = const (); // scope 4 at $DIR/async_await.rs:+2:8: +2:14
272 StorageDead(_30); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
273 StorageDead(_28); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
274 StorageDead(_25); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
275 StorageDead(_24); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
276 StorageLive(_35); // scope 4 at $DIR/async_await.rs:+2:8: +2:14
277 StorageLive(_36); // scope 4 at $DIR/async_await.rs:+2:8: +2:14
278 _36 = (); // scope 4 at $DIR/async_await.rs:+2:8: +2:14
279 Deinit(_0); // scope 4 at $DIR/async_await.rs:+2:8: +2:14
280 discriminant(_0) = 1; // scope 4 at $DIR/async_await.rs:+2:8: +2:14
281 discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2]))) = 4; // scope 4 at $DIR/async_await.rs:+2:8: +2:14
282 return; // scope 4 at $DIR/async_await.rs:+2:8: +2:14
286 unreachable; // scope 4 at $DIR/async_await.rs:+2:8: +2:14
290 StorageLive(_33); // scope 4 at $DIR/async_await.rs:+2:5: +2:14
291 _33 = ((_25 as Ready).0: ()); // scope 4 at $DIR/async_await.rs:+2:5: +2:14
292 _37 = _33; // scope 6 at $DIR/async_await.rs:+2:5: +2:14
293 StorageDead(_33); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
294 StorageDead(_30); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
295 StorageDead(_28); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
296 StorageDead(_25); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
297 StorageDead(_24); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
298 goto -> bb24; // scope 0 at $DIR/async_await.rs:+2:13: +2:14
302 StorageDead(_36); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
303 _38 = move _35; // scope 4 at $DIR/async_await.rs:+2:8: +2:14
304 StorageDead(_35); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
305 _7 = const (); // scope 4 at $DIR/async_await.rs:+2:8: +2:14
306 goto -> bb16; // scope 4 at $DIR/async_await.rs:+2:8: +2:14
310 nop; // scope 0 at $DIR/async_await.rs:+2:13: +2:14
311 goto -> bb25; // scope 0 at $DIR/async_await.rs:+3:1: +3:2
315 StorageDead(_21); // scope 0 at $DIR/async_await.rs:+3:1: +3:2
316 goto -> bb26; // scope 0 at $DIR/async_await.rs:+3:1: +3:2
320 Deinit(_0); // scope 0 at $DIR/async_await.rs:+3:2: +3:2
321 ((_0 as Ready).0: ()) = move _37; // scope 0 at $DIR/async_await.rs:+3:2: +3:2
322 discriminant(_0) = 0; // scope 0 at $DIR/async_await.rs:+3:2: +3:2
323 discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2]))) = 1; // scope 0 at $DIR/async_await.rs:+3:2: +3:2
324 return; // scope 0 at $DIR/async_await.rs:+3:2: +3:2
328 StorageLive(_3); // scope 0 at $DIR/async_await.rs:+0:18: +3:2
329 StorageLive(_4); // scope 0 at $DIR/async_await.rs:+0:18: +3:2
330 StorageLive(_19); // scope 0 at $DIR/async_await.rs:+0:18: +3:2
331 StorageLive(_20); // scope 0 at $DIR/async_await.rs:+0:18: +3:2
332 _19 = move _2; // scope 0 at $DIR/async_await.rs:+0:18: +3:2
333 goto -> bb11; // scope 0 at $DIR/async_await.rs:+0:18: +3:2
337 StorageLive(_21); // scope 0 at $DIR/async_await.rs:+0:18: +3:2
338 StorageLive(_35); // scope 0 at $DIR/async_await.rs:+0:18: +3:2
339 StorageLive(_36); // scope 0 at $DIR/async_await.rs:+0:18: +3:2
340 _35 = move _2; // scope 0 at $DIR/async_await.rs:+0:18: +3:2
341 goto -> bb23; // scope 0 at $DIR/async_await.rs:+0:18: +3:2
345 assert(const false, "`async fn` resumed after completion") -> bb29; // scope 0 at $DIR/async_await.rs:+0:18: +3:2
349 unreachable; // scope 0 at $DIR/async_await.rs:+0:18: +3:2