// MIR for `ezmap` after runtime-optimized

fn ezmap(_1: Option<i32>) -> Option<i32> {
    debug x => _1;
    let mut _0: std::option::Option<i32>;
    scope 1 (inlined map::<i32, i32, {closure@$DIR/simple_option_map.rs:23:12: 23:15}>) {
        let mut _2: isize;
        let _3: i32;
        let mut _4: i32;
        scope 2 {
            scope 3 (inlined ezmap::{closure#0}) {
            }
        }
    }

    bb0: {
        StorageLive(_2);
        _2 = discriminant(_1);
        switchInt(move _2) -> [0: bb1, 1: bb2, otherwise: bb4];
    }

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

    bb2: {
        StorageLive(_3);
        _3 = copy ((_1 as Some).0: i32);
        StorageLive(_4);
        _4 = Add(copy _3, const 1_i32);
        _0 = Option::<i32>::Some(move _4);
        StorageDead(_4);
        StorageDead(_3);
        goto -> bb3;
    }

    bb3: {
        StorageDead(_2);
        return;
    }

    bb4: {
        unreachable;
    }
}

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