diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/exception-handling.wast.from-wast | 2 | ||||
-rw-r--r-- | test/exception-handling.wast.fromBinary | 2 | ||||
-rw-r--r-- | test/exception-handling.wast.fromBinary.noDebugInfo | 2 | ||||
-rw-r--r-- | test/lit/merge/fusing.wat | 2 | ||||
-rw-r--r-- | test/lit/passes/coalesce-locals-eh.wast | 2 | ||||
-rw-r--r-- | test/lit/passes/dce-eh.wast | 2 | ||||
-rw-r--r-- | test/lit/passes/global-effects.wast | 6 | ||||
-rw-r--r-- | test/lit/passes/gufa-refs.wast | 2 | ||||
-rw-r--r-- | test/lit/passes/rse-eh.wast | 2 | ||||
-rw-r--r-- | test/lit/passes/type-refining.wast | 2 | ||||
-rw-r--r-- | test/metadce/tag.wast.dced | 4 | ||||
-rw-r--r-- | test/spec/exception-handling.wast | 38 | ||||
-rw-r--r-- | test/spec/tags.wast | 5 | ||||
-rw-r--r-- | test/tags.wast.from-wast | 2 | ||||
-rw-r--r-- | test/tags.wast.fromBinary | 2 | ||||
-rw-r--r-- | test/tags.wast.fromBinary.noDebugInfo | 2 | ||||
-rw-r--r-- | test/try-delegate.wasm.fromBinary | 2 | ||||
-rw-r--r-- | test/unit/test_features.py | 16 |
18 files changed, 72 insertions, 23 deletions
diff --git a/test/exception-handling.wast.from-wast b/test/exception-handling.wast.from-wast index cdf71aa55..da9a1031e 100644 --- a/test/exception-handling.wast.from-wast +++ b/test/exception-handling.wast.from-wast @@ -8,7 +8,7 @@ (tag $e-i64 (param i64)) (tag $e-i32-i64 (param i32 i64)) (tag $e-eqref (param eqref)) - (tag $e-empty (param)) + (tag $e-empty) (func $foo (type $0) (nop) ) diff --git a/test/exception-handling.wast.fromBinary b/test/exception-handling.wast.fromBinary index 44bd2e5c3..e9cfce409 100644 --- a/test/exception-handling.wast.fromBinary +++ b/test/exception-handling.wast.fromBinary @@ -8,7 +8,7 @@ (tag $e-i64 (param i64)) (tag $e-i32-i64 (param i32 i64)) (tag $e-eqref (param eqref)) - (tag $e-empty (param)) + (tag $e-empty) (func $foo (type $0) (nop) ) diff --git a/test/exception-handling.wast.fromBinary.noDebugInfo b/test/exception-handling.wast.fromBinary.noDebugInfo index 27202e8a6..4bc460630 100644 --- a/test/exception-handling.wast.fromBinary.noDebugInfo +++ b/test/exception-handling.wast.fromBinary.noDebugInfo @@ -8,7 +8,7 @@ (tag $tag$1 (param i64)) (tag $tag$2 (param i32 i64)) (tag $tag$3 (param eqref)) - (tag $tag$4 (param)) + (tag $tag$4) (func $0 (type $0) (nop) ) diff --git a/test/lit/merge/fusing.wat b/test/lit/merge/fusing.wat index c38f84409..a1ac3a2c7 100644 --- a/test/lit/merge/fusing.wat +++ b/test/lit/merge/fusing.wat @@ -32,7 +32,7 @@ ;; CHECK: (memory $second.mem 2) - ;; CHECK: (tag $exn (param)) + ;; CHECK: (tag $exn) ;; CHECK: (export "foo" (func $first.foo)) diff --git a/test/lit/passes/coalesce-locals-eh.wast b/test/lit/passes/coalesce-locals-eh.wast index 16b4db40a..379f3dc31 100644 --- a/test/lit/passes/coalesce-locals-eh.wast +++ b/test/lit/passes/coalesce-locals-eh.wast @@ -2,7 +2,7 @@ ;; RUN: wasm-opt %s --coalesce-locals -all -S -o - | filecheck %s (module - ;; CHECK: (tag $e (param)) + ;; CHECK: (tag $e) ;; CHECK: (func $bar (type $1) (result i32) ;; CHECK-NEXT: (i32.const 1984) diff --git a/test/lit/passes/dce-eh.wast b/test/lit/passes/dce-eh.wast index 5915eb7bd..f05f5122e 100644 --- a/test/lit/passes/dce-eh.wast +++ b/test/lit/passes/dce-eh.wast @@ -4,7 +4,7 @@ ;; If either try body or catch body is reachable, the whole try construct is ;; reachable (module - ;; CHECK: (tag $e (param)) + ;; CHECK: (tag $e) ;; CHECK: (func $foo (type $0) ;; CHECK-NEXT: (nop) diff --git a/test/lit/passes/global-effects.wast b/test/lit/passes/global-effects.wast index 503b1efef..e5ea1b429 100644 --- a/test/lit/passes/global-effects.wast +++ b/test/lit/passes/global-effects.wast @@ -14,21 +14,21 @@ ;; WITHOUT: (type $2 (func (param i32))) - ;; WITHOUT: (tag $tag (param)) + ;; WITHOUT: (tag $tag) ;; INCLUDE: (type $0 (func)) ;; INCLUDE: (type $1 (func (result i32))) ;; INCLUDE: (type $2 (func (param i32))) - ;; INCLUDE: (tag $tag (param)) + ;; INCLUDE: (tag $tag) ;; DISCARD: (type $0 (func)) ;; DISCARD: (type $1 (func (result i32))) ;; DISCARD: (type $2 (func (param i32))) - ;; DISCARD: (tag $tag (param)) + ;; DISCARD: (tag $tag) (tag $tag) ;; WITHOUT: (func $main (type $0) diff --git a/test/lit/passes/gufa-refs.wast b/test/lit/passes/gufa-refs.wast index fa4afd6e0..3e7530926 100644 --- a/test/lit/passes/gufa-refs.wast +++ b/test/lit/passes/gufa-refs.wast @@ -1903,7 +1903,7 @@ ;; CHECK: (tag $something (param anyref)) (tag $something (param (ref null any))) - ;; CHECK: (tag $empty (param)) + ;; CHECK: (tag $empty) (tag $empty (param)) ;; CHECK: (func $func (type $0) diff --git a/test/lit/passes/rse-eh.wast b/test/lit/passes/rse-eh.wast index 615ed2a37..64802aec4 100644 --- a/test/lit/passes/rse-eh.wast +++ b/test/lit/passes/rse-eh.wast @@ -4,7 +4,7 @@ (module ;; CHECK: (tag $e (param i32)) (tag $e (param i32)) - ;; CHECK: (tag $e2 (param)) + ;; CHECK: (tag $e2) (tag $e2) ;; CHECK: (func $try1 (type $0) diff --git a/test/lit/passes/type-refining.wast b/test/lit/passes/type-refining.wast index 2f550cc37..0a133d7a0 100644 --- a/test/lit/passes/type-refining.wast +++ b/test/lit/passes/type-refining.wast @@ -1240,7 +1240,7 @@ ;; CHECK: (type $6 (func)) - ;; CHECK: (tag $tag (param)) + ;; CHECK: (tag $tag) (tag $tag) ;; CHECK: (func $struct.new (type $4) (param $extern externref) (result anyref) diff --git a/test/metadce/tag.wast.dced b/test/metadce/tag.wast.dced index 3a71a2eed..dcaf51af3 100644 --- a/test/metadce/tag.wast.dced +++ b/test/metadce/tag.wast.dced @@ -1,7 +1,7 @@ (module (type $0 (func)) - (import "env" "imported_tag" (tag $t0 (param))) - (tag $t1 (param)) + (import "env" "imported_tag" (tag $t0)) + (tag $t1) (export "test" (func $test)) (func $test (type $0) (try $try diff --git a/test/spec/exception-handling.wast b/test/spec/exception-handling.wast index 5ec78dfed..756d488d8 100644 --- a/test/spec/exception-handling.wast +++ b/test/spec/exception-handling.wast @@ -615,3 +615,41 @@ ) "catch's body (e-i32)'s pop's location is not valid" ) + +(assert_invalid + (module + (tag $e-i32 (param i32) (result i32)) + (tag $e-f32 (param f32)) + (func (export "try_throw_nocatch") (result i32) + (try (result i32) + (do + (throw $e-i32 (i32.const 5)) + ) + (catch $e-f32 + (drop (pop f32)) + (i32.const 3) + ) + ) + ) + ) + "tags with result types must not be used for exception handling" +) + +(assert_invalid + (module + (tag $e-i32 (param i32)) + (tag $e-f32 (param f32) (result i32)) + (func (export "try_throw_nocatch") (result i32) + (try (result i32) + (do + (throw $e-i32 (i32.const 5)) + ) + (catch $e-f32 + (drop (pop f32)) + (i32.const 3) + ) + ) + ) + ) + "catch's tag (e-f32) has result values, which is not allowed for exception handling" +) diff --git a/test/spec/tags.wast b/test/spec/tags.wast index 78b45f26a..aee2aab9c 100644 --- a/test/spec/tags.wast +++ b/test/spec/tags.wast @@ -15,11 +15,6 @@ ) (assert_invalid - (module (tag $e (param i32) (result i32))) - "Tag type's result type should be none" -) - -(assert_invalid (module (tag $e (attr 1) (param i32))) "Currently only attribute 0 is supported" ) diff --git a/test/tags.wast.from-wast b/test/tags.wast.from-wast index eeb738480..8b1645a0b 100644 --- a/test/tags.wast.from-wast +++ b/test/tags.wast.from-wast @@ -6,7 +6,7 @@ (import "env" "im1" (tag $eimport$1 (param i32 f32))) (tag $2 (param i32)) (tag $e (param i32 f32)) - (tag $empty (param)) + (tag $empty) (tag $e-params0 (param i32 f32)) (tag $e-params1 (param i32 f32)) (tag $e-export (param i32)) diff --git a/test/tags.wast.fromBinary b/test/tags.wast.fromBinary index 4dcd6c57e..99b478add 100644 --- a/test/tags.wast.fromBinary +++ b/test/tags.wast.fromBinary @@ -6,7 +6,7 @@ (import "env" "im1" (tag $eimport$1 (param i32 f32))) (tag $tag$0 (param i32)) (tag $e (param i32 f32)) - (tag $empty (param)) + (tag $empty) (tag $e-params0 (param i32 f32)) (tag $e-params1 (param i32 f32)) (tag $e-export (param i32)) diff --git a/test/tags.wast.fromBinary.noDebugInfo b/test/tags.wast.fromBinary.noDebugInfo index f72f72f2b..6cd126efb 100644 --- a/test/tags.wast.fromBinary.noDebugInfo +++ b/test/tags.wast.fromBinary.noDebugInfo @@ -6,7 +6,7 @@ (import "env" "im1" (tag $eimport$1 (param i32 f32))) (tag $tag$0 (param i32)) (tag $tag$1 (param i32 f32)) - (tag $tag$2 (param)) + (tag $tag$2) (tag $tag$3 (param i32 f32)) (tag $tag$4 (param i32 f32)) (tag $tag$5 (param i32)) diff --git a/test/try-delegate.wasm.fromBinary b/test/try-delegate.wasm.fromBinary index 7992eab69..07aee5611 100644 --- a/test/try-delegate.wasm.fromBinary +++ b/test/try-delegate.wasm.fromBinary @@ -1,6 +1,6 @@ (module (type $0 (func)) - (tag $tag$0 (param)) + (tag $tag$0) (func $0 (try $label$6 (do diff --git a/test/unit/test_features.py b/test/unit/test_features.py index cbdae1c56..d2d72a8e4 100644 --- a/test/unit/test_features.py +++ b/test/unit/test_features.py @@ -51,6 +51,12 @@ class FeatureValidationTest(utils.BinaryenTestCase): self.check_feature(module, error, '--enable-gc', ['--enable-reference-types']) + def check_typed_continuations(self, module, error): + # Typed continuations implies function references (which is provided by + # gc in binaryen, and implies reference types) and exceptions + self.check_feature(module, error, '--enable-typed-continuations', + ['--enable-gc', '--enable-reference-types', '--enable-exception-handling']) + def test_v128_signature(self): module = ''' (module @@ -278,6 +284,16 @@ class FeatureValidationTest(utils.BinaryenTestCase): ''' self.check_gc(module, 'all used types should be allowed') + def test_tag_results(self): + module = ''' + (module + (tag $foo (result i32)) + ) + ''' + self.check_typed_continuations(module, + 'Tags with result types require typed ' + 'continuations feature [--enable-typed-continuations]') + class TargetFeaturesSectionTest(utils.BinaryenTestCase): def test_atomics(self): |