// MIR for `use_checked_sub` after PreCodegen

fn use_checked_sub(_1: u32, _2: u32) -> () {
    debug x => _1;
    debug rhs => _2;
    let mut _0: ();
    let mut _5: std::option::Option<u32>;
    let _7: ();
    scope 1 {
        debug delta => _6;
        let _6: u32;
        scope 2 (inlined core::num::<impl u32>::checked_sub) {
            let mut _3: bool;
            let mut _4: u32;
        }
    }

    bb0: {
        StorageLive(_5);
        StorageLive(_3);
        _3 = Lt(copy _1, copy _2);
        switchInt(move _3) -> [0: bb1, otherwise: bb2];
    }

    bb1: {
        StorageLive(_4);
        _4 = SubUnchecked(copy _1, copy _2);
        _5 = Option::<u32>::Some(move _4);
        StorageDead(_4);
        StorageDead(_3);
        _6 = copy ((_5 as Some).0: u32);
        _7 = do_something(move _6) -> [return: bb3, unwind unreachable];
    }

    bb2: {
        StorageDead(_3);
        goto -> bb3;
    }

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