diff --git a/crates/swc_ecma_minifier/src/compress/util/mod.rs b/crates/swc_ecma_minifier/src/compress/util/mod.rs index eed2bbc304a0..8ed2d15a7831 100644 --- a/crates/swc_ecma_minifier/src/compress/util/mod.rs +++ b/crates/swc_ecma_minifier/src/compress/util/mod.rs @@ -760,12 +760,12 @@ impl Visit for SuperFinder { } fn cmp_num(a: f64, b: f64) -> Ordering { - if a == -0.0 && b == 0.0 { - return Ordering::Greater; + if a == 0.0 && a.is_sign_negative() && b == 0.0 && b.is_sign_positive() { + return Ordering::Less; } - if a == 0.0 && b == -0.0 { - return Ordering::Less; + if a == 0.0 && a.is_sign_positive() && b == 0.0 && b.is_sign_negative() { + return Ordering::Greater; } a.partial_cmp(&b).unwrap() diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/9007/input.js b/crates/swc_ecma_minifier/tests/fixture/issues/9007/input.js new file mode 100644 index 000000000000..4cb74ed269e6 --- /dev/null +++ b/crates/swc_ecma_minifier/tests/fixture/issues/9007/input.js @@ -0,0 +1,4 @@ +console.log(Math.min(-0, 0)) +console.log(Math.min(0, -0)) +console.log(Math.max(-0, 0)) +console.log(Math.max(0, -0)) \ No newline at end of file diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/9007/output.js b/crates/swc_ecma_minifier/tests/fixture/issues/9007/output.js new file mode 100644 index 000000000000..4861fafca517 --- /dev/null +++ b/crates/swc_ecma_minifier/tests/fixture/issues/9007/output.js @@ -0,0 +1 @@ +console.log(-0), console.log(-0), console.log(0), console.log(0);