// MIR for `forward_loop` after PreCodegen fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () { debug start => _1; debug end => _2; debug f => _3; let mut _0: (); let mut _4: u32; let mut _7: std::option::Option; let mut _10: isize; let mut _12: &impl Fn(u32); let mut _13: (u32,); let _14: (); scope 1 { debug iter => std::ops::Range{ .0 => _4, .1 => _2, }; let _11: u32; scope 2 { debug x => _11; } scope 4 (inlined iter::range::>::next) { debug self => &std::ops::Range{ .0 => _4, .1 => _2, }; scope 5 (inlined as iter::range::RangeIteratorImpl>::spec_next) { debug self => &std::ops::Range{ .0 => _4, .1 => _2, }; let mut _6: bool; let _8: u32; let mut _9: u32; scope 6 { debug old => _8; scope 7 { } } scope 8 (inlined cmp::impls::::lt) { debug self => &_4; debug other => &_2; let mut _5: u32; } } } } scope 3 (inlined as IntoIterator>::into_iter) { debug self => std::ops::Range{ .0 => _1, .1 => _2, }; } bb0: { StorageLive(_4); _4 = _1; goto -> bb1; } bb1: { StorageLive(_7); StorageLive(_8); StorageLive(_6); StorageLive(_5); _5 = _4; _6 = Lt(move _5, _2); StorageDead(_5); switchInt(move _6) -> [0: bb2, otherwise: bb3]; } bb2: { _7 = Option::::None; goto -> bb5; } bb3: { _8 = _4; StorageLive(_9); _9 = ::forward_unchecked(_8, const 1_usize) -> [return: bb4, unwind: bb11]; } bb4: { _4 = move _9; StorageDead(_9); _7 = Option::::Some(_8); goto -> bb5; } bb5: { StorageDead(_6); StorageDead(_8); _10 = discriminant(_7); switchInt(move _10) -> [0: bb6, 1: bb8, otherwise: bb10]; } bb6: { StorageDead(_7); StorageDead(_4); drop(_3) -> [return: bb7, unwind continue]; } bb7: { return; } bb8: { _11 = ((_7 as Some).0: u32); StorageLive(_12); _12 = &_3; StorageLive(_13); _13 = (_11,); _14 = >::call(move _12, move _13) -> [return: bb9, unwind: bb11]; } bb9: { StorageDead(_13); StorageDead(_12); StorageDead(_7); goto -> bb1; } bb10: { unreachable; } bb11 (cleanup): { drop(_3) -> [return: bb12, unwind terminate]; } bb12 (cleanup): { resume; } }