diff options
author | Alon Zakai <alonzakai@gmail.com> | 2018-03-19 12:56:07 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-19 12:56:07 -0700 |
commit | 9c9b78db2e6ce178cc0c546d59aacaa4c72c001b (patch) | |
tree | 4b130209b6641f47304299c311a36f07caaca795 /src | |
parent | c52f23608e33ab972cfa187409e8c78793103d4b (diff) | |
download | binaryen-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.cpp | 3 | ||||
-rw-r--r-- | src/passes/pass.cpp | 2 |
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); |