diff options
-rw-r--r-- | disabled_tests_run-pass.txt | 2 | ||||
-rw-r--r-- | src/mir/from_hir_match.cpp | 4 |
2 files changed, 4 insertions, 2 deletions
diff --git a/disabled_tests_run-pass.txt b/disabled_tests_run-pass.txt index 883d5026..e721b6d3 100644 --- a/disabled_tests_run-pass.txt +++ b/disabled_tests_run-pass.txt @@ -259,7 +259,7 @@ match-bot-2 # ^ unreachable-code # ^ diverging-fn-tail-35849 # Validation error, assign to ! (return value) in unreachable branch if-ret # "If condition wasn't bool" -issue-15080 # Infinte loop from incorrect match generation +issue-15080 # XXX: SplitSlice match edge case leading to DIVERGE being hit issue-17877 # TODO: SplitSlice on array vec-matching-fixed # ^ vec-tail-matching # Trailing SplitSlice diff --git a/src/mir/from_hir_match.cpp b/src/mir/from_hir_match.cpp index 218809a4..b8fabdc0 100644 --- a/src/mir/from_hir_match.cpp +++ b/src/mir/from_hir_match.cpp @@ -504,6 +504,8 @@ void MIR_LowerHIR_Match( MirBuilder& builder, MirConverter& conv, ::HIR::ExprNod } } + // TODO: SplitSlice is buggy, make it fall back to simple? + // TODO: Don't generate inner code until decisions are generated (keeps MIR flow nice) // - Challenging, as the decision code needs somewhere to jump to. // - Allocating a BB and then rewriting references to it is a possibility. @@ -2526,7 +2528,7 @@ void MIR_LowerHIR_Match_Grouped( // Make the default infinite loop. // - Preferably, it'd abort. builder.set_cur_block(default_arm); - builder.end_block( ::MIR::Terminator::make_Goto(default_arm) ); + builder.end_block( ::MIR::Terminator::make_Diverge({}) ); } void MatchGenGrouped::gen_for_slice(t_rules_subset arm_rules, size_t ofs, ::MIR::BasicBlockId default_arm) { |