summaryrefslogtreecommitdiff
path: root/src/passes/Outlining.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/Outlining.cpp')
-rw-r--r--src/passes/Outlining.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/passes/Outlining.cpp b/src/passes/Outlining.cpp
index 345b3f9a2..68c3d0397 100644
--- a/src/passes/Outlining.cpp
+++ b/src/passes/Outlining.cpp
@@ -132,7 +132,19 @@ struct ReconstructStringifyWalker
: state == NotInSeq ? &existingBuilder
: nullptr;
if (builder) {
- ASSERT_OK(builder->visit(curr));
+ if (auto* expr = curr->dynCast<Break>()) {
+ Type type = expr->value ? expr->value->type : Type::none;
+ ASSERT_OK(builder->visitBreakWithType(expr, type));
+ } else if (auto* expr = curr->dynCast<Switch>()) {
+ Type type = expr->value ? expr->value->type : Type::none;
+ ASSERT_OK(builder->visitSwitchWithType(expr, type));
+ } else {
+ // Assert ensures new unhandled branch instructions
+ // will quickly cause an error. Serves as a reminder to
+ // implement a new special-case visit*WithType.
+ assert(curr->is<BrOn>() || !Properties::isBranch(curr));
+ ASSERT_OK(builder->visit(curr));
+ }
}
DBG(printVisitExpression(curr));