]> git.lizzy.rs Git - rust.git/blob - src/test/mir-opt/uninhabited_enum_branching.rs
Auto merge of #68506 - tmandry:rollup-kz9d33v, r=tmandry
[rust.git] / src / test / mir-opt / uninhabited_enum_branching.rs
1 enum Empty { }
2
3 // test matching an enum with uninhabited variants
4 enum Test1 {
5     A(Empty),
6     B(Empty),
7     C
8 }
9
10 // test an enum where the discriminants don't match the variant indexes
11 // (the optimization should do nothing here)
12 enum Test2 {
13     D = 4,
14     E = 5,
15 }
16
17 fn main() {
18     match Test1::C {
19         Test1::A(_) => "A(Empty)",
20         Test1::B(_) => "B(Empty)",
21         Test1::C => "C",
22     };
23
24     match Test2::D {
25         Test2::D => "D",
26         Test2::E => "E",
27     };
28 }
29
30 // END RUST SOURCE
31 //
32 // START rustc.main.UninhabitedEnumBranching.before.mir
33 // let mut _0: ();
34 // let _1: &str;
35 // let mut _2: Test1;
36 // let mut _3: isize;
37 // let _4: &str;
38 // let _5: &str;
39 // let _6: &str;
40 // let mut _7: Test2;
41 // let mut _8: isize;
42 // let _9: &str;
43 // bb0: {
44 //   StorageLive(_1);
45 //   StorageLive(_2);
46 //   _2 = Test1::C;
47 //   _3 = discriminant(_2);
48 //   switchInt(move _3) -> [0isize: bb2, 1isize: bb3, otherwise: bb1];
49 // }
50 // bb1: {
51 //   StorageLive(_5);
52 //   _5 = const "C";
53 //   _1 = &(*_5);
54 //   StorageDead(_5);
55 //   goto -> bb4;
56 // }
57 // bb2: {
58 //   _1 = const "A(Empty)";
59 //   goto -> bb4;
60 // }
61 // bb3: {
62 //   StorageLive(_4);
63 //   _4 = const "B(Empty)";
64 //   _1 = &(*_4);
65 //   StorageDead(_4);
66 //   goto -> bb4;
67 // }
68 // bb4: {
69 //   StorageDead(_2);
70 //   StorageDead(_1);
71 //   StorageLive(_6);
72 //   StorageLive(_7);
73 //   _7 = Test2::D;
74 //   _8 = discriminant(_7);
75 //   switchInt(move _8) -> [4isize: bb6, otherwise: bb5];
76 // }
77 // bb5: {
78 //   StorageLive(_9);
79 //   _9 = const "E";
80 //   _6 = &(*_9);
81 //   StorageDead(_9);
82 //   goto -> bb7;
83 // }
84 // bb6: {
85 //   _6 = const "D";
86 //   goto -> bb7;
87 // }
88 // bb7: {
89 //   StorageDead(_7);
90 //   StorageDead(_6);
91 //   _0 = ();
92 //   return;
93 // }
94 // END rustc.main.UninhabitedEnumBranching.before.mir
95 // START rustc.main.UninhabitedEnumBranching.after.mir
96 // let mut _0: ();
97 // let _1: &str;
98 // let mut _2: Test1;
99 // let mut _3: isize;
100 // let _4: &str;
101 // let _5: &str;
102 // let _6: &str;
103 // let mut _7: Test2;
104 // let mut _8: isize;
105 // let _9: &str;
106 // bb0: {
107 //   StorageLive(_1);
108 //   StorageLive(_2);
109 //   _2 = Test1::C;
110 //   _3 = discriminant(_2);
111 //   switchInt(move _3) -> bb1;
112 // }
113 // bb1: {
114 //   StorageLive(_5);
115 //   _5 = const "C";
116 //   _1 = &(*_5);
117 //   StorageDead(_5);
118 //   goto -> bb4;
119 // }
120 // bb2: {
121 //   _1 = const "A(Empty)";
122 //   goto -> bb4;
123 // }
124 // bb3: {
125 //   StorageLive(_4);
126 //   _4 = const "B(Empty)";
127 //   _1 = &(*_4);
128 //   StorageDead(_4);
129 //   goto -> bb4;
130 // }
131 // bb4: {
132 //   StorageDead(_2);
133 //   StorageDead(_1);
134 //   StorageLive(_6);
135 //   StorageLive(_7);
136 //   _7 = Test2::D;
137 //   _8 = discriminant(_7);
138 //   switchInt(move _8) -> [4isize: bb6, otherwise: bb5];
139 // }
140 // bb5: {
141 //   StorageLive(_9);
142 //   _9 = const "E";
143 //   _6 = &(*_9);
144 //   StorageDead(_9);
145 //   goto -> bb7;
146 // }
147 // bb6: {
148 //   _6 = const "D";
149 //   goto -> bb7;
150 // }
151 // bb7: {
152 //   StorageDead(_7);
153 //   StorageDead(_6);
154 //   _0 = ();
155 //   return;
156 // }
157 // END rustc.main.UninhabitedEnumBranching.after.mir
158 // START rustc.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir
159 // let mut _0: ();
160 // let _1: &str;
161 // let mut _2: Test1;
162 // let mut _3: isize;
163 // let _4: &str;
164 // let _5: &str;
165 // let _6: &str;
166 // let mut _7: Test2;
167 // let mut _8: isize;
168 // let _9: &str;
169 // bb0: {
170 //   StorageLive(_1);
171 //   StorageLive(_2);
172 //   _2 = Test1::C;
173 //   _3 = discriminant(_2);
174 //   StorageLive(_5);
175 //   _5 = const "C";
176 //   _1 = &(*_5);
177 //   StorageDead(_5);
178 //   StorageDead(_2);
179 //   StorageDead(_1);
180 //   StorageLive(_6);
181 //   StorageLive(_7);
182 //   _7 = Test2::D;
183 //   _8 = discriminant(_7);
184 //   switchInt(move _8) -> [4isize: bb2, otherwise: bb1];
185 // }
186 // bb1: {
187 //   StorageLive(_9);
188 //   _9 = const "E";
189 //   _6 = &(*_9);
190 //   StorageDead(_9);
191 //   goto -> bb3;
192 // }
193 // bb2: {
194 //   _6 = const "D";
195 //   goto -> bb3;
196 // }
197 // bb3: {
198 //   StorageDead(_7);
199 //   StorageDead(_6);
200 //   _0 = ();
201 //   return;
202 // }
203 // END rustc.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir