summaryrefslogtreecommitdiff
path: root/test/wasm2js
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2020-07-28 06:58:34 -0700
committerGitHub <noreply@github.com>2020-07-28 06:58:34 -0700
commit26f240c72dd62ed8a39f7466df99e51ec34487aa (patch)
tree67e7a8bac0b767e421764058f7accb5c3df32688 /test/wasm2js
parent32ab8bac04af52121c6985a9a019c0fdec957f03 (diff)
downloadbinaryen-26f240c72dd62ed8a39f7466df99e51ec34487aa.tar.gz
binaryen-26f240c72dd62ed8a39f7466df99e51ec34487aa.tar.bz2
binaryen-26f240c72dd62ed8a39f7466df99e51ec34487aa.zip
wasm2js: Don't remove an | 0 or >>> 0 in a boolean context (#2993)
It is usually fine to do if (x | 0) => if (x) since it just cares if the value is 0 or not. However, if the cast turns it into 0, then that is incorrect, which the fuzzer found as -2147483648 + -2147483648 | 0 (the sum is 2^32, which | 0 is 0). We can maybe look into doing this in a safe way, but for now just remove it. It doesn't have a big impact on code size as this is pretty rare (e.g. the minimal runtime code size test is not broken by this).
Diffstat (limited to 'test/wasm2js')
-rw-r--r--test/wasm2js/br_table_temp.2asm.js.opt2
-rw-r--r--test/wasm2js/emscripten.2asm.js.opt14
2 files changed, 8 insertions, 8 deletions
diff --git a/test/wasm2js/br_table_temp.2asm.js.opt b/test/wasm2js/br_table_temp.2asm.js.opt
index eba815912..f588a3430 100644
--- a/test/wasm2js/br_table_temp.2asm.js.opt
+++ b/test/wasm2js/br_table_temp.2asm.js.opt
@@ -12619,7 +12619,7 @@ function asmFunc(global, env, buffer) {
function $63($0) {
$0 = $0 | 0;
- if ($0 - 1) {
+ if ($0 - 1 | 0) {
$0 = 9
} else {
$0 = 8
diff --git a/test/wasm2js/emscripten.2asm.js.opt b/test/wasm2js/emscripten.2asm.js.opt
index d697fa7c7..35f2958e0 100644
--- a/test/wasm2js/emscripten.2asm.js.opt
+++ b/test/wasm2js/emscripten.2asm.js.opt
@@ -83,34 +83,34 @@ function asmFunc(global, env, buffer) {
if (HEAPU8[144] < 3) {
bar()
}
- if (bools(314159) >>> 7) {
+ if (bools(314159) >>> 7 | 0) {
bar()
}
if (bools(314159) >> 8) {
bar()
}
- if (~~getf32()) {
+ if (~~getf32() >>> 0) {
bar()
}
if (~~getf32()) {
bar()
}
- if (~~getf64()) {
+ if (~~getf64() >>> 0) {
bar()
}
if (~~getf64()) {
bar()
}
- if ((geti32() + geti32() | 0) + geti32()) {
+ if ((geti32() + geti32() | 0) + geti32() | 0) {
bar()
}
- if (geti32() + (geti32() + geti32() | 0)) {
+ if (geti32() + (geti32() + geti32() | 0) | 0) {
bar()
}
- if (geti32() + geti32() + (geti32() + geti32())) {
+ if (geti32() + geti32() + (geti32() + geti32()) | 0) {
bar()
}
- if (geti32() + geti32() + (geti32() + geti32()) + (geti32() + geti32() + (geti32() + geti32()))) {
+ if (geti32() + geti32() + (geti32() + geti32()) + (geti32() + geti32() + (geti32() + geti32())) | 0) {
bar()
}
}