// WARNING: This is highly experimental output it's intended for rustc_public developers only.
// If you find a bug or want to improve the output open a issue at https://github.com/rust-lang/project-stable-mir.
fn foo(_1: i32) -> i32 {
    let mut _0: i32;
    let mut _2: i32;
    let mut _3: (i32, bool);
    debug i => _1;
    bb0: {
        StorageLive(_2);
        _2 = _1;
        _3 = CheckedAdd(_2, 1_i32);
        assert(!move (_3.1: bool), "attempt to compute `{} + {}`, which would overflow", move _2, 1_i32) -> [success: bb1, unwind continue];
    }
    bb1: {
        _0 = move (_3.0: i32);
        StorageDead(_2);
        return;
    }
}
fn bar(_1: &mut Vec<i32>) -> Vec<i32> {
    let mut _0: Vec<i32>;
    let mut _2: Vec<i32>;
    let mut _3: &Vec<i32>;
    let  _4: ();
    let mut _5: &mut Vec<i32>;
    debug vec => _1;
    debug new_vec => _2;
    bb0: {
        StorageLive(_2);
        StorageLive(_3);
        _3 = &(*_1);
        _2 = <Vec<i32> as Clone>::clone(move _3) -> [return: bb1, unwind continue];
    }
    bb1: {
        StorageDead(_3);
        StorageLive(_4);
        StorageLive(_5);
        _5 = &mut _2;
        _4 = Vec::<i32>::push(move _5, 1_i32) -> [return: bb2, unwind: bb3];
    }
    bb2: {
        StorageDead(_5);
        StorageDead(_4);
        _0 = move _2;
        StorageDead(_2);
        return;
    }
    bb3: {
        drop(_2) -> [return: bb4, unwind terminate];
    }
    bb4: {
        resume;
    }
}
fn demux(_1: u8) -> u8 {
    let mut _0: u8;
    debug input => _1;
    bb0: {
        switchInt(_1) -> [0: bb4, 1: bb3, 2: bb2, otherwise: bb1];
    }
    bb1: {
        _0 = 0_u8;
        goto -> bb5;
    }
    bb2: {
        _0 = 8_u8;
        goto -> bb5;
    }
    bb3: {
        _0 = 6_u8;
        goto -> bb5;
    }
    bb4: {
        _0 = 10_u8;
        goto -> bb5;
    }
    bb5: {
        return;
    }
}
fn main() -> () {
    let mut _0: ();
    bb0: {
        _0 = ();
        return;
    }
}
