summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-binary.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm/wasm-binary.cpp')
-rw-r--r--src/wasm/wasm-binary.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp
index 20b0899a5..170aa17bb 100644
--- a/src/wasm/wasm-binary.cpp
+++ b/src/wasm/wasm-binary.cpp
@@ -1357,7 +1357,8 @@ Type WasmBinaryBuilder::getType() {
case BinaryConsts::EncodedType::nullable:
return Type(getHeapType(), /* nullable = */ true);
case BinaryConsts::EncodedType::nonnullable:
- return Type(getHeapType(), /* nullable = */ false);
+ // FIXME: for now, force all inputs to be nullable
+ return Type(getHeapType(), /* nullable = */ true);
case BinaryConsts::EncodedType::i31ref:
return Type::i31ref;
default:
@@ -5291,6 +5292,7 @@ void WasmBinaryBuilder::visitRefFunc(RefFunc* curr) {
functionRefs[index].push_back(curr); // we don't know function names yet
// To support typed function refs, we give the reference not just a general
// funcref, but a specific subtype with the actual signature.
+ // FIXME: for now, emit a nullable type here
curr->finalize(
Type(HeapType(getFunctionSignatureByIndex(index)), /* nullable = */ true));
}
@@ -5440,6 +5442,12 @@ void WasmBinaryBuilder::visitCallRef(CallRef* curr) {
BYN_TRACE("zz node: CallRef\n");
curr->target = popNonVoidExpression();
auto type = curr->target->type;
+ if (type == Type::unreachable) {
+ // If our input is unreachable, then we cannot even find out how many inputs
+ // we have, and just set ourselves to unreachable as well.
+ curr->finalize(type);
+ return;
+ }
if (!type.isRef()) {
throwError("Non-ref type for a call_ref: " + type.toString());
}