// MIR for `bar` after built

fn bar(_1: Box<[T]>) -> () {
    debug it => _1;
    let mut _0: ();
    let mut _2: &<[T] as std::ops::Index<usize>>::Output;
    let mut _3: &[T];
    scope 1 {
    }

    bb0: {
        StorageLive(_2);
        StorageLive(_3);
        _3 = &(*_1);
        _2 = <[T] as Index<usize>>::index(move _3, const 0_usize) -> [return: bb1, unwind: bb4];
    }

    bb1: {
        StorageDead(_3);
        PlaceMention((*_2));
        StorageDead(_2);
        _0 = const ();
        drop(_1) -> [return: bb3, unwind: bb5];
    }

    bb2: {
        FakeRead(ForMatchedPlace(None), (*_2));
        unreachable;
    }

    bb3: {
        return;
    }

    bb4 (cleanup): {
        drop(_1) -> [return: bb5, unwind terminate(cleanup)];
    }

    bb5 (cleanup): {
        resume;
    }
}
