blob: f29242c468c04a1fb54f3e7eff7bce89fc07a234 [file]
- // MIR for `uninhabited_variant::{closure#0}` before StateTransform
+ // MIR for `uninhabited_variant::{closure#0}` after StateTransform
- fn uninhabited_variant::{closure#0}(_1: {async fn body of uninhabited_variant()}, _2: std::future::ResumeTy) -> ()
- yields ()
- {
+ fn uninhabited_variant::{closure#0}(_1: Pin<&mut {async fn body of uninhabited_variant()}>, _2: &mut Context<'_>) -> Poll<()> {
+ coroutine layout {
+ field _s0: {async block@$DIR/async_fn.rs:106:13: 106:18};
+ field _s1: {async block@$DIR/async_fn.rs:106:13: 106:18};
+ field _s2: {async fn body of uninhabited_variant::{closure#0}::unreachable()};
+ field _s3: bool;
+ variant_fields = {
+ Unresumed(0): [],
+ Returned (1): [],
+ Panicked (2): [],
+ Suspend0 (3): [_s1, _s3],
+ Suspend1 (4): [_s0, _s2, _s3],
+ }
+ storage_conflicts = BitMatrix(4x4) {(_s0, _s0), (_s0, _s2), (_s0, _s3), (_s1, _s1), (_s1, _s3), (_s2, _s0), (_s2, _s2), (_s2, _s3), (_s3, _s0), (_s3, _s1), (_s3, _s2), (_s3, _s3)}
+ }
debug _task_context => _2;
- let mut _0: ();
+ coroutine debug c => _s0;
+ let mut _0: std::task::Poll<()>;
let _3: {async block@$DIR/async_fn.rs:106:13: 106:18};
let mut _4: std::option::Option<Never>;
let mut _5: isize;
let _6: ();
let mut _7: {async block@$DIR/async_fn.rs:106:13: 106:18};
let mut _8: {async block@$DIR/async_fn.rs:106:13: 106:18};
let mut _10: ();
let _11: ();
let mut _12: std::task::Poll<()>;
let mut _13: std::pin::Pin<&mut {async block@$DIR/async_fn.rs:106:13: 106:18}>;
let mut _14: &mut {async block@$DIR/async_fn.rs:106:13: 106:18};
let mut _15: &mut {async block@$DIR/async_fn.rs:106:13: 106:18};
let mut _16: &mut std::task::Context<'_>;
let mut _17: &mut std::task::Context<'_>;
- let mut _18: std::future::ResumeTy;
+ let mut _18: &mut std::task::Context<'_>;
let mut _19: isize;
let mut _21: !;
- let mut _22: std::future::ResumeTy;
+ let mut _22: &mut std::task::Context<'_>;
let mut _23: ();
let _25: ();
let mut _26: {async fn body of uninhabited_variant::{closure#0}::unreachable()};
let mut _27: {async fn body of uninhabited_variant::{closure#0}::unreachable()};
let mut _28: Never;
let _30: ();
let mut _31: std::task::Poll<()>;
let mut _32: std::pin::Pin<&mut {async fn body of uninhabited_variant::{closure#0}::unreachable()}>;
let mut _33: &mut {async fn body of uninhabited_variant::{closure#0}::unreachable()};
let mut _34: &mut {async fn body of uninhabited_variant::{closure#0}::unreachable()};
let mut _35: &mut std::task::Context<'_>;
let mut _36: &mut std::task::Context<'_>;
- let mut _37: std::future::ResumeTy;
+ let mut _37: &mut std::task::Context<'_>;
let mut _38: isize;
let mut _40: !;
- let mut _41: std::future::ResumeTy;
+ let mut _41: &mut std::task::Context<'_>;
let mut _42: ();
let mut _43: bool;
+ let mut _44: ();
+ let mut _45: u32;
+ let mut _46: &mut {async fn body of uninhabited_variant()};
scope 1 {
- debug c => _3;
+ debug c => (((*_46) as variant#4).0: {async block@$DIR/async_fn.rs:106:13: 106:18});
+ coroutine debug __awaitee => _s1;
let mut _9: {async block@$DIR/async_fn.rs:106:13: 106:18};
let _24: Never;
scope 2 {
- debug __awaitee => _9;
+ debug __awaitee => (((*_46) as variant#3).0: {async block@$DIR/async_fn.rs:106:13: 106:18});
let _20: ();
scope 3 {
debug result => _20;
}
}
scope 4 {
debug r => _24;
+ coroutine debug __awaitee => _s2;
let mut _29: {async fn body of uninhabited_variant::{closure#0}::unreachable()};
scope 5 {
- debug __awaitee => _29;
+ debug __awaitee => (((*_46) as variant#4).1: {async fn body of uninhabited_variant::{closure#0}::unreachable()});
let _39: ();
scope 6 {
debug result => _39;
}
}
}
}
bb0: {
- _43 = const false;
- StorageLive(_3);
- _43 = const true;
- _3 = {coroutine@$DIR/async_fn.rs:106:13: 106:18 (#0)};
- StorageLive(_4);
- _4 = Option::<Never>::None;
- PlaceMention(_4);
- _5 = discriminant(_4);
- switchInt(move _5) -> [0: bb3, 1: bb2, otherwise: bb1];
+ _46 = copy (_1.0: &mut {async fn body of uninhabited_variant()});
+ _45 = discriminant((*_46));
+ switchInt(move _45) -> [0: bb56, 1: bb55, 2: bb54, 3: bb52, 4: bb53, otherwise: bb1];
}
bb1: {
unreachable;
}
bb2: {
StorageLive(_24);
_24 = move ((_4 as Some).0: Never);
StorageLive(_25);
StorageLive(_26);
StorageLive(_27);
StorageLive(_28);
_28 = move _24;
- _27 = uninhabited_variant::{closure#0}::unreachable(move _28) -> [return: bb14, unwind: bb43];
+ _27 = uninhabited_variant::{closure#0}::unreachable(move _28) -> [return: bb14, unwind: bb33];
}
bb3: {
StorageLive(_6);
StorageLive(_7);
StorageLive(_8);
- _43 = const false;
- _8 = move _3;
- _7 = <{async block@$DIR/async_fn.rs:106:13: 106:18} as IntoFuture>::into_future(move _8) -> [return: bb4, unwind: bb51];
+ (((*_46) as variant#4).2: bool) = const false;
+ _8 = move (((*_46) as variant#4).0: {async block@$DIR/async_fn.rs:106:13: 106:18});
+ _7 = <{async block@$DIR/async_fn.rs:106:13: 106:18} as IntoFuture>::into_future(move _8) -> [return: bb4, unwind: bb40];
}
bb4: {
StorageDead(_8);
PlaceMention(_7);
- StorageLive(_9);
- _9 = move _7;
+ nop;
+ (((*_46) as variant#3).0: {async block@$DIR/async_fn.rs:106:13: 106:18}) = move _7;
goto -> bb5;
}
bb5: {
StorageLive(_11);
StorageLive(_12);
StorageLive(_13);
StorageLive(_14);
StorageLive(_15);
- _15 = &mut _9;
+ _15 = &mut (((*_46) as variant#3).0: {async block@$DIR/async_fn.rs:106:13: 106:18});
_14 = &mut (*_15);
- _13 = Pin::<&mut {async block@$DIR/async_fn.rs:106:13: 106:18}>::new_unchecked(move _14) -> [return: bb6, unwind: bb48];
+ _13 = Pin::<&mut {async block@$DIR/async_fn.rs:106:13: 106:18}>::new_unchecked(move _14) -> [return: bb6, unwind: bb37];
}
bb6: {
StorageDead(_14);
StorageLive(_16);
StorageLive(_17);
StorageLive(_18);
_18 = copy _2;
- _17 = std::future::get_context::<'_, '_>(move _18) -> [return: bb7, unwind: bb46];
+ _17 = move _18;
+ goto -> bb7;
}
bb7: {
_16 = &mut (*_17);
StorageDead(_18);
- _12 = <{async block@$DIR/async_fn.rs:106:13: 106:18} as Future>::poll(move _13, move _16) -> [return: bb8, unwind: bb47];
+ _12 = <{async block@$DIR/async_fn.rs:106:13: 106:18} as Future>::poll(move _13, move _16) -> [return: bb8, unwind: bb36];
}
bb8: {
StorageDead(_17);
StorageDead(_16);
StorageDead(_15);
StorageDead(_13);
PlaceMention(_12);
_19 = discriminant(_12);
switchInt(move _19) -> [0: bb10, 1: bb9, otherwise: bb1];
}
bb9: {
_11 = const ();
StorageDead(_12);
StorageDead(_11);
StorageLive(_22);
StorageLive(_23);
_23 = ();
- _22 = yield(move _23) -> [resume: bb11, drop: bb31];
+ _0 = Poll::<()>::Pending;
+ StorageDead(_4);
+ StorageDead(_6);
+ StorageDead(_7);
+ StorageDead(_22);
+ StorageDead(_23);
+ discriminant((*_46)) = 3;
+ return;
}
bb10: {
StorageLive(_20);
_20 = copy ((_12 as Ready).0: ());
_6 = copy _20;
StorageDead(_20);
StorageDead(_12);
StorageDead(_11);
- drop(_9) -> [return: bb12, unwind: bb50];
+ drop((((*_46) as variant#3).0: {async block@$DIR/async_fn.rs:106:13: 106:18})) -> [return: bb12, unwind: bb39];
}
bb11: {
StorageDead(_23);
_2 = move _22;
StorageDead(_22);
_10 = const ();
goto -> bb5;
}
bb12: {
- StorageDead(_9);
+ nop;
goto -> bb13;
}
bb13: {
StorageDead(_7);
StorageDead(_6);
- _0 = const ();
+ _44 = const ();
goto -> bb25;
}
bb14: {
StorageDead(_28);
- _26 = <{async fn body of uninhabited_variant::{closure#0}::unreachable()} as IntoFuture>::into_future(move _27) -> [return: bb15, unwind: bb42];
+ _26 = <{async fn body of uninhabited_variant::{closure#0}::unreachable()} as IntoFuture>::into_future(move _27) -> [return: bb15, unwind: bb32];
}
bb15: {
StorageDead(_27);
PlaceMention(_26);
- StorageLive(_29);
- _29 = move _26;
+ nop;
+ (((*_46) as variant#4).1: {async fn body of uninhabited_variant::{closure#0}::unreachable()}) = move _26;
goto -> bb16;
}
bb16: {
StorageLive(_30);
StorageLive(_31);
StorageLive(_32);
StorageLive(_33);
StorageLive(_34);
- _34 = &mut _29;
+ _34 = &mut (((*_46) as variant#4).1: {async fn body of uninhabited_variant::{closure#0}::unreachable()});
_33 = &mut (*_34);
- _32 = Pin::<&mut {async fn body of uninhabited_variant::{closure#0}::unreachable()}>::new_unchecked(move _33) -> [return: bb17, unwind: bb39];
+ _32 = Pin::<&mut {async fn body of uninhabited_variant::{closure#0}::unreachable()}>::new_unchecked(move _33) -> [return: bb17, unwind: bb29];
}
bb17: {
StorageDead(_33);
StorageLive(_35);
StorageLive(_36);
StorageLive(_37);
_37 = copy _2;
- _36 = std::future::get_context::<'_, '_>(move _37) -> [return: bb18, unwind: bb37];
+ _36 = move _37;
+ goto -> bb18;
}
bb18: {
_35 = &mut (*_36);
StorageDead(_37);
- _31 = <{async fn body of uninhabited_variant::{closure#0}::unreachable()} as Future>::poll(move _32, move _35) -> [return: bb19, unwind: bb38];
+ _31 = <{async fn body of uninhabited_variant::{closure#0}::unreachable()} as Future>::poll(move _32, move _35) -> [return: bb19, unwind: bb28];
}
bb19: {
StorageDead(_36);
StorageDead(_35);
StorageDead(_34);
StorageDead(_32);
PlaceMention(_31);
_38 = discriminant(_31);
switchInt(move _38) -> [0: bb21, 1: bb20, otherwise: bb1];
}
bb20: {
_30 = const ();
StorageDead(_31);
StorageDead(_30);
StorageLive(_41);
StorageLive(_42);
_42 = ();
- _41 = yield(move _42) -> [resume: bb22, drop: bb28];
+ _0 = Poll::<()>::Pending;
+ StorageDead(_4);
+ StorageDead(_24);
+ StorageDead(_25);
+ StorageDead(_26);
+ StorageDead(_41);
+ StorageDead(_42);
+ discriminant((*_46)) = 4;
+ return;
}
bb21: {
StorageLive(_39);
_39 = copy ((_31 as Ready).0: ());
_25 = copy _39;
StorageDead(_39);
StorageDead(_31);
StorageDead(_30);
- drop(_29) -> [return: bb23, unwind: bb41];
+ drop((((*_46) as variant#4).1: {async fn body of uninhabited_variant::{closure#0}::unreachable()})) -> [return: bb23, unwind: bb31];
}
bb22: {
StorageDead(_42);
_2 = move _41;
StorageDead(_41);
_10 = const ();
goto -> bb16;
}
bb23: {
- StorageDead(_29);
+ nop;
goto -> bb24;
}
bb24: {
StorageDead(_26);
StorageDead(_25);
- _0 = const ();
+ _44 = const ();
StorageDead(_24);
goto -> bb25;
}
bb25: {
StorageDead(_4);
- goto -> bb64;
+ goto -> bb47;
}
bb26: {
- _43 = const false;
- StorageDead(_3);
- drop(_1) -> [return: bb27, unwind: bb56];
+ (((*_46) as variant#4).2: bool) = const false;
+ nop;
+ goto -> bb50;
}
bb27: {
+ _0 = Poll::<()>::Ready(move _44);
+ discriminant((*_46)) = 1;
return;
}
- bb28: {
- StorageDead(_42);
- StorageDead(_41);
- drop(_29) -> [return: bb29, unwind: bb57];
- }
-
- bb29: {
- StorageDead(_29);
- goto -> bb30;
- }
-
- bb30: {
- StorageDead(_26);
- StorageDead(_25);
- StorageDead(_24);
- goto -> bb34;
- }
-
- bb31: {
- StorageDead(_23);
- StorageDead(_22);
- drop(_9) -> [return: bb32, unwind: bb59];
- }
-
- bb32: {
- StorageDead(_9);
- goto -> bb33;
- }
-
- bb33: {
- StorageDead(_7);
- StorageDead(_6);
- goto -> bb34;
- }
-
- bb34: {
- StorageDead(_4);
- goto -> bb66;
- }
-
- bb35: {
- _43 = const false;
- StorageDead(_3);
- drop(_1) -> [return: bb36, unwind: bb56];
- }
-
- bb36: {
- coroutine_drop;
- }
-
- bb37 (cleanup): {
- StorageDead(_37);
- goto -> bb38;
- }
-
- bb38 (cleanup): {
+ bb28 (cleanup): {
StorageDead(_36);
StorageDead(_35);
- goto -> bb40;
+ goto -> bb30;
}
- bb39 (cleanup): {
+ bb29 (cleanup): {
StorageDead(_33);
- goto -> bb40;
+ goto -> bb30;
}
- bb40 (cleanup): {
+ bb30 (cleanup): {
StorageDead(_34);
StorageDead(_32);
StorageDead(_31);
StorageDead(_30);
- drop(_29) -> [return: bb41, unwind terminate(cleanup)];
+ drop((((*_46) as variant#4).1: {async fn body of uninhabited_variant::{closure#0}::unreachable()})) -> [return: bb31, unwind terminate(cleanup)];
}
- bb41 (cleanup): {
- StorageDead(_29);
- goto -> bb45;
+ bb31 (cleanup): {
+ nop;
+ goto -> bb35;
}
- bb42 (cleanup): {
- goto -> bb44;
+ bb32 (cleanup): {
+ goto -> bb34;
}
- bb43 (cleanup): {
+ bb33 (cleanup): {
StorageDead(_28);
- goto -> bb44;
+ goto -> bb34;
}
- bb44 (cleanup): {
+ bb34 (cleanup): {
StorageDead(_27);
- goto -> bb45;
+ goto -> bb35;
}
- bb45 (cleanup): {
+ bb35 (cleanup): {
StorageDead(_26);
StorageDead(_25);
StorageDead(_24);
- goto -> bb54;
+ goto -> bb43;
}
- bb46 (cleanup): {
- StorageDead(_18);
- goto -> bb47;
- }
-
- bb47 (cleanup): {
+ bb36 (cleanup): {
StorageDead(_17);
StorageDead(_16);
- goto -> bb49;
+ goto -> bb38;
}
- bb48 (cleanup): {
+ bb37 (cleanup): {
StorageDead(_14);
- goto -> bb49;
+ goto -> bb38;
}
- bb49 (cleanup): {
+ bb38 (cleanup): {
StorageDead(_15);
StorageDead(_13);
StorageDead(_12);
StorageDead(_11);
- drop(_9) -> [return: bb50, unwind terminate(cleanup)];
+ drop((((*_46) as variant#3).0: {async block@$DIR/async_fn.rs:106:13: 106:18})) -> [return: bb39, unwind terminate(cleanup)];
}
- bb50 (cleanup): {
- StorageDead(_9);
- goto -> bb53;
+ bb39 (cleanup): {
+ nop;
+ goto -> bb42;
}
- bb51 (cleanup): {
- goto -> bb52;
+ bb40 (cleanup): {
+ goto -> bb41;
}
- bb52 (cleanup): {
+ bb41 (cleanup): {
StorageDead(_8);
- goto -> bb53;
+ goto -> bb42;
}
- bb53 (cleanup): {
+ bb42 (cleanup): {
StorageDead(_7);
StorageDead(_6);
- goto -> bb54;
+ goto -> bb43;
}
- bb54 (cleanup): {
+ bb43 (cleanup): {
StorageDead(_4);
- goto -> bb68;
+ goto -> bb49;
}
- bb55 (cleanup): {
- _43 = const false;
- StorageDead(_3);
- drop(_1) -> [return: bb56, unwind terminate(cleanup)];
+ bb44 (cleanup): {
+ (((*_46) as variant#4).2: bool) = const false;
+ nop;
+ goto -> bb45;
}
- bb56 (cleanup): {
- resume;
+ bb45 (cleanup): {
+ goto -> bb51;
}
- bb57 (cleanup): {
- StorageDead(_29);
- goto -> bb58;
+ bb46: {
+ drop((((*_46) as variant#4).0: {async block@$DIR/async_fn.rs:106:13: 106:18})) -> [return: bb26, unwind: bb44];
}
- bb58 (cleanup): {
- StorageDead(_26);
- StorageDead(_25);
- StorageDead(_24);
- goto -> bb61;
+ bb47: {
+ switchInt(copy (((*_46) as variant#4).2: bool)) -> [0: bb26, otherwise: bb46];
}
- bb59 (cleanup): {
- StorageDead(_9);
- goto -> bb60;
+ bb48 (cleanup): {
+ drop((((*_46) as variant#4).0: {async block@$DIR/async_fn.rs:106:13: 106:18})) -> [return: bb44, unwind terminate(cleanup)];
}
- bb60 (cleanup): {
- StorageDead(_7);
- StorageDead(_6);
- goto -> bb61;
+ bb49 (cleanup): {
+ switchInt(copy (((*_46) as variant#4).2: bool)) -> [0: bb44, otherwise: bb48];
}
- bb61 (cleanup): {
- StorageDead(_4);
- goto -> bb70;
+ bb50: {
+ goto -> bb27;
}
- bb62 (cleanup): {
- _43 = const false;
- StorageDead(_3);
- drop(_1) -> [return: bb56, unwind terminate(cleanup)];
+ bb51 (cleanup): {
+ discriminant((*_46)) = 2;
+ resume;
}
- bb63: {
- drop(_3) -> [return: bb26, unwind: bb55];
+ bb52: {
+ StorageLive(_4);
+ StorageLive(_6);
+ StorageLive(_7);
+ StorageLive(_22);
+ StorageLive(_23);
+ _22 = move _2;
+ goto -> bb11;
}
- bb64: {
- switchInt(copy _43) -> [0: bb26, otherwise: bb63];
+ bb53: {
+ StorageLive(_4);
+ StorageLive(_24);
+ StorageLive(_25);
+ StorageLive(_26);
+ StorageLive(_41);
+ StorageLive(_42);
+ _41 = move _2;
+ goto -> bb22;
}
- bb65: {
- drop(_3) -> [return: bb35, unwind: bb62];
+ bb54: {
+ assert(const false, "`async fn` resumed after panicking") -> [success: bb54, unwind continue];
}
- bb66: {
- switchInt(copy _43) -> [0: bb35, otherwise: bb65];
+ bb55: {
+ assert(const false, "`async fn` resumed after completion") -> [success: bb55, unwind continue];
}
- bb67 (cleanup): {
- drop(_3) -> [return: bb55, unwind terminate(cleanup)];
- }
-
- bb68 (cleanup): {
- switchInt(copy _43) -> [0: bb55, otherwise: bb67];
- }
-
- bb69 (cleanup): {
- drop(_3) -> [return: bb62, unwind terminate(cleanup)];
- }
-
- bb70 (cleanup): {
- switchInt(copy _43) -> [0: bb62, otherwise: bb69];
+ bb56: {
+ (((*_46) as variant#4).2: bool) = const false;
+ nop;
+ (((*_46) as variant#4).2: bool) = const true;
+ (((*_46) as variant#4).0: {async block@$DIR/async_fn.rs:106:13: 106:18}) = {coroutine@$DIR/async_fn.rs:106:13: 106:18 (#0)};
+ StorageLive(_4);
+ _4 = Option::<Never>::None;
+ PlaceMention(_4);
+ _5 = discriminant(_4);
+ switchInt(move _5) -> [0: bb3, 1: bb2, otherwise: bb1];
}
}