summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2023-03-13 13:28:36 -0700
committerGitHub <noreply@github.com>2023-03-13 13:28:36 -0700
commit4f27e889dbdefa3b55d89f8b0cf319419eae41bd (patch)
tree772df41e9cf89ea3c0fdbcca92eef8d7da13fe68 /src
parent9053486f43d43449118c75c75a146abebcd7d1c4 (diff)
downloadbinaryen-4f27e889dbdefa3b55d89f8b0cf319419eae41bd.tar.gz
binaryen-4f27e889dbdefa3b55d89f8b0cf319419eae41bd.tar.bz2
binaryen-4f27e889dbdefa3b55d89f8b0cf319419eae41bd.zip
[Wasm GC] Properly handle packed field truncation in StructNew (#5570)
Diffstat (limited to 'src')
-rw-r--r--src/wasm-interpreter.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h
index 8e82bdf80..afc193f71 100644
--- a/src/wasm-interpreter.h
+++ b/src/wasm-interpreter.h
@@ -1541,14 +1541,15 @@ public:
const auto& fields = heapType.getStruct().fields;
Literals data(fields.size());
for (Index i = 0; i < fields.size(); i++) {
+ auto& field = fields[i];
if (curr->isWithDefault()) {
- data[i] = Literal::makeZero(fields[i].type);
+ data[i] = Literal::makeZero(field.type);
} else {
auto value = self()->visit(curr->operands[i]);
if (value.breaking()) {
return value;
}
- data[i] = value.getSingleValue();
+ data[i] = truncateForPacking(value.getSingleValue(), field);
}
}
return Literal(std::make_shared<GCData>(curr->type.getHeapType(), data),