diff --git a/src/wasm/ast-decoder.cc b/src/wasm/ast-decoder.cc index c9fe4945d9..ffb815771a 100644 --- a/src/wasm/ast-decoder.cc +++ b/src/wasm/ast-decoder.cc @@ -903,7 +903,7 @@ class LR_WasmDecoder : public Decoder { LocalType type = LocalOperand(p->pc(), &index, &unused); Tree* val = p->last(); if (type == val->type) { - if (builder_) ssa_env_->locals[index] = val->node; + if (build()) ssa_env_->locals[index] = val->node; p->tree->node = val->node; } else { error(p->pc(), val->pc, "Typecheck failed in SetLocal"); diff --git a/test/cctest/wasm/test-run-wasm.cc b/test/cctest/wasm/test-run-wasm.cc index cc9663974b..c6f529e35a 100644 --- a/test/cctest/wasm/test-run-wasm.cc +++ b/test/cctest/wasm/test-run-wasm.cc @@ -1684,6 +1684,15 @@ TEST(Run_Wasm_Block_If_P_assign) { } +TEST(Run_Wasm_DanglingAssign) { + WasmRunner r(MachineType::Int32()); + // { return 0; p0 = 0; } + BUILD(r, + WASM_BLOCK(2, WASM_RETURN(WASM_I8(99)), WASM_SET_LOCAL(0, WASM_ZERO))); + CHECK_EQ(99, r.Call(1)); +} + + TEST(Run_Wasm_ExprIf_P) { WasmRunner r(MachineType::Int32()); // p0 ? 11 : 22;