diff options
author | Alon Zakai <azakai@google.com> | 2020-11-12 06:46:22 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-12 06:46:22 -0800 |
commit | d41782f9cac8cb059ccc03f69e10d44849e3d10f (patch) | |
tree | 56fcb1ad85ccaae824aae777ea4318ba1449504f /test/passes/optimize-instructions_fuzz-exec.txt | |
parent | 24bd9b984fc71c38d3d24c5f03fa81a15d591322 (diff) | |
download | binaryen-d41782f9cac8cb059ccc03f69e10d44849e3d10f.tar.gz binaryen-d41782f9cac8cb059ccc03f69e10d44849e3d10f.tar.bz2 binaryen-d41782f9cac8cb059ccc03f69e10d44849e3d10f.zip |
OptimizeInstructions: Fix regression from #3303 / #3275 (#3338)
X - Y <= 0
=>
X <= Y
That is true mathematically, but not in the case of an overflow, e.g.
X=10, Y=0x8000000000000000. X - Y is a negative number, so
X - Y <= 0 is true. But it is not true that X <= Y (as Y is negative, but
X is not).
See discussion in #3303 (comment)
The actual regression was in #3275, but the fuzzer had an easier time
finding it due to #3303
Diffstat (limited to 'test/passes/optimize-instructions_fuzz-exec.txt')
-rw-r--r-- | test/passes/optimize-instructions_fuzz-exec.txt | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/test/passes/optimize-instructions_fuzz-exec.txt b/test/passes/optimize-instructions_fuzz-exec.txt index 548148e09..5da803fb1 100644 --- a/test/passes/optimize-instructions_fuzz-exec.txt +++ b/test/passes/optimize-instructions_fuzz-exec.txt @@ -253,3 +253,41 @@ [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] +[fuzz-exec] calling foo +[LoggingExternalInterface logging 1] +[LoggingExternalInterface logging 1] +[LoggingExternalInterface logging 0] +(module + (type $i32_=>_none (func (param i32))) + (import "fuzzing-support" "log-i32" (func $log (param i32))) + (export "foo" (func $0)) + (func $0 (param $0 i32) + (call $log + (i32.le_s + (i32.sub + (i32.const 8) + (block $label$1 (result i32) + (i32.const -2147483648) + ) + ) + (i32.const 0) + ) + ) + (call $log + (i32.le_s + (i32.const -2147483640) + (i32.const 0) + ) + ) + (call $log + (i32.eq + (i32.const 8) + (i32.const -2147483648) + ) + ) + ) +) +[fuzz-exec] calling foo +[LoggingExternalInterface logging 1] +[LoggingExternalInterface logging 1] +[LoggingExternalInterface logging 0] |