diff options
Diffstat (limited to 'src/wasm/wasm-binary.cpp')
-rw-r--r-- | src/wasm/wasm-binary.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp index 159099a16..6448615a5 100644 --- a/src/wasm/wasm-binary.cpp +++ b/src/wasm/wasm-binary.cpp @@ -676,7 +676,8 @@ void WasmBinaryWriter::visitLoad(Load *curr) { } case f32: o << int8_t(BinaryConsts::F32LoadMem); break; case f64: o << int8_t(BinaryConsts::F64LoadMem); break; - default: abort(); + case unreachable: return; // the pointer is unreachable, so we are never reached; just don't emit a load + default: WASM_UNREACHABLE(); } emitMemoryAccess(curr->align, curr->bytes, curr->offset); } @@ -1732,7 +1733,6 @@ Expression* WasmBinaryBuilder::getBlock(WasmType type) { Name label = getNextLabel(); breakStack.push_back({label, type != none && type != unreachable}); auto* block = Builder(wasm).blockify(getMaybeBlock(type)); - block->finalize(); breakStack.pop_back(); block->cast<Block>()->name = label; return block; @@ -1814,6 +1814,7 @@ Expression* WasmBinaryBuilder::visitCall() { call->target = import->name; type = wasm.getFunctionType(import->functionType); fillCall(call, type); + call->finalize(); ret = call; } else { // this is a call of a defined function @@ -1825,6 +1826,7 @@ Expression* WasmBinaryBuilder::visitCall() { type = functionTypes[adjustedIndex]; fillCall(call, type); functionCalls[adjustedIndex].push_back(call); // we don't know function names yet + call->finalize(); ret = call; } return ret; @@ -1847,6 +1849,7 @@ void WasmBinaryBuilder::visitCallIndirect(CallIndirect *curr) { curr->operands[num - i - 1] = popNonVoidExpression(); } curr->type = fullType->result; + curr->finalize(); } void WasmBinaryBuilder::visitGetLocal(GetLocal *curr) { @@ -1873,6 +1876,7 @@ void WasmBinaryBuilder::visitSetLocal(SetLocal *curr, uint8_t code) { curr->value = popNonVoidExpression(); curr->type = curr->value->type; curr->setTee(code == BinaryConsts::TeeLocal); + curr->finalize(); } void WasmBinaryBuilder::visitGetGlobal(GetGlobal *curr) { @@ -1897,6 +1901,7 @@ void WasmBinaryBuilder::visitSetGlobal(SetGlobal *curr) { auto index = getU32LEB(); curr->name = getGlobalName(index); curr->value = popNonVoidExpression(); + curr->finalize(); } void WasmBinaryBuilder::readMemoryAccess(Address& alignment, size_t bytes, Address& offset) { @@ -1926,6 +1931,7 @@ bool WasmBinaryBuilder::maybeVisitLoad(Expression*& out, uint8_t code) { if (debug) std::cerr << "zz node: Load" << std::endl; readMemoryAccess(curr->align, curr->bytes, curr->offset); curr->ptr = popNonVoidExpression(); + curr->finalize(); out = curr; return true; } @@ -2149,6 +2155,7 @@ void WasmBinaryBuilder::visitUnreachable(Unreachable *curr) { void WasmBinaryBuilder::visitDrop(Drop *curr) { if (debug) std::cerr << "zz node: Drop" << std::endl; curr->value = popNonVoidExpression(); + curr->finalize(); } } // namespace wasm |