summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorThomas Lively <7121787+tlively@users.noreply.github.com>2022-09-22 18:00:50 -0500
committerGitHub <noreply@github.com>2022-09-22 16:00:50 -0700
commit58bedde3ac54f82657d5de092e7142ffb2ff735c (patch)
treee486638a92aeca615439bbcd11b540f4913b98a1 /test
parentb1ba25732c1a02ae3da726c4b01ca3825ef969ef (diff)
downloadbinaryen-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.wast38
-rw-r--r--test/lit/passes/inlining_all-features.wast2
-rw-r--r--test/lit/passes/optimize-instructions-call_ref.wast2
-rw-r--r--test/lit/types-function-references.wast22
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: )