summaryrefslogtreecommitdiff
path: root/src/cfg/Relooper.cpp
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2017-05-21 08:07:56 -0700
committerGitHub <noreply@github.com>2017-05-21 08:07:56 -0700
commit21cb9e8fa9f12680df0a25d969c935c79b388d3e (patch)
treee26a0fd5865003a7a18ab8735ff6411fc2bf465f /src/cfg/Relooper.cpp
parent9e0958982d2044949746c2d8290dbc0368546ebf (diff)
parent026accbe55dde6b9d769292195c3ad1ac0a3b8b0 (diff)
downloadbinaryen-21cb9e8fa9f12680df0a25d969c935c79b388d3e.tar.gz
binaryen-21cb9e8fa9f12680df0a25d969c935c79b388d3e.tar.bz2
binaryen-21cb9e8fa9f12680df0a25d969c935c79b388d3e.zip
Merge pull request #1019 from WebAssembly/fuzz
More fuzz bug fixes
Diffstat (limited to 'src/cfg/Relooper.cpp')
-rw-r--r--src/cfg/Relooper.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/cfg/Relooper.cpp b/src/cfg/Relooper.cpp
index 9fcc9c8be..b326d761d 100644
--- a/src/cfg/Relooper.cpp
+++ b/src/cfg/Relooper.cpp
@@ -328,7 +328,12 @@ wasm::Expression* Block::Render(RelooperBuilder& Builder, bool InLoop) {
NextOuter->list.push_back(Outer);
Outer->name = CurrName; // breaking on Outer leads to the content in NextOuter
NextOuter->list.push_back(CurrContent);
- NextOuter->list.push_back(Builder.makeBreak(SwitchLeave));
+ // if this is not a dead end, also need to break to the outside
+ // this is both an optimization, and avoids incorrectness as adding
+ // a brak in unreachable code can make a place look reachable that isn't
+ if (CurrContent->type != wasm::unreachable) {
+ NextOuter->list.push_back(Builder.makeBreak(SwitchLeave));
+ }
// prepare for more nesting
Outer = NextOuter;
} else {