]>
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: bb2, 1isize: bb3, otherwise: bb5];
53 // bb2: { // pre_binding3 and arm3
54 // _1 = (const 3i32, const 3i32);
58 // falseEdges -> [real: bb6, imaginary: bb4]; //pre_binding1
61 // falseEdges -> [real: bb10, imaginary: bb2]; //pre_binding2
66 // bb6: { // binding1 and guard
68 // _11 = const full_tested_match::promoted[0];
69 // _6 = &(((*_11) as Some).0: i32);
72 // _7 = const guard() -> [return: bb7, unwind: bb1];
74 // bb7: { // end of guard
75 // switchInt(move _7) -> [false: bb9, otherwise: bb8];
79 // FakeRead(ForMatchGuard, _4);
80 // FakeRead(ForGuardBinding, _6);
82 // _5 = ((_2 as Some).0: i32);
85 // _1 = (const 1i32, move _8);
91 // bb9: { // to pre_binding2
98 // _9 = ((_2 as Some).0: i32);
101 // _1 = (const 2i32, move _10);
112 // END rustc.full_tested_match.PromoteTemps.after.mir
114 // START rustc.full_tested_match2.PromoteTemps.before.mir
117 // _2 = std::option::Option::<i32>::Some(const 42i32,);
118 // FakeRead(ForMatchedPlace, _2);
119 // _3 = discriminant(_2);
120 // switchInt(move _3) -> [0isize: bb2, 1isize: bb3, otherwise: bb5];
125 // bb2: { // pre_binding2
126 // falseEdges -> [real: bb10, imaginary: bb4];
128 // bb3: { // pre_binding1
129 // falseEdges -> [real: bb6, imaginary: bb2];
131 // bb4: { // binding3 and arm3
133 // _9 = ((_2 as Some).0: i32);
136 // _1 = (const 2i32, move _10);
146 // _6 = &((_2 as Some).0: i32);
149 // _7 = const guard() -> [return: bb7, unwind: bb1];
151 // bb7: { // end of guard
152 // switchInt(move _7) -> [false: bb9, otherwise: bb8];
156 // FakeRead(ForMatchGuard, _4);
157 // FakeRead(ForGuardBinding, _6);
159 // _5 = ((_2 as Some).0: i32);
162 // _1 = (const 1i32, move _8);
168 // bb9: { // to pre_binding3 (can skip 2 since this is `Some`)
171 // falseEdges -> [real: bb4, imaginary: bb2];
174 // _1 = (const 3i32, const 3i32);
183 // END rustc.full_tested_match2.PromoteTemps.before.mir
185 // START rustc.main.PromoteTemps.before.mir
188 // _2 = std::option::Option::<i32>::Some(const 1i32,);
189 // FakeRead(ForMatchedPlace, _2);
190 // _4 = discriminant(_2);
191 // switchInt(move _4) -> [1isize: bb3, otherwise: bb2];
197 // falseEdges -> [real: bb10, imaginary: bb5];
200 // falseEdges -> [real: bb6, imaginary: bb2];
210 // falseEdges -> [real: bb11, imaginary: bb4];
212 // bb6: { //end of guard1
214 // _7 = &((_2 as Some).0: i32);
217 // _8 = const guard() -> [return: bb7, unwind: bb1];
220 // switchInt(move _8) -> [false: bb9, otherwise: bb8];
224 // FakeRead(ForMatchGuard, _5);
225 // FakeRead(ForGuardBinding, _7);
227 // _6 = ((_2 as Some).0: i32);
236 // falseEdges -> [real: bb2, imaginary: bb2];
238 // bb10: { // binding2 & arm2
245 // bb11: { // binding3: Some(y) if guard2(y)
247 // _11 = &((_2 as Some).0: i32);
252 // _12 = const guard2(move _13) -> [return: bb12, unwind: bb1];
254 // bb12: { // end of guard2
256 // switchInt(move _12) -> [false: bb14, otherwise: bb13];
258 // bb13: { // binding4 & arm4
260 // FakeRead(ForMatchGuard, _5);
261 // FakeRead(ForGuardBinding, _11);
263 // _10 = ((_2 as Some).0: i32);
272 // falseEdges -> [real: bb4, imaginary: bb4];
280 // END rustc.main.PromoteTemps.before.mir