]> git.proxmox.com Git - rustc.git/blob - src/test/mir-opt/uninhabited_enum_branching.rs
New upstream version 1.41.1+dfsg1
[rustc.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: bb3, 1isize: bb4, 2isize: bb1, otherwise: bb2];
49 // }
50 // bb1: {
51 // StorageLive(_5);
52 // _5 = const "C";
53 // _1 = &(*_5);
54 // StorageDead(_5);
55 // goto -> bb5;
56 // }
57 // bb2: {
58 // unreachable;
59 // }
60 // bb3: {
61 // _1 = const "A(Empty)";
62 // goto -> bb5;
63 // }
64 // bb4: {
65 // StorageLive(_4);
66 // _4 = const "B(Empty)";
67 // _1 = &(*_4);
68 // StorageDead(_4);
69 // goto -> bb5;
70 // }
71 // bb5: {
72 // StorageDead(_2);
73 // StorageDead(_1);
74 // StorageLive(_6);
75 // StorageLive(_7);
76 // _7 = Test2::D;
77 // _8 = discriminant(_7);
78 // switchInt(move _8) -> [4isize: bb8, 5isize: bb6, otherwise: bb7];
79 // }
80 // bb6: {
81 // StorageLive(_9);
82 // _9 = const "E";
83 // _6 = &(*_9);
84 // StorageDead(_9);
85 // goto -> bb9;
86 // }
87 // bb7: {
88 // unreachable;
89 // }
90 // bb8: {
91 // _6 = const "D";
92 // goto -> bb9;
93 // }
94 // bb9: {
95 // StorageDead(_7);
96 // StorageDead(_6);
97 // _0 = ();
98 // return;
99 // }
100 // END rustc.main.UninhabitedEnumBranching.before.mir
101 // START rustc.main.UninhabitedEnumBranching.after.mir
102 // let mut _0: ();
103 // let _1: &str;
104 // let mut _2: Test1;
105 // let mut _3: isize;
106 // let _4: &str;
107 // let _5: &str;
108 // let _6: &str;
109 // let mut _7: Test2;
110 // let mut _8: isize;
111 // let _9: &str;
112 // bb0: {
113 // StorageLive(_1);
114 // StorageLive(_2);
115 // _2 = Test1::C;
116 // _3 = discriminant(_2);
117 // switchInt(move _3) -> [2isize: bb1, otherwise: bb2];
118 // }
119 // bb1: {
120 // StorageLive(_5);
121 // _5 = const "C";
122 // _1 = &(*_5);
123 // StorageDead(_5);
124 // goto -> bb5;
125 // }
126 // bb2: {
127 // unreachable;
128 // }
129 // bb3: {
130 // _1 = const "A(Empty)";
131 // goto -> bb5;
132 // }
133 // bb4: {
134 // StorageLive(_4);
135 // _4 = const "B(Empty)";
136 // _1 = &(*_4);
137 // StorageDead(_4);
138 // goto -> bb5;
139 // }
140 // bb5: {
141 // StorageDead(_2);
142 // StorageDead(_1);
143 // StorageLive(_6);
144 // StorageLive(_7);
145 // _7 = Test2::D;
146 // _8 = discriminant(_7);
147 // switchInt(move _8) -> [4isize: bb8, 5isize: bb6, otherwise: bb7];
148 // }
149 // bb6: {
150 // StorageLive(_9);
151 // _9 = const "E";
152 // _6 = &(*_9);
153 // StorageDead(_9);
154 // goto -> bb9;
155 // }
156 // bb7: {
157 // unreachable;
158 // }
159 // bb8: {
160 // _6 = const "D";
161 // goto -> bb9;
162 // }
163 // bb9: {
164 // StorageDead(_7);
165 // StorageDead(_6);
166 // _0 = ();
167 // return;
168 // }
169 // END rustc.main.UninhabitedEnumBranching.after.mir
170 // START rustc.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir
171 // let mut _0: ();
172 // let _1: &str;
173 // let mut _2: Test1;
174 // let mut _3: isize;
175 // let _4: &str;
176 // let _5: &str;
177 // let _6: &str;
178 // let mut _7: Test2;
179 // let mut _8: isize;
180 // let _9: &str;
181 // bb0: {
182 // StorageLive(_1);
183 // StorageLive(_2);
184 // _2 = Test1::C;
185 // _3 = discriminant(_2);
186 // switchInt(move _3) -> [2isize: bb1, otherwise: bb2];
187 // }
188 // bb1: {
189 // StorageLive(_5);
190 // _5 = const "C";
191 // _1 = &(*_5);
192 // StorageDead(_5);
193 // StorageDead(_2);
194 // StorageDead(_1);
195 // StorageLive(_6);
196 // StorageLive(_7);
197 // _7 = Test2::D;
198 // _8 = discriminant(_7);
199 // switchInt(move _8) -> [4isize: bb5, 5isize: bb3, otherwise: bb4];
200 // }
201 // bb2: {
202 // unreachable;
203 // }
204 // bb3: {
205 // StorageLive(_9);
206 // _9 = const "E";
207 // _6 = &(*_9);
208 // StorageDead(_9);
209 // goto -> bb6;
210 // }
211 // bb4: {
212 // unreachable;
213 // }
214 // bb5: {
215 // _6 = const "D";
216 // goto -> bb6;
217 // }
218 // bb6: {
219 // StorageDead(_7);
220 // StorageDead(_6);
221 // _0 = ();
222 // return;
223 // }
224 // END rustc.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir