diff options
-rw-r--r-- | src/expr-visitor.cc | 5 | ||||
-rw-r--r-- | test/typecheck/bad-empty-catch.txt | 14 |
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 ;;) |