summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/passes/simplify-locals_all-features.txt18
-rw-r--r--test/passes/simplify-locals_all-features.wast20
2 files changed, 38 insertions, 0 deletions
diff --git a/test/passes/simplify-locals_all-features.txt b/test/passes/simplify-locals_all-features.txt
index 81fca48ef..a9f056136 100644
--- a/test/passes/simplify-locals_all-features.txt
+++ b/test/passes/simplify-locals_all-features.txt
@@ -2040,3 +2040,21 @@
)
)
)
+(module
+ (type $eqref_i31ref_=>_i32 (func (param eqref i31ref) (result i32)))
+ (export "test" (func $0))
+ (func $0 (param $0 eqref) (param $1 i31ref) (result i32)
+ (local $2 eqref)
+ (local $3 i31ref)
+ (local.set $2
+ (local.get $0)
+ )
+ (local.set $0
+ (local.get $3)
+ )
+ (ref.eq
+ (local.get $2)
+ (local.get $1)
+ )
+ )
+)
diff --git a/test/passes/simplify-locals_all-features.wast b/test/passes/simplify-locals_all-features.wast
index 177b09688..61150edc1 100644
--- a/test/passes/simplify-locals_all-features.wast
+++ b/test/passes/simplify-locals_all-features.wast
@@ -1800,3 +1800,23 @@
)
)
)
+;; do not be confused by subtyping: when an index is set, even to another type,
+;; it is no longer equivalent
+;; (see https://github.com/WebAssembly/binaryen/issues/3266)
+(module
+ (func "test" (param $0 eqref) (param $1 i31ref) (result i32)
+ (local $2 eqref)
+ (local $3 i31ref)
+ (local.set $2
+ (local.get $0) ;; $0 and $2 are equivalent
+ )
+ (local.set $0 ;; set $0 to something with another type
+ (local.get $3)
+ )
+ ;; compares a null eqref and a zero i31ref - should be false
+ (ref.eq
+ (local.get $2)
+ (local.get $1)
+ )
+ )
+)