diff options
author | Alon Zakai <alonzakai@gmail.com> | 2017-07-22 21:07:03 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2017-07-22 21:07:03 -0700 |
commit | 93dcb15eba5051f36dad86d479935dede6f0b05f (patch) | |
tree | 9cd4269fbc5a876ff98447a9d8d74cf1015b64d1 /src | |
parent | cfe0fa129be2022ba9521bbd9355bd4b0aa1f01d (diff) | |
download | binaryen-93dcb15eba5051f36dad86d479935dede6f0b05f.tar.gz binaryen-93dcb15eba5051f36dad86d479935dede6f0b05f.tar.bz2 binaryen-93dcb15eba5051f36dad86d479935dede6f0b05f.zip |
ignore untaken branches in determining block type
Diffstat (limited to 'src')
-rw-r--r-- | src/wasm/wasm.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/wasm/wasm.cpp b/src/wasm/wasm.cpp index 4f5f46f0a..635d14354 100644 --- a/src/wasm/wasm.cpp +++ b/src/wasm/wasm.cpp @@ -109,18 +109,20 @@ struct TypeSeeker : public PostWalker<TypeSeeker> { Name targetName; std::vector<WasmType> types; + TypeSeeker(Expression* target, Name targetName) : target(target), targetName(targetName) { Expression* temp = target; walk(temp); } void visitBreak(Break* curr) { - if (curr->name == targetName) { + if (curr->name == targetName && BranchUtils::isBranchTaken(curr)) { types.push_back(curr->value ? curr->value->type : none); } } void visitSwitch(Switch* curr) { + if (!BranchUtils::isBranchTaken(curr)) return; for (auto name : curr->targets) { if (name == targetName) types.push_back(curr->value ? curr->value->type : none); } |