diff --git a/test/core/return_call.wast b/test/core/return_call.wast index 2a983530a6..e1bb0ed27a 100644 --- a/test/core/return_call.wast +++ b/test/core/return_call.wast @@ -91,6 +91,11 @@ (func (export "type-f64-i64-to-i32-f32") (param f64 i64) (result i32 f32) (return_call $swizzle (local.get 0) (local.get 1)) ) + + ;; Result subtyping + (type $t (func)) + (func $f (result (ref null $t)) (ref.null $t)) + (func (export "type-funcref") (result funcref) (return_call $f)) ) (assert_return (invoke "type-i32") (i32.const 0x132)) @@ -134,6 +139,7 @@ (assert_return (invoke "odd" (i64.const 999_999)) (i32.const 44)) (assert_return (invoke "tailprint_i32_f32" (i32.const 5) (f32.const 91.0))) (assert_return (invoke "type-f64-i64-to-i32-f32" (f64.const 4.2) (i64.const 99)) (i32.const 99) (f32.const 4.2)) +(assert_return (invoke "type-funcref") (ref.null func)) ;; Invalid typing @@ -151,6 +157,14 @@ ) "type mismatch" ) +(assert_invalid + (module + (type $t (func)) + (func $type-ref-vs-funcref (result (ref null $t)) (return_call 1)) + (func (result funcref) (unreachable)) + ) + "type mismatch" +) (assert_invalid (module diff --git a/test/core/return_call_indirect.wast b/test/core/return_call_indirect.wast index a543d9d026..8c6292fd92 100644 --- a/test/core/return_call_indirect.wast +++ b/test/core/return_call_indirect.wast @@ -234,6 +234,14 @@ (func (export "call_mpmr") (param f64 i64) (result i32 f32) (return_call_indirect $tab4 (param f64 i64) (result i32 f32) (local.get 0) (local.get 1) (i32.const 1)) ) + + ;; Result subtyping + (type $t (func)) + (func $f (result (ref null $t)) (ref.null $t)) + (table $tab5 funcref (elem $f)) + (func (export "type-funcref") (result funcref) + (return_call_indirect $tab5 (result (ref null $t)) (i32.const 0)) + ) ) (assert_return (invoke "type-i32") (i32.const 0x132)) @@ -294,6 +302,7 @@ (assert_return (invoke "call_tailprint" (i32.const 5) (f32.const 91.0))) (assert_return (invoke "call_mpmr" (f64.const 4.2) (i64.const 99)) (i32.const 99) (f32.const 4.2)) +(assert_return (invoke "type-funcref") (ref.null func)) ;; Invalid syntax @@ -447,6 +456,16 @@ ) "type mismatch" ) +(assert_invalid + (module + (type $t (func)) + (table 0 funcref) + (func $type-ref-vs-funcref (result (ref null $t)) + (return_call_indirect (result funcref) (i32.const 0)) + ) + ) + "type mismatch" +) (assert_invalid (module