// compile-flags: -Zmir-opt-level=0

fn main() {
    let _fn = std::ptr::drop_in_place::<[String]> as unsafe fn(_);
}

// END RUST SOURCE

// START rustc.ptr-real_drop_in_place.[std__string__String].AddMovesForPackedDrops.before.mir
// let mut _2: usize;
// let mut _3: usize;
// let mut _4: usize;
// let mut _5: &mut std::string::String;
// let mut _6: bool;
// let mut _7: &mut std::string::String;
// let mut _8: bool;
// let mut _9: *mut std::string::String;
// let mut _10: *mut std::string::String;
// let mut _11: &mut std::string::String;
// let mut _12: bool;
// let mut _13: &mut std::string::String;
// let mut _14: bool;
// let mut _15: *mut [std::string::String];
// bb0: {
//     goto -> bb15;
// }
// bb1: {
//     return;
// }
// bb2 (cleanup): {
//     resume;
// }
// bb3 (cleanup): {
//     _5 = &mut (*_1)[_4];
//     _4 = Add(move _4, const 1usize);
//     drop((*_5)) -> bb4;
// }
// bb4 (cleanup): {
//     _6 = Eq(_4, _3);
//     switchInt(move _6) -> [false: bb3, otherwise: bb2];
// }
// bb5: {
//     _7 = &mut (*_1)[_4];
//     _4 = Add(move _4, const 1usize);
//     drop((*_7)) -> [return: bb6, unwind: bb4];
// }
// bb6: {
//     _8 = Eq(_4, _3);
//     switchInt(move _8) -> [false: bb5, otherwise: bb1];
// }
// bb7: {
//     _4 = const 0usize;
//     goto -> bb6;
// }
// bb8: {
//     goto -> bb7;
// }
// bb9 (cleanup): {
//     _11 = &mut (*_9);
//     _9 = Offset(move _9, const 1usize);
//     drop((*_11)) -> bb10;
// }
// bb10 (cleanup): {
//     _12 = Eq(_9, _10);
//     switchInt(move _12) -> [false: bb9, otherwise: bb2];
// }
// bb11: {
//     _13 = &mut (*_9);
//     _9 = Offset(move _9, const 1usize);
//     drop((*_13)) -> [return: bb12, unwind: bb10];
// }
// bb12: {
//     _14 = Eq(_9, _10);
//     switchInt(move _14) -> [false: bb11, otherwise: bb1];
// }
// bb13: {
//     _15 = &mut (*_1);
//     _9 = move _15 as *mut std::string::String (Misc);
//     _10 = Offset(_9, move _3);
//     goto -> bb12;
// }
// bb14: {
//     goto -> bb13;
// }
// bb15: {
//     _2 = SizeOf(std::string::String);
//     _3 = Len((*_1));
//     switchInt(move _2) -> [0usize: bb8, otherwise: bb14];
// }
// END rustc.ptr-real_drop_in_place.[std__string__String].AddMovesForPackedDrops.before.mir
