summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/wasm/wasm-s-parser.cpp2
-rw-r--r--test/exception-handling.wast7
-rw-r--r--test/exception-handling.wast.from-wast43
-rw-r--r--test/exception-handling.wast.fromBinary9
-rw-r--r--test/exception-handling.wast.fromBinary.noDebugInfo9
5 files changed, 52 insertions, 18 deletions
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp
index edf8ec6f0..3874bd2c0 100644
--- a/src/wasm/wasm-s-parser.cpp
+++ b/src/wasm/wasm-s-parser.cpp
@@ -2237,7 +2237,7 @@ Expression* SExpressionWasmBuilder::makeTry(Element& s) {
while (i < s.size() && elementStartsWith(*s[i], "catch")) {
Element& inner = *s[i++];
- if (inner.size() < 3) {
+ if (inner.size() < 2) {
throw ParseException("invalid catch block", inner.line, inner.col);
}
Name event = getEventName(*inner[1]);
diff --git a/test/exception-handling.wast b/test/exception-handling.wast
index 45cb21910..833010e73 100644
--- a/test/exception-handling.wast
+++ b/test/exception-handling.wast
@@ -2,6 +2,7 @@
(event $e-i32 (attr 0) (param i32))
(event $e-i64 (attr 0) (param i64))
(event $e-i32-i64 (attr 0) (param i32 i64))
+ (event $e-empty (attr 0))
(func $foo)
(func $bar)
@@ -188,6 +189,12 @@
)
(delegate 0)
)
+
+ ;; 'catch' body can be empty when the event's type is none.
+ (try
+ (do)
+ (catch $e-empty)
+ )
)
(func $rethrow-test
diff --git a/test/exception-handling.wast.from-wast b/test/exception-handling.wast.from-wast
index c397edcd8..6d997c521 100644
--- a/test/exception-handling.wast.from-wast
+++ b/test/exception-handling.wast.from-wast
@@ -6,6 +6,7 @@
(event $e-i32 (attr 0) (param i32))
(event $e-i64 (attr 0) (param i64))
(event $e-i32-i64 (attr 0) (param i32 i64))
+ (event $e-empty (attr 0) (param))
(func $foo
(nop)
)
@@ -226,6 +227,14 @@
)
(delegate 0)
)
+ (try $try17
+ (do
+ (nop)
+ )
+ (catch $e-empty
+ (nop)
+ )
+ )
)
(func $rethrow-test
(try $l0
@@ -242,8 +251,8 @@
(rethrow $l0)
)
)
- (block $l018
- (try $l017
+ (block $l019
+ (try $l018
(do
(call $foo)
)
@@ -251,14 +260,14 @@
(drop
(pop i32)
)
- (rethrow $l017)
+ (rethrow $l018)
)
(catch_all
- (br $l018)
+ (br $l019)
)
)
)
- (try $l019
+ (try $l020
(do
(call $foo)
)
@@ -271,20 +280,20 @@
(drop
(pop i32)
)
- (rethrow $l019)
+ (rethrow $l020)
)
(catch_all
- (rethrow $l019)
+ (rethrow $l020)
)
)
)
)
- (try $l020
+ (try $l021
(do
(call $foo)
)
(catch_all
- (try $try21
+ (try $try22
(do
(call $foo)
)
@@ -293,25 +302,25 @@
(pop i32)
)
(block $b0
- (rethrow $l020)
+ (rethrow $l021)
)
)
(catch_all
(block $b1
- (rethrow $l020)
+ (rethrow $l021)
)
)
)
)
)
- (try $l022
+ (try $l023
(do
(call $foo)
)
(catch_all
- (try $try23
+ (try $try24
(do
- (rethrow $l022)
+ (rethrow $l023)
)
(catch_all
(nop)
@@ -319,14 +328,14 @@
)
)
)
- (try $l024
+ (try $l025
(do
(call $foo)
)
(catch_all
- (try $try25
+ (try $try26
(do
- (rethrow $l024)
+ (rethrow $l025)
)
(catch_all
(nop)
diff --git a/test/exception-handling.wast.fromBinary b/test/exception-handling.wast.fromBinary
index afb9da9ac..851ec0eb4 100644
--- a/test/exception-handling.wast.fromBinary
+++ b/test/exception-handling.wast.fromBinary
@@ -6,6 +6,7 @@
(event $event$0 (attr 0) (param i32))
(event $event$1 (attr 0) (param i64))
(event $event$2 (attr 0) (param i32 i64))
+ (event $event$3 (attr 0) (param))
(func $foo
(nop)
)
@@ -257,6 +258,14 @@
)
(delegate 0)
)
+ (try $label$28
+ (do
+ (nop)
+ )
+ (catch $event$3
+ (nop)
+ )
+ )
)
(func $rethrow-test
(try $label$3
diff --git a/test/exception-handling.wast.fromBinary.noDebugInfo b/test/exception-handling.wast.fromBinary.noDebugInfo
index 19ac444fc..3ec4a690c 100644
--- a/test/exception-handling.wast.fromBinary.noDebugInfo
+++ b/test/exception-handling.wast.fromBinary.noDebugInfo
@@ -6,6 +6,7 @@
(event $event$0 (attr 0) (param i32))
(event $event$1 (attr 0) (param i64))
(event $event$2 (attr 0) (param i32 i64))
+ (event $event$3 (attr 0) (param))
(func $0
(nop)
)
@@ -257,6 +258,14 @@
)
(delegate 0)
)
+ (try $label$28
+ (do
+ (nop)
+ )
+ (catch $event$3
+ (nop)
+ )
+ )
)
(func $4
(try $label$3