// 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 _7: std::option::Option; let mut _9: &impl Fn(u32); let mut _10: (u32,); let _11: (); scope 1 { debug ((iter: std::ops::Range).0: u32) => _1; debug ((iter: std::ops::Range).1: u32) => _2; let _8: u32; scope 2 { debug x => _8; } scope 4 (inlined iter::range::>::next) { scope 5 (inlined as iter::range::RangeIteratorImpl>::spec_next) { let mut _5: bool; let _6: u32; scope 6 { scope 8 (inlined ::forward_unchecked) { scope 9 (inlined #[track_caller] core::num::::unchecked_add) { scope 10 (inlined core::ub_checks::check_language_ub) { scope 11 (inlined core::ub_checks::check_language_ub::runtime) { } } } } } scope 7 (inlined std::cmp::impls::::lt) { let mut _4: u32; } } } } scope 3 (inlined as IntoIterator>::into_iter) { } bb0: { goto -> bb1; } bb1: { StorageLive(_7); StorageLive(_5); StorageLive(_4); _4 = copy _1; _5 = Lt(move _4, copy _2); StorageDead(_4); switchInt(move _5) -> [0: bb2, otherwise: bb4]; } bb2: { StorageDead(_5); StorageDead(_7); drop(_3) -> [return: bb3, unwind continue]; } bb3: { return; } bb4: { _6 = copy _1; _1 = AddUnchecked(copy _6, const 1_u32); _7 = Option::::Some(copy _6); StorageDead(_5); _8 = copy ((_7 as Some).0: u32); StorageLive(_9); _9 = &_3; StorageLive(_10); _10 = (copy _8,); _11 = >::call(move _9, move _10) -> [return: bb5, unwind: bb6]; } bb5: { StorageDead(_10); StorageDead(_9); StorageDead(_7); goto -> bb1; } bb6 (cleanup): { drop(_3) -> [return: bb7, unwind terminate(cleanup)]; } bb7 (cleanup): { resume; } }