]> git.lizzy.rs Git - rust.git/blob - src/test/mir-opt/uninhabited_enum_branching.rs
Simplify Cache wrapper to single type, impl Deref on it, fix all compilation errors...
[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: 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