summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-ir-builder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm/wasm-ir-builder.cpp')
-rw-r--r--src/wasm/wasm-ir-builder.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/wasm/wasm-ir-builder.cpp b/src/wasm/wasm-ir-builder.cpp
index ccd2ee77a..6322a5786 100644
--- a/src/wasm/wasm-ir-builder.cpp
+++ b/src/wasm/wasm-ir-builder.cpp
@@ -810,10 +810,11 @@ Result<> IRBuilder::visitElse() {
}
auto originalLabel = scope.getOriginalLabel();
auto label = scope.label;
+ auto labelUsed = scope.labelUsed;
auto expr = finishScope();
CHECK_ERR(expr);
iff->ifTrue = *expr;
- pushScope(ScopeCtx::makeElse(iff, originalLabel, label));
+ pushScope(ScopeCtx::makeElse(iff, originalLabel, label, labelUsed));
return Ok{};
}
@@ -830,6 +831,7 @@ Result<> IRBuilder::visitCatch(Name tag) {
}
auto originalLabel = scope.getOriginalLabel();
auto label = scope.label;
+ auto labelUsed = scope.labelUsed;
auto branchLabel = scope.branchLabel;
auto expr = finishScope();
CHECK_ERR(expr);
@@ -839,7 +841,8 @@ Result<> IRBuilder::visitCatch(Name tag) {
tryy->catchBodies.push_back(*expr);
}
tryy->catchTags.push_back(tag);
- pushScope(ScopeCtx::makeCatch(tryy, originalLabel, label, branchLabel));
+ pushScope(
+ ScopeCtx::makeCatch(tryy, originalLabel, label, labelUsed, branchLabel));
// Push a pop for the exception payload.
auto params = wasm.getTag(tag)->sig.params;
if (params != Type::none) {
@@ -861,6 +864,7 @@ Result<> IRBuilder::visitCatchAll() {
}
auto originalLabel = scope.getOriginalLabel();
auto label = scope.label;
+ auto labelUsed = scope.labelUsed;
auto branchLabel = scope.branchLabel;
auto expr = finishScope();
CHECK_ERR(expr);
@@ -869,7 +873,8 @@ Result<> IRBuilder::visitCatchAll() {
} else {
tryy->catchBodies.push_back(*expr);
}
- pushScope(ScopeCtx::makeCatchAll(tryy, originalLabel, label, branchLabel));
+ pushScope(
+ ScopeCtx::makeCatchAll(tryy, originalLabel, label, labelUsed, branchLabel));
return Ok{};
}