Skip to content

Commit 3d45470

Browse files
committed
FileCheck while_storage.
1 parent 50be229 commit 3d45470

6 files changed

+200
-53
lines changed

Diff for: tests/mir-opt/building/while_storage.rs

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
2+
// Test that we correctly generate StorageDead statements for while loop
3+
// conditions on all branches
4+
// compile-flags: -Zmir-opt-level=0
5+
6+
fn get_bool(c: bool) -> bool {
7+
c
8+
}
9+
10+
// EMIT_MIR while_storage.while_loop.PreCodegen.after.mir
11+
fn while_loop(c: bool) {
12+
// CHECK-LABEL: fn while_loop(
13+
// CHECK: bb0: {
14+
// CHECK-NEXT: goto -> bb1;
15+
// CHECK: bb1: {
16+
// CHECK-NEXT: StorageLive(_3);
17+
// CHECK-NEXT: StorageLive(_2);
18+
// CHECK-NEXT: _2 = _1;
19+
// CHECK-NEXT: _3 = get_bool(move _2) -> [return: bb2, unwind
20+
// CHECK: bb2: {
21+
// CHECK-NEXT: switchInt(move _3) -> [0: bb3, otherwise: bb4];
22+
// CHECK: bb3: {
23+
// CHECK-NEXT: StorageDead(_2);
24+
// CHECK-NEXT: StorageLive(_9);
25+
// CHECK-NEXT: _0 = const ();
26+
// CHECK-NEXT: StorageDead(_9);
27+
// CHECK-NEXT: goto -> bb8;
28+
// CHECK: bb4: {
29+
// CHECK-NEXT: StorageDead(_2);
30+
// CHECK-NEXT: StorageLive(_5);
31+
// CHECK-NEXT: StorageLive(_4);
32+
// CHECK-NEXT: _4 = _1;
33+
// CHECK-NEXT: _5 = get_bool(move _4) -> [return: bb5, unwind
34+
// CHECK: bb5: {
35+
// CHECK-NEXT: switchInt(move _5) -> [0: bb6, otherwise: bb7];
36+
// CHECK: bb6: {
37+
// CHECK-NEXT: StorageDead(_4);
38+
// CHECK-NEXT: _6 = const ();
39+
// CHECK-NEXT: StorageDead(_5);
40+
// CHECK-NEXT: StorageDead(_3);
41+
// CHECK-NEXT: goto -> bb1;
42+
// CHECK: bb7: {
43+
// CHECK-NEXT: StorageDead(_4);
44+
// CHECK-NEXT: _0 = const ();
45+
// CHECK-NEXT: StorageDead(_5);
46+
// CHECK-NEXT: goto -> bb8;
47+
// CHECK: bb8: {
48+
// CHECK-NEXT: StorageDead(_3);
49+
// CHECK-NEXT: return;
50+
51+
while get_bool(c) {
52+
if get_bool(c) {
53+
break;
54+
}
55+
}
56+
}
57+
58+
fn main() {
59+
while_loop(false);
60+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
// MIR for `while_loop` after PreCodegen
2+
3+
fn while_loop(_1: bool) -> () {
4+
debug c => _1;
5+
let mut _0: ();
6+
let mut _2: bool;
7+
let mut _3: bool;
8+
let mut _4: bool;
9+
let mut _5: bool;
10+
let mut _6: ();
11+
let mut _7: !;
12+
let mut _8: !;
13+
let _9: ();
14+
let mut _10: !;
15+
16+
bb0: {
17+
goto -> bb1;
18+
}
19+
20+
bb1: {
21+
StorageLive(_3);
22+
StorageLive(_2);
23+
_2 = _1;
24+
_3 = get_bool(move _2) -> [return: bb2, unwind unreachable];
25+
}
26+
27+
bb2: {
28+
switchInt(move _3) -> [0: bb3, otherwise: bb4];
29+
}
30+
31+
bb3: {
32+
StorageDead(_2);
33+
StorageLive(_9);
34+
_0 = const ();
35+
StorageDead(_9);
36+
goto -> bb8;
37+
}
38+
39+
bb4: {
40+
StorageDead(_2);
41+
StorageLive(_5);
42+
StorageLive(_4);
43+
_4 = _1;
44+
_5 = get_bool(move _4) -> [return: bb5, unwind unreachable];
45+
}
46+
47+
bb5: {
48+
switchInt(move _5) -> [0: bb6, otherwise: bb7];
49+
}
50+
51+
bb6: {
52+
StorageDead(_4);
53+
_6 = const ();
54+
StorageDead(_5);
55+
StorageDead(_3);
56+
goto -> bb1;
57+
}
58+
59+
bb7: {
60+
StorageDead(_4);
61+
_0 = const ();
62+
StorageDead(_5);
63+
goto -> bb8;
64+
}
65+
66+
bb8: {
67+
StorageDead(_3);
68+
return;
69+
}
70+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
// MIR for `while_loop` after PreCodegen
2+
3+
fn while_loop(_1: bool) -> () {
4+
debug c => _1;
5+
let mut _0: ();
6+
let mut _2: bool;
7+
let mut _3: bool;
8+
let mut _4: bool;
9+
let mut _5: bool;
10+
let mut _6: ();
11+
let mut _7: !;
12+
let mut _8: !;
13+
let _9: ();
14+
let mut _10: !;
15+
16+
bb0: {
17+
goto -> bb1;
18+
}
19+
20+
bb1: {
21+
StorageLive(_3);
22+
StorageLive(_2);
23+
_2 = _1;
24+
_3 = get_bool(move _2) -> [return: bb2, unwind continue];
25+
}
26+
27+
bb2: {
28+
switchInt(move _3) -> [0: bb3, otherwise: bb4];
29+
}
30+
31+
bb3: {
32+
StorageDead(_2);
33+
StorageLive(_9);
34+
_0 = const ();
35+
StorageDead(_9);
36+
goto -> bb8;
37+
}
38+
39+
bb4: {
40+
StorageDead(_2);
41+
StorageLive(_5);
42+
StorageLive(_4);
43+
_4 = _1;
44+
_5 = get_bool(move _4) -> [return: bb5, unwind continue];
45+
}
46+
47+
bb5: {
48+
switchInt(move _5) -> [0: bb6, otherwise: bb7];
49+
}
50+
51+
bb6: {
52+
StorageDead(_4);
53+
_6 = const ();
54+
StorageDead(_5);
55+
StorageDead(_3);
56+
goto -> bb1;
57+
}
58+
59+
bb7: {
60+
StorageDead(_4);
61+
_0 = const ();
62+
StorageDead(_5);
63+
goto -> bb8;
64+
}
65+
66+
bb8: {
67+
StorageDead(_3);
68+
return;
69+
}
70+
}

Diff for: tests/mir-opt/while_storage.rs

-21
This file was deleted.

Diff for: tests/mir-opt/while_storage.while_loop.PreCodegen.after.panic-abort.mir

-16
This file was deleted.

Diff for: tests/mir-opt/while_storage.while_loop.PreCodegen.after.panic-unwind.mir

-16
This file was deleted.

0 commit comments

Comments
 (0)