// MIR for `foo` after built fn foo(_1: Box<[T]>) -> T { debug it => _1; let mut _0: T; let _2: T; let mut _3: &T; let _4: usize; let mut _5: usize; let mut _6: bool; scope 1 { debug f => _2; } bb0: { StorageLive(_2); StorageLive(_3); StorageLive(_4); _4 = const 0_usize; _5 = Len((*_1)); _6 = Lt(_4, _5); assert(move _6, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind: bb5]; } bb1: { _3 = &(*_1)[_4]; _2 = ::clone(move _3) -> [return: bb2, unwind: bb5]; } bb2: { StorageDead(_3); FakeRead(ForLet(None), _2); StorageDead(_4); _0 = move _2; drop(_2) -> [return: bb3, unwind: bb5]; } bb3: { StorageDead(_2); drop(_1) -> [return: bb4, unwind: bb6]; } bb4: { return; } bb5 (cleanup): { drop(_1) -> [return: bb6, unwind terminate (panic in a destructor during cleanup)]; } bb6 (cleanup): { resume; } }