rust/tests/mir-opt/building/async_await.b-{closure#0}.generator_resume.0.mir

334 lines
8.8 KiB
Rust

// MIR for `b::{closure#0}` 0 generator_resume
/* generator_layout = GeneratorLayout {
field_tys: {
_0: GeneratorSavedTy {
ty: Alias(
Opaque,
AliasTy {
args: [
],
def_id: DefId(0:7 ~ async_await[ccf8]::a::{opaque#0}),
},
),
source_info: SourceInfo {
span: $DIR/async_await.rs:15:9: 15:14 (#8),
scope: scope[0],
},
ignore_for_traits: false,
},
_1: GeneratorSavedTy {
ty: Alias(
Opaque,
AliasTy {
args: [
],
def_id: DefId(0:7 ~ async_await[ccf8]::a::{opaque#0}),
},
),
source_info: SourceInfo {
span: $DIR/async_await.rs:16:9: 16:14 (#10),
scope: scope[0],
},
ignore_for_traits: false,
},
},
variant_fields: {
Unresumed(0): [],
Returned (1): [],
Panicked (2): [],
Suspend0 (3): [_0],
Suspend1 (4): [_1],
},
storage_conflicts: BitMatrix(2x2) {
(_0, _0),
(_1, _1),
},
} */
fn b::{closure#0}(_1: Pin<&mut {async fn body@$DIR/async_await.rs:14:18: 17:2}>, _2: &mut Context<'_>) -> Poll<()> {
debug _task_context => _38;
let mut _0: std::task::Poll<()>;
let _3: ();
let mut _4: impl std::future::Future<Output = ()>;
let mut _5: impl std::future::Future<Output = ()>;
let mut _6: impl std::future::Future<Output = ()>;
let mut _7: ();
let _8: ();
let mut _9: std::task::Poll<()>;
let mut _10: std::pin::Pin<&mut impl std::future::Future<Output = ()>>;
let mut _11: &mut impl std::future::Future<Output = ()>;
let mut _12: &mut impl std::future::Future<Output = ()>;
let mut _13: &mut std::task::Context<'_>;
let mut _14: &mut std::task::Context<'_>;
let mut _15: &mut std::task::Context<'_>;
let mut _16: isize;
let mut _18: !;
let mut _19: &mut std::task::Context<'_>;
let mut _20: ();
let mut _21: impl std::future::Future<Output = ()>;
let mut _22: impl std::future::Future<Output = ()>;
let mut _23: impl std::future::Future<Output = ()>;
let _24: ();
let mut _25: std::task::Poll<()>;
let mut _26: std::pin::Pin<&mut impl std::future::Future<Output = ()>>;
let mut _27: &mut impl std::future::Future<Output = ()>;
let mut _28: &mut impl std::future::Future<Output = ()>;
let mut _29: &mut std::task::Context<'_>;
let mut _30: &mut std::task::Context<'_>;
let mut _31: &mut std::task::Context<'_>;
let mut _32: isize;
let mut _34: !;
let mut _35: &mut std::task::Context<'_>;
let mut _36: ();
let mut _37: ();
let mut _38: &mut std::task::Context<'_>;
let mut _39: u32;
scope 1 {
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 = ()>);
let _17: ();
scope 2 {
}
scope 3 {
debug result => _17;
}
}
scope 4 {
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 = ()>);
let _33: ();
scope 5 {
}
scope 6 {
debug result => _33;
}
}
bb0: {
_39 = discriminant((*(_1.0: &mut {async fn body@$DIR/async_await.rs:14:18: 17:2})));
switchInt(move _39) -> [0: bb1, 1: bb28, 3: bb26, 4: bb27, otherwise: bb29];
}
bb1: {
_38 = move _2;
StorageLive(_3);
StorageLive(_4);
StorageLive(_5);
_5 = a() -> [return: bb2, unwind unreachable];
}
bb2: {
_4 = <impl Future<Output = ()> as IntoFuture>::into_future(move _5) -> [return: bb3, unwind unreachable];
}
bb3: {
StorageDead(_5);
nop;
(((*(_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;
goto -> bb4;
}
bb4: {
StorageLive(_8);
StorageLive(_9);
StorageLive(_10);
StorageLive(_11);
StorageLive(_12);
_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 = ()>);
_11 = &mut (*_12);
_10 = Pin::<&mut impl Future<Output = ()>>::new_unchecked(move _11) -> [return: bb5, unwind unreachable];
}
bb5: {
StorageDead(_11);
StorageLive(_13);
StorageLive(_14);
StorageLive(_15);
_15 = _38;
_14 = move _15;
goto -> bb6;
}
bb6: {
_13 = &mut (*_14);
StorageDead(_15);
_9 = <impl Future<Output = ()> as Future>::poll(move _10, move _13) -> [return: bb7, unwind unreachable];
}
bb7: {
StorageDead(_13);
StorageDead(_10);
_16 = discriminant(_9);
switchInt(move _16) -> [0: bb10, 1: bb8, otherwise: bb9];
}
bb8: {
_8 = const ();
StorageDead(_14);
StorageDead(_12);
StorageDead(_9);
StorageDead(_8);
StorageLive(_19);
StorageLive(_20);
_20 = ();
_0 = Poll::<()>::Pending;
discriminant((*(_1.0: &mut {async fn body@$DIR/async_await.rs:14:18: 17:2}))) = 3;
return;
}
bb9: {
unreachable;
}
bb10: {
StorageLive(_17);
_17 = ((_9 as Ready).0: ());
_3 = _17;
StorageDead(_17);
StorageDead(_14);
StorageDead(_12);
StorageDead(_9);
StorageDead(_8);
goto -> bb12;
}
bb11: {
StorageDead(_20);
_38 = move _19;
StorageDead(_19);
_7 = const ();
goto -> bb4;
}
bb12: {
nop;
goto -> bb13;
}
bb13: {
StorageDead(_4);
StorageDead(_3);
StorageLive(_21);
StorageLive(_22);
_22 = a() -> [return: bb14, unwind unreachable];
}
bb14: {
_21 = <impl Future<Output = ()> as IntoFuture>::into_future(move _22) -> [return: bb15, unwind unreachable];
}
bb15: {
StorageDead(_22);
nop;
(((*(_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;
goto -> bb16;
}
bb16: {
StorageLive(_24);
StorageLive(_25);
StorageLive(_26);
StorageLive(_27);
StorageLive(_28);
_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 = ()>);
_27 = &mut (*_28);
_26 = Pin::<&mut impl Future<Output = ()>>::new_unchecked(move _27) -> [return: bb17, unwind unreachable];
}
bb17: {
StorageDead(_27);
StorageLive(_29);
StorageLive(_30);
StorageLive(_31);
_31 = _38;
_30 = move _31;
goto -> bb18;
}
bb18: {
_29 = &mut (*_30);
StorageDead(_31);
_25 = <impl Future<Output = ()> as Future>::poll(move _26, move _29) -> [return: bb19, unwind unreachable];
}
bb19: {
StorageDead(_29);
StorageDead(_26);
_32 = discriminant(_25);
switchInt(move _32) -> [0: bb21, 1: bb20, otherwise: bb9];
}
bb20: {
_24 = const ();
StorageDead(_30);
StorageDead(_28);
StorageDead(_25);
StorageDead(_24);
StorageLive(_35);
StorageLive(_36);
_36 = ();
_0 = Poll::<()>::Pending;
discriminant((*(_1.0: &mut {async fn body@$DIR/async_await.rs:14:18: 17:2}))) = 4;
return;
}
bb21: {
StorageLive(_33);
_33 = ((_25 as Ready).0: ());
_37 = _33;
StorageDead(_33);
StorageDead(_30);
StorageDead(_28);
StorageDead(_25);
StorageDead(_24);
goto -> bb23;
}
bb22: {
StorageDead(_36);
_38 = move _35;
StorageDead(_35);
_7 = const ();
goto -> bb16;
}
bb23: {
nop;
goto -> bb24;
}
bb24: {
StorageDead(_21);
goto -> bb25;
}
bb25: {
_0 = Poll::<()>::Ready(move _37);
discriminant((*(_1.0: &mut {async fn body@$DIR/async_await.rs:14:18: 17:2}))) = 1;
return;
}
bb26: {
StorageLive(_3);
StorageLive(_4);
StorageLive(_19);
StorageLive(_20);
_19 = move _2;
goto -> bb11;
}
bb27: {
StorageLive(_21);
StorageLive(_35);
StorageLive(_36);
_35 = move _2;
goto -> bb22;
}
bb28: {
assert(const false, "`async fn` resumed after completion") -> [success: bb28, unwind unreachable];
}
bb29: {
unreachable;
}
}