]> git.lizzy.rs Git - rust.git/blob - src/test/mir-opt/issue-62289.rs
Auto merge of #59953 - eddyb:soa-metadata, r=michaelwoerister
[rust.git] / src / test / mir-opt / issue-62289.rs
1 // check that we don't forget to drop the Box if we early return before
2 // initializing it
3 // ignore-tidy-linelength
4 // ignore-emscripten compiled with panic=abort by default
5
6 #![feature(box_syntax)]
7
8 fn test() -> Option<Box<u32>> {
9     Some(box (None?))
10 }
11
12 fn main() {
13     test();
14 }
15
16 // END RUST SOURCE
17 // START rustc.test.ElaborateDrops.before.mir
18 // fn test() -> std::option::Option<std::boxed::Box<u32>> {
19 //     ...
20 //     bb0: {
21 //         StorageLive(_1);
22 //         StorageLive(_2);
23 //         _2 = Box(u32);
24 //         StorageLive(_3);
25 //         StorageLive(_4);
26 //         _4 = std::option::Option::<u32>::None;
27 //         _3 = const <std::option::Option<u32> as std::ops::Try>::into_result(move _4) -> [return: bb2, unwind: bb3];
28 //     }
29 //     bb1 (cleanup): {
30 //         resume;
31 //     }
32 //     bb2: {
33 //         StorageDead(_4);
34 //         _5 = discriminant(_3);
35 //         switchInt(move _5) -> [0isize: bb10, 1isize: bb5, otherwise: bb4];
36 //     }
37 //     bb3 (cleanup): {
38 //         drop(_2) -> bb1;
39 //     }
40 //     bb4: {
41 //         unreachable;
42 //     }
43 //     bb5: {
44 //         StorageLive(_6);
45 //         _6 = ((_3 as Err).0: std::option::NoneError);
46 //         StorageLive(_8);
47 //         StorageLive(_9);
48 //         _9 = _6;
49 //         _8 = const <std::option::NoneError as std::convert::From<std::option::NoneError>>::from(move _9) -> [return: bb7, unwind: bb3];
50 //     }
51 //     bb6: {
52 //         return;
53 //     }
54 //     bb7: {
55 //         StorageDead(_9);
56 //         _0 = const <std::option::Option<std::boxed::Box<u32>> as std::ops::Try>::from_error(move _8) -> [return: bb8, unwind: bb3];
57 //     }
58 //     bb8: {
59 //         StorageDead(_8);
60 //         StorageDead(_6);
61 //         drop(_2) -> bb9;
62 //     }
63 //     bb9: {
64 //         StorageDead(_2);
65 //         StorageDead(_1);
66 //         StorageDead(_3);
67 //         goto -> bb6;
68 //     }
69 //     bb10: {
70 //         StorageLive(_10);
71 //         _10 = ((_3 as Ok).0: u32);
72 //         (*_2) = _10;
73 //         StorageDead(_10);
74 //         _1 = move _2;
75 //         drop(_2) -> [return: bb12, unwind: bb11];
76 //     }
77 //     bb11 (cleanup): {
78 //         drop(_1) -> bb1;
79 //     }
80 //     bb12: {
81 //         StorageDead(_2);
82 //         _0 = std::option::Option::<std::boxed::Box<u32>>::Some(move _1,);
83 //         drop(_1) -> bb13;
84 //     }
85 //     bb13: {
86 //         StorageDead(_1);
87 //         StorageDead(_3);
88 //         goto -> bb6;
89 //     }
90 // }
91 // END rustc.test.ElaborateDrops.before.mir