diff --git a/compiler/rustc_mir_build/src/build/matches/mod.rs b/compiler/rustc_mir_build/src/build/matches/mod.rs index 932406fd1aaf2..5ba3e42d7b3dd 100644 --- a/compiler/rustc_mir_build/src/build/matches/mod.rs +++ b/compiler/rustc_mir_build/src/build/matches/mod.rs @@ -1411,6 +1411,9 @@ impl<'a, 'tcx> Builder<'a, 'tcx> { break; } } + if expand_until != 0 { + expand_until = i + 1; + } } let (candidates_to_expand, remaining_candidates) = candidates.split_at_mut(expand_until); diff --git a/tests/mir-opt/building/match/simple_match.match_enum.built.after.mir b/tests/mir-opt/building/match/simple_match.match_enum.built.after.mir index b233aa8b8e595..905aa19da706a 100644 --- a/tests/mir-opt/building/match/simple_match.match_enum.built.after.mir +++ b/tests/mir-opt/building/match/simple_match.match_enum.built.after.mir @@ -4,12 +4,11 @@ fn match_enum(_1: E1) -> bool { debug x => _1; let mut _0: bool; let mut _2: isize; - let mut _3: isize; bb0: { PlaceMention(_1); _2 = discriminant(_1); - switchInt(move _2) -> [0: bb3, 1: bb5, otherwise: bb2]; + switchInt(move _2) -> [0: bb3, 1: bb5, 2: bb7, otherwise: bb2]; } bb1: { @@ -18,12 +17,11 @@ fn match_enum(_1: E1) -> bool { } bb2: { - _3 = discriminant(_1); - switchInt(move _3) -> [2: bb8, otherwise: bb1]; + goto -> bb1; } bb3: { - goto -> bb7; + goto -> bb9; } bb4: { @@ -31,7 +29,7 @@ fn match_enum(_1: E1) -> bool { } bb5: { - goto -> bb7; + goto -> bb9; } bb6: { @@ -39,16 +37,16 @@ fn match_enum(_1: E1) -> bool { } bb7: { - falseEdge -> [real: bb10, imaginary: bb2]; + _0 = const false; + goto -> bb11; } bb8: { - _0 = const false; - goto -> bb11; + goto -> bb2; } bb9: { - goto -> bb1; + falseEdge -> [real: bb10, imaginary: bb7]; } bb10: {