diff options
author | Alon Zakai <alonzakai@gmail.com> | 2017-05-09 09:36:45 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-09 09:36:45 -0700 |
commit | 64aa81e0e9655cf16e3af65e1bbe98e7fc6cf974 (patch) | |
tree | 26f3608bb1944b63712a8d1a161e61b41956276d /src/wasm/wasm-s-parser.cpp | |
parent | b856925f6c25df22a0901d8f9e24e4247b4acc18 (diff) | |
download | binaryen-64aa81e0e9655cf16e3af65e1bbe98e7fc6cf974.tar.gz binaryen-64aa81e0e9655cf16e3af65e1bbe98e7fc6cf974.tar.bz2 binaryen-64aa81e0e9655cf16e3af65e1bbe98e7fc6cf974.zip |
Unreachable typing fixes (#1004)
* fix type of drop, set_local, set_global, load, etc: when operand is unreachable, so is the node itself
* support binary tests properly in test/passes
* fix unreachable typing of blocks with no name and an unreachable child
* fix continue emitting in asm2wasm
* properly handle emitting of unreachable load
Diffstat (limited to 'src/wasm/wasm-s-parser.cpp')
-rw-r--r-- | src/wasm/wasm-s-parser.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp index 69509afec..f9e3912f7 100644 --- a/src/wasm/wasm-s-parser.cpp +++ b/src/wasm/wasm-s-parser.cpp @@ -928,6 +928,7 @@ Expression* SExpressionWasmBuilder::makeTeeLocal(Element& s) { ret->index = getLocalIndex(*s[1]); ret->value = parseExpression(s[2]); ret->setTee(true); + ret->finalize(); return ret; } @@ -936,6 +937,7 @@ Expression* SExpressionWasmBuilder::makeSetLocal(Element& s) { ret->index = getLocalIndex(*s[1]); ret->value = parseExpression(s[2]); ret->setTee(false); + ret->finalize(); return ret; } @@ -960,6 +962,7 @@ Expression* SExpressionWasmBuilder::makeSetGlobal(Element& s) { ret->name = getGlobalName(*s[1]); if (wasm.getGlobalOrNull(ret->name) && !wasm.getGlobalOrNull(ret->name)->mutable_) throw ParseException("set_global of immutable", s.line, s.col); ret->value = parseExpression(s[2]); + ret->finalize(); return ret; } @@ -1084,6 +1087,7 @@ Expression* SExpressionWasmBuilder::makeLoad(Element& s, WasmType type) { i++; } ret->ptr = parseExpression(s[i]); + ret->finalize(); return ret; } @@ -1210,6 +1214,7 @@ Expression* SExpressionWasmBuilder::makeCall(Element& s) { ret->target = target; ret->type = functionTypes[ret->target]; parseCallOperands(s, 2, s.size(), ret); + ret->finalize(); return ret; } @@ -1219,6 +1224,7 @@ Expression* SExpressionWasmBuilder::makeCallImport(Element& s) { Import* import = wasm.getImport(ret->target); ret->type = wasm.getFunctionType(import->functionType)->result; parseCallOperands(s, 2, s.size(), ret); + ret->finalize(); return ret; } @@ -1232,6 +1238,7 @@ Expression* SExpressionWasmBuilder::makeCallIndirect(Element& s) { ret->type = fullType->result; parseCallOperands(s, 2, s.size() - 1, ret); ret->target = parseExpression(s[s.size() - 1]); + ret->finalize(); return ret; } |