summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2018-03-19 12:56:07 -0700
committerGitHub <noreply@github.com>2018-03-19 12:56:07 -0700
commit9c9b78db2e6ce178cc0c546d59aacaa4c72c001b (patch)
tree4b130209b6641f47304299c311a36f07caaca795 /src
parentc52f23608e33ab972cfa187409e8c78793103d4b (diff)
downloadbinaryen-9c9b78db2e6ce178cc0c546d59aacaa4c72c001b.tar.gz
binaryen-9c9b78db2e6ce178cc0c546d59aacaa4c72c001b.tar.bz2
binaryen-9c9b78db2e6ce178cc0c546d59aacaa4c72c001b.zip
fix a fuzz bug in fpcast-emu: if the call_indirect we are modifying is unreachable, the modified version is as well (#1481)
Diffstat (limited to 'src')
-rw-r--r--src/passes/FuncCastEmulation.cpp3
-rw-r--r--src/passes/pass.cpp2
2 files changed, 3 insertions, 2 deletions
diff --git a/src/passes/FuncCastEmulation.cpp b/src/passes/FuncCastEmulation.cpp
index 59a2588da..013e9403e 100644
--- a/src/passes/FuncCastEmulation.cpp
+++ b/src/passes/FuncCastEmulation.cpp
@@ -142,9 +142,10 @@ struct ParallelFuncCastEmulation : public WalkerPass<PostWalker<ParallelFuncCast
curr->operands.push_back(LiteralUtils::makeZero(i64, *getModule()));
}
// Set the new types
+ curr->fullType = ABIType;
auto oldType = curr->type;
curr->type = i64;
- curr->fullType = ABIType;
+ curr->finalize(); // may be unreachable
// Fix up return value
replaceCurrent(fromABI(curr, oldType, getModule()));
}
diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp
index 6518a6f3d..be7365998 100644
--- a/src/passes/pass.cpp
+++ b/src/passes/pass.cpp
@@ -98,7 +98,6 @@ void PassRegistry::registerPasses() {
registerPass("print-minified", "print in minified s-expression format", createMinifiedPrinterPass);
registerPass("print-full", "print in full s-expression format", createFullPrinterPass);
registerPass("print-call-graph", "print call graph", createPrintCallGraphPass);
- registerPass("rse", "remove redundant set_locals", createRedundantSetEliminationPass);
registerPass("relooper-jump-threading", "thread relooper jumps (fastcomp output only)", createRelooperJumpThreadingPass);
registerPass("remove-imports", "removes imports and replaces them with nops", createRemoveImportsPass);
registerPass("remove-memory", "removes memory segments", createRemoveMemoryPass);
@@ -108,6 +107,7 @@ void PassRegistry::registerPasses() {
registerPass("reorder-functions", "sorts functions by access frequency", createReorderFunctionsPass);
registerPass("reorder-locals", "sorts locals by access frequency", createReorderLocalsPass);
registerPass("rereloop", "re-optimize control flow using the relooper algorithm", createReReloopPass);
+ registerPass("rse", "remove redundant set_locals", createRedundantSetEliminationPass);
registerPass("simplify-locals", "miscellaneous locals-related optimizations", createSimplifyLocalsPass);
registerPass("safe-heap", "instrument loads and stores to check for invalid behavior", createSafeHeapPass);
registerPass("simplify-locals-notee", "miscellaneous locals-related optimizations", createSimplifyLocalsNoTeePass);