Skip to content

Commit 1f439f7

Browse files
authored
OptimizeInstructions on memory.copy: check size for side effect as well (#3072)
Fix issue found by fuzzer: #3038 (comment)
1 parent fa83375 commit 1f439f7

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

src/passes/OptimizeInstructions.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1404,6 +1404,8 @@ struct OptimizeInstructions
14041404
// memory.copy(x, x, sz) ==> nop
14051405
if (!EffectAnalyzer(getPassOptions(), features, memCopy->dest)
14061406
.hasSideEffects() &&
1407+
!EffectAnalyzer(getPassOptions(), features, memCopy->size)
1408+
.hasSideEffects() &&
14071409
ExpressionAnalyzer::equal(memCopy->dest, memCopy->source)) {
14081410
return ExpressionManipulator::nop(memCopy);
14091411
}

test/passes/optimize-instructions_all-features.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3793,6 +3793,13 @@
37933793
(local.get $src)
37943794
(local.get $sz)
37953795
)
3796+
(memory.copy
3797+
(i32.const 0)
3798+
(i32.const 0)
3799+
(i32.load
3800+
(i32.const 3)
3801+
)
3802+
)
37963803
)
37973804
)
37983805
(module

test/passes/optimize-instructions_all-features.wast

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4294,7 +4294,7 @@
42944294
(i32.const 8)
42954295
)
42964296

4297-
(memory.copy
4297+
(memory.copy
42984298
(local.get $dst)
42994299
(local.get $src)
43004300
(i32.const 16)
@@ -4305,6 +4305,14 @@
43054305
(local.get $src)
43064306
(local.get $sz)
43074307
)
4308+
4309+
(memory.copy ;; skip
4310+
(i32.const 0)
4311+
(i32.const 0)
4312+
(i32.load
4313+
(i32.const 3) ;; side effect
4314+
)
4315+
)
43084316
)
43094317
)
43104318
(module

0 commit comments

Comments
 (0)