[wasm] Fix set_local appearing in unreachable code.

R=ahaas@chromium.org
LOG=Y
BUG=chromium:575861

Review URL: https://codereview.chromium.org/1573053003

Cr-Commit-Position: refs/heads/master@{#33213}
This commit is contained in:
titzer 2016-01-11 09:37:59 -08:00 committed by Commit bot
parent 2b352bb84f
commit 391517ea99
2 changed files with 10 additions and 1 deletions

View File

@ -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");

View File

@ -1684,6 +1684,15 @@ TEST(Run_Wasm_Block_If_P_assign) {
}
TEST(Run_Wasm_DanglingAssign) {
WasmRunner<int32_t> 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<int32_t> r(MachineType::Int32());
// p0 ? 11 : 22;