- // MIR for `main` before Inline + // MIR for `main` after Inline fn main() -> () { let mut _0: (); let _1: std::ops::GeneratorState; let mut _2: std::pin::Pin<&mut [generator@$DIR/inline_generator.rs:16:5: 16:8]>; let mut _3: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8]; let mut _4: [generator@$DIR/inline_generator.rs:16:5: 16:8]; + let mut _5: bool; scope 1 { debug _r => _1; } + scope 2 (inlined g) { + } + scope 3 (inlined Pin::<&mut [generator@$DIR/inline_generator.rs:16:5: 16:8]>::new) { + debug pointer => _3; + scope 4 { + scope 5 (inlined Pin::<&mut [generator@$DIR/inline_generator.rs:16:5: 16:8]>::new_unchecked) { + debug pointer => _3; + } + } + } + scope 6 (inlined g::{closure#0}) { + debug a => _5; + let mut _6: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8]; + let mut _7: u32; + let mut _8: i32; + let mut _9: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8]; + let mut _10: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8]; + } bb0: { StorageLive(_1); StorageLive(_2); StorageLive(_3); StorageLive(_4); - _4 = g() -> bb1; - } - - bb1: { + _4 = [generator@$DIR/inline_generator.rs:16:5: 16:8 (#0)]; _3 = &mut _4; - _2 = Pin::<&mut [generator@$DIR/inline_generator.rs:16:5: 16:8]>::new(move _3) -> [return: bb2, unwind: bb4]; - } - - bb2: { + _2 = Pin::<&mut [generator@$DIR/inline_generator.rs:16:5: 16:8]> { pointer: move _3 }; StorageDead(_3); - _1 = <[generator@$DIR/inline_generator.rs:16:5: 16:8] as Generator>::resume(move _2, const false) -> [return: bb3, unwind: bb4]; + StorageLive(_5); + _5 = const false; + _6 = deref_copy (_2.0: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8]); + _7 = discriminant((*_6)); + switchInt(move _7) -> [0: bb3, 1: bb7, 3: bb8, otherwise: bb9]; } - bb3: { + bb1: { + StorageDead(_5); StorageDead(_2); StorageDead(_4); _0 = const (); StorageDead(_1); return; } - bb4 (cleanup): { + bb2 (cleanup): { resume; + } + + bb3: { + StorageLive(_8); + switchInt(_5) -> [0: bb4, otherwise: bb5]; + } + + bb4: { + _8 = const 13_i32; + goto -> bb6; + } + + bb5: { + _8 = const 7_i32; + goto -> bb6; + } + + bb6: { + _1 = GeneratorState::::Yielded(move _8); + _9 = deref_copy (_2.0: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8]); + discriminant((*_9)) = 3; + goto -> bb1; + } + + bb7: { + assert(const false, "generator resumed after completion") -> [success: bb7, unwind: bb2]; + } + + bb8: { + StorageLive(_8); + StorageDead(_8); + _1 = GeneratorState::::Complete(_5); + _10 = deref_copy (_2.0: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8]); + discriminant((*_10)) = 1; + goto -> bb1; + } + + bb9: { + unreachable; } }