// MIR for `range_iter_next` after runtime-optimized

fn range_iter_next(_1: &mut std::ops::Range<u32>) -> Option<u32> {
    debug it => _1;
    let mut _0: std::option::Option<u32>;
    scope 1 (inlined iter::range::<impl Iterator for std::ops::Range<u32>>::next) {
        scope 2 (inlined <std::ops::Range<u32> as iter::range::RangeIteratorImpl>::spec_next) {
            let mut _4: bool;
            let _5: u32;
            let mut _6: u32;
            scope 3 {
                scope 5 (inlined <u32 as Step>::forward_unchecked) {
                    scope 6 (inlined #[track_caller] core::num::<impl u32>::unchecked_add) {
                        scope 7 (inlined core::ub_checks::check_language_ub) {
                            scope 8 (inlined core::ub_checks::check_language_ub::runtime) {
                            }
                        }
                    }
                }
            }
            scope 4 (inlined std::cmp::impls::<impl PartialOrd for u32>::lt) {
                let mut _2: u32;
                let mut _3: u32;
            }
        }
    }

    bb0: {
        StorageLive(_4);
        StorageLive(_2);
        _2 = copy ((*_1).0: u32);
        StorageLive(_3);
        _3 = copy ((*_1).1: u32);
        _4 = Lt(move _2, move _3);
        StorageDead(_3);
        StorageDead(_2);
        switchInt(move _4) -> [0: bb1, otherwise: bb2];
    }

    bb1: {
        _0 = const Option::<u32>::None;
        goto -> bb3;
    }

    bb2: {
        StorageLive(_5);
        _5 = copy ((*_1).0: u32);
        StorageLive(_6);
        _6 = AddUnchecked(copy _5, const 1_u32);
        ((*_1).0: u32) = move _6;
        StorageDead(_6);
        _0 = Option::<u32>::Some(copy _5);
        StorageDead(_5);
        goto -> bb3;
    }

    bb3: {
        StorageDead(_4);
        return;
    }
}

ALLOC0 (size: 8, align: 4) {
    00 00 00 00 __ __ __ __                         │ ....░░░░
}
