]>
git.proxmox.com Git - rustc.git/blob - src/test/mir-opt/match_false_edges.rs
1 // compile-flags: -Z borrowck=mir
7 fn guard2(_
:i32) -> bool
{
11 // no_mangle to make sure this gets instantiated even in an executable.
13 pub fn full_tested_match() {
14 let _
= match Some(42) {
15 Some(x
) if guard() => (1, x
),
21 // no_mangle to make sure this gets instantiated even in an executable.
23 pub fn full_tested_match2() {
24 let _
= match Some(42) {
25 Some(x
) if guard() => (1, x
),
32 let _
= match Some(1) {
33 Some(_w
) if guard() => 1,
35 Some(y
) if guard2(y
) => 3,
42 // START rustc.full_tested_match.PromoteTemps.after.mir
45 // _2 = std::option::Option::<i32>::Some(const 42i32,);
46 // FakeRead(ForMatchedPlace, _2);
47 // _3 = discriminant(_2);
48 // switchInt(move _3) -> [0isize: bb4, 1isize: bb2, otherwise: bb5];
54 // falseEdges -> [real: bb6, imaginary: bb3]; //pre_binding1
57 // falseEdges -> [real: bb10, imaginary: bb4]; //pre_binding2
59 // bb4: { //pre_binding3 and arm3
60 // _1 = (const 3i32, const 3i32);
66 // bb6: { // binding1 and guard
68 // _6 = &(((promoted[0]: std::option::Option<i32>) as Some).0: i32);
71 // _7 = const guard() -> [return: bb7, unwind: bb1];
73 // bb7: { // end of guard
74 // switchInt(move _7) -> [false: bb9, otherwise: bb8];
78 // FakeRead(ForMatchGuard, _4);
79 // FakeRead(ForGuardBinding, _6);
81 // _5 = ((_2 as Some).0: i32);
84 // _1 = (const 1i32, move _8);
90 // bb9: { // to pre_binding2
97 // _9 = ((_2 as Some).0: i32);
100 // _1 = (const 2i32, move _10);
111 // END rustc.full_tested_match.PromoteTemps.after.mir
113 // START rustc.full_tested_match2.PromoteTemps.before.mir
116 // _2 = std::option::Option::<i32>::Some(const 42i32,);
117 // FakeRead(ForMatchedPlace, _2);
118 // _3 = discriminant(_2);
119 // switchInt(move _3) -> [0isize: bb3, 1isize: bb2, otherwise: bb4];
125 // falseEdges -> [real: bb5, imaginary: bb3];
128 // falseEdges -> [real: bb9, imaginary: bb10];
130 // bb4: { // to arm3 (can skip 2 since this is `Some`)
133 // bb5: { // binding1 and guard
135 // _6 = &((_2 as Some).0: i32);
138 // _7 = const guard() -> [return: bb6, unwind: bb1];
140 // bb6: { // end of guard
141 // switchInt(move _7) -> [false: bb8, otherwise: bb7];
145 // FakeRead(ForMatchGuard, _4);
146 // FakeRead(ForGuardBinding, _6);
148 // _5 = ((_2 as Some).0: i32);
151 // _1 = (const 1i32, move _8);
157 // bb8: { // to pre_binding3 (can skip 2 since this is `Some`)
160 // falseEdges -> [real: bb10, imaginary: bb3];
163 // _1 = (const 3i32, const 3i32);
166 // bb10: { // binding3 and arm3
168 // _9 = ((_2 as Some).0: i32);
171 // _1 = (const 2i32, move _10);
182 // END rustc.full_tested_match2.PromoteTemps.before.mir
184 // START rustc.main.PromoteTemps.before.mir
187 // _2 = std::option::Option::<i32>::Some(const 1i32,);
188 // FakeRead(ForMatchedPlace, _2);
189 // _4 = discriminant(_2);
190 // switchInt(move _4) -> [1isize: bb2, otherwise: bb3];
196 // falseEdges -> [real: bb5, imaginary: bb3];
199 // falseEdges -> [real: bb9, imaginary: bb4];
202 // falseEdges -> [real: bb10, imaginary: bb14];
206 // _7 = &((_2 as Some).0: i32);
209 // _8 = const guard() -> [return: bb6, unwind: bb1];
211 // bb6: { //end of guard1
212 // switchInt(move _8) -> [false: bb8, otherwise: bb7];
216 // FakeRead(ForMatchGuard, _5);
217 // FakeRead(ForGuardBinding, _7);
219 // _6 = ((_2 as Some).0: i32);
228 // falseEdges -> [real: bb3, imaginary: bb3];
230 // bb9: { // binding2 & arm2
237 // bb10: { // binding3: Some(y) if guard2(y)
239 // _11 = &((_2 as Some).0: i32);
244 // _12 = const guard2(move _13) -> [return: bb11, unwind: bb1];
246 // bb11: { // end of guard2
248 // switchInt(move _12) -> [false: bb13, otherwise: bb12];
250 // bb12: { // binding4 & arm4
252 // FakeRead(ForMatchGuard, _5);
253 // FakeRead(ForGuardBinding, _11);
255 // _10 = ((_2 as Some).0: i32);
264 // falseEdges -> [real: bb14, imaginary: bb14];
279 // END rustc.main.PromoteTemps.before.mir