summaryrefslogtreecommitdiff
path: root/src/asm2wasm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/asm2wasm.h')
-rw-r--r--src/asm2wasm.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/asm2wasm.h b/src/asm2wasm.h
index 63b88f5fe..e2731eb08 100644
--- a/src/asm2wasm.h
+++ b/src/asm2wasm.h
@@ -1303,6 +1303,13 @@ void Asm2WasmBuilder::processAsm(Ref ast) {
if (auto* block = target->dynCast<Block>()) {
target = block->list.back();
}
+ // the something might have been optimized out, leaving only the call
+ if (auto* call = target->dynCast<CallImport>()) {
+ auto tableName = call->target;
+ if (parent->functionTableStarts.find(tableName) == parent->functionTableStarts.end()) return;
+ curr->target = parent->builder.makeConst(Literal((int32_t)parent->functionTableStarts[tableName]));
+ return;
+ }
auto* add = target->dynCast<Binary>();
if (!add) return;
if (add->right->is<CallImport>()) {