diff options
author | Thomas Lively <7121787+tlively@users.noreply.github.com> | 2022-09-22 18:00:50 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-22 16:00:50 -0700 |
commit | 58bedde3ac54f82657d5de092e7142ffb2ff735c (patch) | |
tree | e486638a92aeca615439bbcd11b540f4913b98a1 /test | |
parent | b1ba25732c1a02ae3da726c4b01ca3825ef969ef (diff) | |
download | binaryen-58bedde3ac54f82657d5de092e7142ffb2ff735c.tar.gz binaryen-58bedde3ac54f82657d5de092e7142ffb2ff735c.tar.bz2 binaryen-58bedde3ac54f82657d5de092e7142ffb2ff735c.zip |
Add a type annotation to return_call_ref (#5068)
The GC spec has been updated to have heap type annotations on call_ref and
return_call_ref. To avoid breaking users, we will have a graceful, multi-step
upgrade to the annotated version of call_ref, but since return_call_ref has no
users yet, update it in a single step.
Diffstat (limited to 'test')
-rw-r--r-- | test/lit/passes/dae-gc-refine-return.wast | 38 | ||||
-rw-r--r-- | test/lit/passes/inlining_all-features.wast | 2 | ||||
-rw-r--r-- | test/lit/passes/optimize-instructions-call_ref.wast | 2 | ||||
-rw-r--r-- | test/lit/types-function-references.wast | 22 |
4 files changed, 38 insertions, 26 deletions
diff --git a/test/lit/passes/dae-gc-refine-return.wast b/test/lit/passes/dae-gc-refine-return.wast index ccf11509c..84e161651 100644 --- a/test/lit/passes/dae-gc-refine-return.wast +++ b/test/lit/passes/dae-gc-refine-return.wast @@ -586,20 +586,20 @@ ) ;; CHECK: (func $tail-caller-call_ref-yes (result (ref ${})) ;; CHECK-NEXT: (local $return_{} (ref null $return_{})) - ;; CHECK-NEXT: (return_call_ref + ;; CHECK-NEXT: (return_call_ref $return_{} ;; CHECK-NEXT: (local.get $return_{}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $tail-caller-call_ref-yes (type $return_{}) (result (ref ${})) ;; NOMNL-NEXT: (local $return_{} (ref null $return_{})) - ;; NOMNL-NEXT: (return_call_ref + ;; NOMNL-NEXT: (return_call_ref $return_{} ;; NOMNL-NEXT: (local.get $return_{}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $tail-caller-call_ref-yes (result anyref) (local $return_{} (ref null $return_{})) - (return_call_ref (local.get $return_{})) + (return_call_ref $return_{} (local.get $return_{})) ) ;; CHECK: (func $tail-caller-call_ref-no (result anyref) ;; CHECK-NEXT: (local $any anyref) @@ -610,7 +610,7 @@ ;; CHECK-NEXT: (local.get $any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return_call_ref + ;; CHECK-NEXT: (return_call_ref $return_{} ;; CHECK-NEXT: (local.get $return_{}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -623,7 +623,7 @@ ;; NOMNL-NEXT: (local.get $any) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) - ;; NOMNL-NEXT: (return_call_ref + ;; NOMNL-NEXT: (return_call_ref $return_{} ;; NOMNL-NEXT: (local.get $return_{}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) @@ -634,18 +634,26 @@ (if (i32.const 1) (return (local.get $any)) ) - (return_call_ref (local.get $return_{})) + (return_call_ref $return_{} (local.get $return_{})) ) - ;; CHECK: (func $tail-caller-call_ref-unreachable - ;; CHECK-NEXT: (unreachable) + ;; CHECK: (func $tail-caller-call_ref-unreachable (result anyref) + ;; CHECK-NEXT: (block ;; (replaces something unreachable we can't emit) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; NOMNL: (func $tail-caller-call_ref-unreachable (type $none_=>_none) - ;; NOMNL-NEXT: (unreachable) + ;; NOMNL: (func $tail-caller-call_ref-unreachable (type $none_=>_anyref) (result anyref) + ;; NOMNL-NEXT: (block ;; (replaces something unreachable we can't emit) + ;; NOMNL-NEXT: (drop + ;; NOMNL-NEXT: (unreachable) + ;; NOMNL-NEXT: ) + ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $tail-caller-call_ref-unreachable (result anyref) ;; An unreachable means there is no function signature to even look at. We ;; should not hit an assertion on such things. - (return_call_ref (unreachable)) + (return_call_ref $return_{} (unreachable)) ) ;; CHECK: (func $tail-call-caller-call_ref ;; CHECK-NEXT: (drop @@ -654,7 +662,9 @@ ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $tail-caller-call_ref-no) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $tail-caller-call_ref-unreachable) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $tail-caller-call_ref-unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $tail-call-caller-call_ref (type $none_=>_none) ;; NOMNL-NEXT: (drop @@ -663,7 +673,9 @@ ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (call $tail-caller-call_ref-no) ;; NOMNL-NEXT: ) - ;; NOMNL-NEXT: (call $tail-caller-call_ref-unreachable) + ;; NOMNL-NEXT: (drop + ;; NOMNL-NEXT: (call $tail-caller-call_ref-unreachable) + ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $tail-call-caller-call_ref (drop diff --git a/test/lit/passes/inlining_all-features.wast b/test/lit/passes/inlining_all-features.wast index f820d1826..59afe1ce9 100644 --- a/test/lit/passes/inlining_all-features.wast +++ b/test/lit/passes/inlining_all-features.wast @@ -135,7 +135,7 @@ (export "func_36_invoker" (func $1)) (func $0 - (return_call_ref + (return_call_ref $none_=>_none (ref.null $none_=>_none) ) ) diff --git a/test/lit/passes/optimize-instructions-call_ref.wast b/test/lit/passes/optimize-instructions-call_ref.wast index 7164fda55..95e2af18c 100644 --- a/test/lit/passes/optimize-instructions-call_ref.wast +++ b/test/lit/passes/optimize-instructions-call_ref.wast @@ -316,7 +316,7 @@ (func $return_call_ref-to-select (param $x i32) (param $y i32) ;; As above, but with a return call. We optimize this too, and turn a ;; return_call_ref over a select into an if over return_calls. - (return_call_ref + (return_call_ref $i32_i32_=>_none (local.get $x) (local.get $y) (select diff --git a/test/lit/types-function-references.wast b/test/lit/types-function-references.wast index ffca23132..16ea53997 100644 --- a/test/lit/types-function-references.wast +++ b/test/lit/types-function-references.wast @@ -10,12 +10,16 @@ ;; RUN: cat %t.text.wast | filecheck %s --check-prefix=CHECK-TEXT (module - ;; inline ref type in result - (type $_=>_eqref (func (result eqref))) ;; CHECK-BINARY: (type $mixed_results (func (result anyref f32 anyref f32))) - ;; CHECK-BINARY: (type $none_=>_none (func)) + ;; CHECK-BINARY: (type $void (func)) + ;; CHECK-TEXT: (type $mixed_results (func (result anyref f32 anyref f32))) + ;; CHECK-TEXT: (type $void (func)) + (type $void (func)) + + ;; inline ref type in result + (type $_=>_eqref (func (result eqref))) ;; CHECK-BINARY: (type $i32-i32 (func (param i32) (result i32))) ;; CHECK-BINARY: (type $=>eqref (func (result eqref))) @@ -27,10 +31,6 @@ ;; CHECK-BINARY: (type $none_=>_i32 (func (result i32))) ;; CHECK-BINARY: (type $f64_=>_ref_null<_->_eqref> (func (param f64) (result (ref null $=>eqref)))) - ;; CHECK-TEXT: (type $mixed_results (func (result anyref f32 anyref f32))) - - ;; CHECK-TEXT: (type $none_=>_none (func)) - ;; CHECK-TEXT: (type $i32-i32 (func (param i32) (result i32))) ;; CHECK-TEXT: (type $=>eqref (func (result eqref))) @@ -77,17 +77,17 @@ (call_ref (ref.func $call-ref)) ) ;; CHECK-BINARY: (func $return-call-ref - ;; CHECK-BINARY-NEXT: (return_call_ref + ;; CHECK-BINARY-NEXT: (return_call_ref $void ;; CHECK-BINARY-NEXT: (ref.func $call-ref) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $return-call-ref - ;; CHECK-TEXT-NEXT: (return_call_ref + ;; CHECK-TEXT-NEXT: (return_call_ref $void ;; CHECK-TEXT-NEXT: (ref.func $call-ref) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $return-call-ref - (return_call_ref (ref.func $call-ref)) + (return_call_ref $void (ref.func $call-ref)) ) ;; CHECK-BINARY: (func $call-ref-more (param $0 i32) (result i32) ;; CHECK-BINARY-NEXT: (call_ref @@ -405,7 +405,7 @@ ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $1 -;; CHECK-NODEBUG-NEXT: (return_call_ref +;; CHECK-NODEBUG-NEXT: (return_call_ref $none_=>_none ;; CHECK-NODEBUG-NEXT: (ref.func $0) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) |