summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMax Graey <maxgraey@gmail.com>2020-08-23 18:20:22 +0300
committerGitHub <noreply@github.com>2020-08-23 08:20:22 -0700
commit1f439f7227f2d1f2d15d058ec5acdb41556cb9bb (patch)
treee6c2a7ec174923713ca0cda6fc0daa0efa83b768 /src
parentfa83375d2bed8802de67e1689e056209561636e6 (diff)
downloadbinaryen-1f439f7227f2d1f2d15d058ec5acdb41556cb9bb.tar.gz
binaryen-1f439f7227f2d1f2d15d058ec5acdb41556cb9bb.tar.bz2
binaryen-1f439f7227f2d1f2d15d058ec5acdb41556cb9bb.zip
OptimizeInstructions on memory.copy: check size for side effect as well (#3072)
Fix issue found by fuzzer: #3038 (comment)
Diffstat (limited to 'src')
-rw-r--r--src/passes/OptimizeInstructions.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/passes/OptimizeInstructions.cpp b/src/passes/OptimizeInstructions.cpp
index b8f038dac..b7bbebf89 100644
--- a/src/passes/OptimizeInstructions.cpp
+++ b/src/passes/OptimizeInstructions.cpp
@@ -1404,6 +1404,8 @@ private:
// memory.copy(x, x, sz) ==> nop
if (!EffectAnalyzer(getPassOptions(), features, memCopy->dest)
.hasSideEffects() &&
+ !EffectAnalyzer(getPassOptions(), features, memCopy->size)
+ .hasSideEffects() &&
ExpressionAnalyzer::equal(memCopy->dest, memCopy->source)) {
return ExpressionManipulator::nop(memCopy);
}