diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/spec/br_on_null.wast | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/test/spec/br_on_null.wast b/test/spec/br_on_null.wast new file mode 100644 index 000000000..04b9f41db --- /dev/null +++ b/test/spec/br_on_null.wast @@ -0,0 +1,42 @@ +(module + (type $t (func (result i32))) + + (func $nn (param $r (ref $t)) (result i32) + (block $l + (return (call_ref (br_on_null $l (local.get $r)))) + ) + (i32.const -1) + ) + (func $n (param $r (ref null $t)) (result i32) + (block $l + (return (call_ref (br_on_null $l (local.get $r)))) + ) + (i32.const -1) + ) + + (func $f (result i32) (i32.const 7)) + + (func (export "nullable-null") (result i32) (call $n (ref.null $t))) + (func (export "nonnullable-f") (result i32) (call $nn (ref.func $f))) + (func (export "nullable-f") (result i32) (call $n (ref.func $f))) + + (func (export "unreachable") (result i32) + (block $l + (return (call_ref (br_on_null $l (unreachable)))) + ) + (i32.const -1) + ) +) + +(assert_trap (invoke "unreachable") "unreachable") + +(assert_return (invoke "nullable-null") (i32.const -1)) +(assert_return (invoke "nonnullable-f") (i32.const 7)) +(assert_return (invoke "nullable-f") (i32.const 7)) + +(module + (type $t (func)) + (func (param $r (ref $t)) (drop (br_on_null 0 (local.get $r)))) + (func (param $r (ref func)) (drop (br_on_null 0 (local.get $r)))) + (func (param $r (ref extern)) (drop (br_on_null 0 (local.get $r)))) +) |