summaryrefslogtreecommitdiff
path: root/test/binaryen.js/kitchen-sink.js
diff options
context:
space:
mode:
authorHeejin Ahn <aheejin@gmail.com>2019-12-12 18:36:31 -0800
committerGitHub <noreply@github.com>2019-12-12 18:36:31 -0800
commit89d1cf92be0636a219ee6415eead387241963dcf (patch)
treeecd7c3541def138353ccf5e095b90a656070a3d5 /test/binaryen.js/kitchen-sink.js
parent759c485a9f35bd859d43b86b02e1397a669fa469 (diff)
downloadbinaryen-89d1cf92be0636a219ee6415eead387241963dcf.tar.gz
binaryen-89d1cf92be0636a219ee6415eead387241963dcf.tar.bz2
binaryen-89d1cf92be0636a219ee6415eead387241963dcf.zip
Make local.tee's type its local's type (#2511)
According to the current spec, `local.tee`'s return type should be the same as its local's type. (Discussions on whether we should change this rule is going on in WebAssembly/reference-types#55, but here I will assume this spec does not change. If this changes, we should change many parts of Binaryen transformation anyway...) But currently in Binaryen `local.tee`'s type is computed from its value's type. This didn't make any difference in the MVP, but after we have subtype relationship in #2451, this can become a problem. For example: ``` (func $test (result funcref) (local $0 anyref) (local.tee $0 (ref.func $test) ) ) ``` This shouldn't validate in the spec, but this will pass Binaryen validation with the current `local.tee` implementation. This makes `local.tee`'s type computed from the local's type, and makes `LocalSet::makeTee` get a type parameter, to which we should pass the its corresponding local's type. We don't embed the local type in the class `LocalSet` because it may increase memory size. This also fixes the type of `local.get` to be the local type where `local.get` and `local.set` pair is created from `local.tee`.
Diffstat (limited to 'test/binaryen.js/kitchen-sink.js')
-rw-r--r--test/binaryen.js/kitchen-sink.js2
1 files changed, 1 insertions, 1 deletions
diff --git a/test/binaryen.js/kitchen-sink.js b/test/binaryen.js/kitchen-sink.js
index 83e3d4a44..982bcc927 100644
--- a/test/binaryen.js/kitchen-sink.js
+++ b/test/binaryen.js/kitchen-sink.js
@@ -469,7 +469,7 @@ function test_core() {
),
module.drop(module.local.get(0, Binaryen.i32)),
module.local.set(0, makeInt32(101)),
- module.drop(module.local.tee(0, makeInt32(102))),
+ module.drop(module.local.tee(0, makeInt32(102), Binaryen.i32)),
module.i32.load(0, 0, makeInt32(1)),
module.i64.load16_s(2, 1, makeInt32(8)),
module.f32.load(0, 0, makeInt32(2)),