summaryrefslogtreecommitdiff
path: root/src/ir/literal-utils.h
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2021-03-24 08:02:59 -0700
committerGitHub <noreply@github.com>2021-03-24 08:02:59 -0700
commit182a1fbc41becdfdfbfcf02a2d67798fb087e7c1 (patch)
treeedf27b5cea41fb67fa23b2510ffe62c9d6104174 /src/ir/literal-utils.h
parent6aa04fa17a5bf820c8bc3a7801ede7f57a9138e7 (diff)
downloadbinaryen-182a1fbc41becdfdfbfcf02a2d67798fb087e7c1.tar.gz
binaryen-182a1fbc41becdfdfbfcf02a2d67798fb087e7c1.tar.bz2
binaryen-182a1fbc41becdfdfbfcf02a2d67798fb087e7c1.zip
[Wasm GC] Fix canMakeZero on tuples (#3721)
Diffstat (limited to 'src/ir/literal-utils.h')
-rw-r--r--src/ir/literal-utils.h14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/ir/literal-utils.h b/src/ir/literal-utils.h
index fbe5b3716..498085796 100644
--- a/src/ir/literal-utils.h
+++ b/src/ir/literal-utils.h
@@ -32,9 +32,17 @@ inline Expression* makeFromInt32(int32_t x, Type type, Module& wasm) {
}
inline bool canMakeZero(Type type) {
- // We can make a "zero" - a 0, or a null, or a trivial rtt, etc. - for pretty
- // much anything except a non-nullable reference type.
- return !type.isRef() || type.isNullable();
+ if (type.isRef() && !type.isNullable()) {
+ return false;
+ }
+ if (type.isTuple()) {
+ for (auto t : type) {
+ if (!canMakeZero(t)) {
+ return false;
+ }
+ }
+ }
+ return true;
}
inline Expression* makeZero(Type type, Module& wasm) {