// check that we don't forget to drop the Box if we early return before
// initializing it
// ignore-tidy-linelength
// ignore-wasm32-bare compiled with panic=abort by default

#![feature(box_syntax)]

fn test() -> Option<Box<u32>> {
    Some(box (None?))
}

fn main() {
    test();
}

// END RUST SOURCE
// START rustc.test.ElaborateDrops.before.mir
// fn test() -> std::option::Option<std::boxed::Box<u32>> {
//     ...
//     bb0: {
//         StorageLive(_1);
//         StorageLive(_2);
//         _2 = Box(u32);
//         StorageLive(_3);
//         StorageLive(_4);
//         _4 = std::option::Option::<u32>::None;
//         _3 = const <std::option::Option<u32> as std::ops::Try>::into_result(move _4) -> [return: bb2, unwind: bb3];
//     }
//     bb1 (cleanup): {
//         resume;
//     }
//     bb2: {
//         StorageDead(_4);
//         _5 = discriminant(_3);
//         switchInt(move _5) -> [0isize: bb10, 1isize: bb5, otherwise: bb4];
//     }
//     bb3 (cleanup): {
//         drop(_2) -> bb1;
//     }
//     bb4: {
//         unreachable;
//     }
//     bb5: {
//         StorageLive(_6);
//         _6 = ((_3 as Err).0: std::option::NoneError);
//         StorageLive(_8);
//         StorageLive(_9);
//         _9 = _6;
//         _8 = const <std::option::NoneError as std::convert::From<std::option::NoneError>>::from(move _9) -> [return: bb7, unwind: bb3];
//     }
//     bb6: {
//         return;
//     }
//     bb7: {
//         StorageDead(_9);
//         _0 = const <std::option::Option<std::boxed::Box<u32>> as std::ops::Try>::from_error(move _8) -> [return: bb8, unwind: bb3];
//     }
//     bb8: {
//         StorageDead(_8);
//         StorageDead(_6);
//         drop(_2) -> bb9;
//     }
//     bb9: {
//         StorageDead(_2);
//         StorageDead(_1);
//         StorageDead(_3);
//         goto -> bb6;
//     }
//     bb10: {
//         StorageLive(_10);
//         _10 = ((_3 as Ok).0: u32);
//         (*_2) = _10;
//         StorageDead(_10);
//         _1 = move _2;
//         drop(_2) -> [return: bb12, unwind: bb11];
//     }
//     bb11 (cleanup): {
//         drop(_1) -> bb1;
//     }
//     bb12: {
//         StorageDead(_2);
//         _0 = std::option::Option::<std::boxed::Box<u32>>::Some(move _1,);
//         drop(_1) -> bb13;
//     }
//     bb13: {
//         StorageDead(_1);
//         StorageDead(_3);
//         goto -> bb6;
//     }
// }
// END rustc.test.ElaborateDrops.before.mir
