summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/expr-visitor.cc5
-rw-r--r--test/typecheck/bad-empty-catch.txt14
2 files changed, 16 insertions, 3 deletions
diff --git a/src/expr-visitor.cc b/src/expr-visitor.cc
index f6633049..9547a432 100644
--- a/src/expr-visitor.cc
+++ b/src/expr-visitor.cc
@@ -95,12 +95,11 @@ Result ExprVisitor::VisitExpr(Expr* root_expr) {
if (iter != try_expr->block.exprs.end()) {
PushDefault(&*iter++);
} else {
+ CHECK_RESULT(delegate_->OnCatchExpr(try_expr));
+ PopExprlist();
if (try_expr->catch_.empty()) {
CHECK_RESULT(delegate_->EndTryExpr(try_expr));
- PopExprlist();
} else {
- CHECK_RESULT(delegate_->OnCatchExpr(try_expr));
- PopExprlist();
PushExprlist(State::Catch, expr, try_expr->catch_);
}
}
diff --git a/test/typecheck/bad-empty-catch.txt b/test/typecheck/bad-empty-catch.txt
new file mode 100644
index 00000000..1d3f5429
--- /dev/null
+++ b/test/typecheck/bad-empty-catch.txt
@@ -0,0 +1,14 @@
+;;; TOOL: wat2wasm
+;;; ARGS: --enable-exceptions
+;;; ERROR: 1
+(module
+ (func
+ try
+ catch
+ end
+ ))
+(;; STDERR ;;;
+out/test/typecheck/bad-empty-catch.txt:7:5: error: type mismatch in try catch, expected [] but got [exnref]
+ catch
+ ^^^^^
+;;; STDERR ;;)