Don't try to save an extra block · rust-lang/rust@8a222ff (original) (raw)
File tree
15 files changed
lines changed
- compiler/rustc_mir_build/src/build/matches
15 files changed
lines changed
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -2021,19 +2021,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> { | ||
2021 | 2021 | |
2022 | 2022 | // The block that we should branch to if none of the |
2023 | 2023 | // `target_candidates` match. |
2024 | -let remainder_start = if !remaining_candidates.is_empty() { | |
2025 | -let remainder_start = self.cfg.start_new_block(); | |
2026 | -self.match_candidates( | |
2027 | - span, | |
2028 | - scrutinee_span, | |
2029 | - remainder_start, | |
2030 | - otherwise_block, | |
2031 | - remaining_candidates, | |
2032 | -); | |
2033 | - remainder_start | |
2034 | -} else { | |
2035 | - otherwise_block | |
2036 | -}; | |
2024 | +let remainder_start = self.cfg.start_new_block(); | |
2037 | 2025 | |
2038 | 2026 | // For each outcome of test, process the candidates that still apply. |
2039 | 2027 | let target_blocks: FxIndexMap<_, _> = target_candidates |
@@ -2061,6 +2049,14 @@ impl<'a, 'tcx> Builder<'a, 'tcx> { | ||
2061 | 2049 | &test, |
2062 | 2050 | target_blocks, |
2063 | 2051 | ); |
2052 | + | |
2053 | +self.match_candidates( | |
2054 | + span, | |
2055 | + scrutinee_span, | |
2056 | + remainder_start, | |
2057 | + otherwise_block, | |
2058 | + remaining_candidates, | |
2059 | +); | |
2064 | 2060 | } |
2065 | 2061 | } |
2066 | 2062 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -27,13 +27,13 @@ fn main() -> () { | ||
27 | 27 | StorageLive(_5); |
28 | 28 | PlaceMention(_1); |
29 | 29 | _6 = discriminant(_1); |
30 | -switchInt(move _6) -> [1: bb4, otherwise: bb3]; | |
30 | +switchInt(move _6) -> [1: bb5, otherwise: bb4]; | |
31 | 31 | } |
32 | 32 | |
33 | 33 | bb1: { |
34 | 34 | StorageLive(_3); |
35 | 35 | StorageLive(_4); |
36 | -_4 = begin_panic::<&str>(const "explicit panic") -> bb8; | |
36 | +_4 = begin_panic::<&str>(const "explicit panic") -> bb9; | |
37 | 37 | } |
38 | 38 | |
39 | 39 | bb2: { |
@@ -43,31 +43,35 @@ fn main() -> () { | ||
43 | 43 | } |
44 | 44 | |
45 | 45 | bb3: { |
46 | -goto -> bb7; | |
46 | +goto -> bb8; | |
47 | 47 | } |
48 | 48 | |
49 | 49 | bb4: { |
50 | -falseEdge -> [real: bb6, imaginary: bb3]; | |
50 | +goto -> bb3; | |
51 | 51 | } |
52 | 52 | |
53 | 53 | bb5: { |
54 | -goto -> bb3; | |
54 | +falseEdge -> [real: bb7, imaginary: bb3]; | |
55 | 55 | } |
56 | 56 | |
57 | 57 | bb6: { |
58 | +goto -> bb4; | |
59 | +} | |
60 | + | |
61 | +bb7: { | |
58 | 62 | _5 = ((_1 as Some).0: u8); |
59 | 63 | _0 = const (); |
60 | 64 | StorageDead(_5); |
61 | 65 | StorageDead(_1); |
62 | 66 | return; |
63 | 67 | } |
64 | 68 | |
65 | -bb7: { | |
69 | +bb8: { | |
66 | 70 | StorageDead(_5); |
67 | 71 | goto -> bb1; |
68 | 72 | } |
69 | 73 | |
70 | -bb8 (cleanup): { | |
74 | +bb9 (cleanup): { | |
71 | 75 | resume; |
72 | 76 | } |
73 | 77 | } |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -17,15 +17,15 @@ fn main() -> () { | ||
17 | 17 | } |
18 | 18 | |
19 | 19 | bb1: { |
20 | -falseUnwind -> [real: bb2, unwind: bb14]; | |
20 | +falseUnwind -> [real: bb2, unwind: bb15]; | |
21 | 21 | } |
22 | 22 | |
23 | 23 | bb2: { |
24 | 24 | StorageLive(_2); |
25 | 25 | StorageLive(_3); |
26 | 26 | _3 = const true; |
27 | 27 | PlaceMention(_3); |
28 | -switchInt(_3) -> [0: bb4, otherwise: bb6]; | |
28 | +switchInt(_3) -> [0: bb5, otherwise: bb7]; | |
29 | 29 | } |
30 | 30 | |
31 | 31 | bb3: { |
@@ -34,59 +34,63 @@ fn main() -> () { | ||
34 | 34 | } |
35 | 35 | |
36 | 36 | bb4: { |
37 | -falseEdge -> [real: bb8, imaginary: bb6]; | |
37 | +goto -> bb3; | |
38 | 38 | } |
39 | 39 | |
40 | 40 | bb5: { |
41 | -goto -> bb3; | |
41 | +falseEdge -> [real: bb9, imaginary: bb7]; | |
42 | 42 | } |
43 | 43 | |
44 | 44 | bb6: { |
45 | -_0 = const (); | |
46 | -goto -> bb13; | |
45 | +goto -> bb4; | |
47 | 46 | } |
48 | 47 | |
49 | 48 | bb7: { |
50 | -goto -> bb3; | |
49 | +_0 = const (); | |
50 | +goto -> bb14; | |
51 | 51 | } |
52 | 52 | |
53 | 53 | bb8: { |
54 | -_2 = const 4_i32; | |
55 | -goto -> bb11; | |
54 | +goto -> bb4; | |
56 | 55 | } |
57 | 56 | |
58 | 57 | bb9: { |
59 | -unreachable; | |
58 | +_2 = const 4_i32; | |
59 | +goto -> bb12; | |
60 | 60 | } |
61 | 61 | |
62 | 62 | bb10: { |
63 | -goto -> bb11; | |
63 | +unreachable; | |
64 | 64 | } |
65 | 65 | |
66 | 66 | bb11: { |
67 | +goto -> bb12; | |
68 | +} | |
69 | + | |
70 | +bb12: { | |
67 | 71 | FakeRead(ForLet(None), _2); |
68 | 72 | StorageDead(_3); |
69 | 73 | StorageLive(_5); |
70 | 74 | StorageLive(_6); |
71 | 75 | _6 = &_2; |
72 | -_5 = std::mem::drop::<&i32>(move _6) -> [return: bb12, unwind: bb14]; | |
76 | +_5 = std::mem::drop::<&i32>(move _6) -> [return: bb13, unwind: bb15]; | |
73 | 77 | } |
74 | 78 | |
75 | -bb12: { | |
79 | +bb13: { | |
76 | 80 | StorageDead(_6); |
77 | 81 | StorageDead(_5); |
78 | 82 | _1 = const (); |
79 | 83 | StorageDead(_2); |
80 | 84 | goto -> bb1; |
81 | 85 | } |
82 | 86 | |
83 | -bb13: { | |
87 | +bb14: { | |
84 | 88 | StorageDead(_3); |
85 | 89 | StorageDead(_2); |
86 | 90 | return; |
87 | 91 | } |
88 | 92 | |
89 | -bb14 (cleanup): { | |
93 | +bb15 (cleanup): { | |
90 | 94 | resume; |
91 | 95 | } |
92 | 96 | } |