Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ufuzz failure #3684

Closed
alexlamsl opened this issue Jan 15, 2020 · 1 comment · Fixed by #3685
Closed

ufuzz failure #3684

alexlamsl opened this issue Jan 15, 2020 · 1 comment · Fixed by #3685
Labels

Comments

@alexlamsl
Copy link
Collaborator

// original code
// (beautified)
var _calls_ = 10, a = 100, b = 10, c = 0;

function f0(NaN_1, b_2) {
    {
        var Math_1 = function f1(foo_2, b_1) {
        }();
    }
    {
        var expr4 = ++a;
        L21442: for (var key4 in expr4) {
            c = 1 + c;
            var b_2 = expr4[key4];
            if (((-0 == "c") >>> (-4 != true)) + ([] <= -3 | (/[a2][^e]+$/ && -5))) {
                switch (a++ + typeof (--b + (b_2 && b_2[typeof f0 == "function" && --_calls_ >= 0 && f0(a++ + (typeof b_1 === "string"), --b + (typeof Math_1 == "function" && --_calls_ >= 0 && Math_1((c = 1 + c, 
                (c = c + 1, -4 * false) + delete (-4 / -0)), (c = 1 + c, (true << -5 && {} >>> "bar") / (b_2 += ("function" || null) + (0 - false))))))]))) {
                  case !b:
                    break;

                  default:
                    try {
                        {
                            c = c + 1;
                            {
                                var b_1 = function b_2(foo_2, a_2) {
                                }((c = 1 + c, ("c" ^ -0) >= (b_2 && (b_2.a = -3 % ([ , 0 ].length === 2))) < (1 === 4) >>> -"function"), (c = 1 + c, 
                                b_2 && (b_2.var = ([ , 0 ].length === 2 | NaN) / (23..toString() ^ []) << ((-2, 
                                Infinity) ^ (NaN, "undefined")))));
                            }
                            try {
                                L21443: for (var brake12 = 5; (c = 1 + c, ("" & [ , 0 ][1], c = c + 1, [ , 0 ].length === 2) || 24..toString() << -3 && (b_1 -= -0 && Infinity)) && brake12 > 0; --brake12) {
                                    c = 1 + c, this === 23..toString() !== /[a2][^e]+$/ >>> -1 != (c = c + 1, 2 ^ "foo");
                                }
                            } catch (c_2) {
                                c = 1 + c, (("b", true) | -2 ^ NaN) === (22 ^ "c") % (c = c + 1, this);
                                c = 1 + c, c = c + 1, Math_1 && (Math_1.c += false === "b" ^ false != "number");
                            } finally {
                                c = 1 + c, ("c" == {} == Infinity * /[a2][^e]+$/) << ([ , 0 ][1] === undefined) % ("object" || this);
                                c = 1 + c, c = c + 1, c = c + 1, -5 != 23..toString();
                            }
                            {
                                var expr18 = --b + {};
                                for (var key18 in expr18) {
                                    c = 1 + c;
                                    var a = expr18[key18];
                                    {
                                        throw c = 1 + c, -2 !== "b" & (this && -3) ^ (this > "c" ^ 3 != undefined);
                                    }
                                }
                            }
                        }
                    } catch (b_2) {
                        {
                            var brake20 = 5;
                            while ({
                                null: (c = 1 + c, (b_2 && (b_2.NaN += (undefined == true) / (b_2 = 2 | 24..toString()))) >> ((c = c + 1, 
                                -0) ^ "object" < this)),
                                b: (c = 1 + c, (23..toString() << 2) % (-4 === 22) | ([ , 0 ].length === 2) >> [ , 0 ][1] <= (c = c + 1, 
                                "bar")),
                                Infinity: (c = 1 + c, (5 != -4) > (-1 & -5) | ("foo" % [ , 0 ][1] | -5 & 24..toString())),
                                3: (c = 1 + c, (-4 >> -4) / ([] >= 3) && 22 / false + (undefined - "b"))
                            }[--b + (typeof b_2_1 == "symbol")] && --brake20 > 0) {}
                        }
                        c = c + 1;
                    } finally {
                        {
                            var brake23 = 5;
                            do {
                                {
                                    var brake24 = 5;
                                    do {
                                        {
                                            var brake25 = 5;
                                            L21444: do {
                                                c = 1 + c, (undefined / 1 != (Math_1 && (Math_1[c = 1 + c, delete ([] <= 38..toString() >= ("foo" | {}))] <<= 38..toString() || 5))) * (23..toString() >= 1 != false >> 5);
                                            } while ((c = 1 + c, !(+ -0 != [] >>> {})) && --brake25 > 0);
                                        }
                                    } while (typeof foo_1 != "object" && --brake24 > 0);
                                }
                            } while ({
                                in: (c = 1 + c, -5 + "number" << Infinity * this !== (3 << this & "foo" << -0)),
                                Infinity: (c = 1 + c, (NaN ^ "undefined") + ("number" - -1) ^ ("" & Infinity) == (null ^ -4))
                            }[(c = c + 1) + !((38..toString() >= "number" <= null >> "number") + (Math_1 && (Math_1[--b + a++] %= -4 + undefined > (-4 == 24..toString()))))] && --brake23 > 0);
                        }
                        for (var brake27 = 5; [] && brake27 > 0; --brake27) {
                            var brake28 = 5;
                            do {
                                c = c + 1;
                            } while (--b + ((c = 1 + c, (4 == "number") / (2 == true) > (25 != 24..toString()) >>> ("function" >>> ([ , 0 ].length === 2))) || a || 3).toString() && --brake28 > 0);
                        }
                    }

                  case b_2 && b_2[(c = c + 1) + (typeof f3 == "function" && --_calls_ >= 0 && f3(a++ + ((c = c + 1) + ~b), -5, a++ + (0 === 1 ? a : b)))]:
                    {
                        var a_1 = function f2() {
                            {
                                var expr31 = -(-5 * "undefined" + "" % "bar" === ("b" & "undefined") - (-4 & 0));
                                for (var key31 in expr31) {
                                    {
                                        return;
                                        c = 1 + c, (b_1 = 24..toString() > true) - ("bar" > "foo") & [] * /[a2][^e]+$/ >> (null > Infinity);
                                    }
                                }
                            }
                            if (a++) {
                                c = c + 1;
                            }
                        }(NaN_1, []);
                    }
                    break;

                  case (c = c + 1) + (typeof Math_1 == "function" && --_calls_ >= 0 && Math_1()):
                    {
                        var brake35 = 5;
                        L21445: do {
                        } while (a++ + Math_1 && --brake35 > 0);
                    }
                    return NaN_1;
                }
            } else {
                try {
                    switch (typeof Math_1 == "function" && --_calls_ >= 0 && Math_1()) {
                      case (c = c + 1) + (1 === 1 ? a : b):
                        for (var brake40 = 5; --b + (a++ + !function() {}()) && brake40 > 0; --brake40) {
                            L21446: for (var brake41 = 5; --b + (typeof Math_1 == "function" && --_calls_ >= 0 && Math_1((c = 1 + c, 
                            (b_2 && (b_2[b = a] = 5 >>> NaN ^ 24..toString() == NaN)) < (0 <= 23..toString(), 
                            "number" && 4)), 4)) && brake41 > 0; --brake41) {}
                        }
                        {
                            var brake43 = 5;
                            L21447: do {
                                switch (a++ + a--) {
                                  case (c = c + 1) + (typeof f4 == "function" && --_calls_ >= 0 && f4((c = 1 + c, (c = c + 1, 
                                    [ , 0 ][1] && "number") == (25 << 24..toString()) + ("object" >>> ([ , 0 ].length === 2))), (c = 1 + c, 
                                    ({} !== [] ^ "object" != 1) >> ((23..toString() == ([ , 0 ].length === 2)) >>> 38..toString() % 5)))):
                                    c = c + 1;
                                    {
                                        var brake46 = 5;
                                        while ((c = 1 + c, ("bar" >> true) + (2 || 4) != (false % 5 ^ 2 !== -3)) && --brake46 > 0) {
                                            c = 1 + c, c = c + 1, "undefined" & 24..toString() || -0 * "function";
                                        }
                                    }
                                    break;

                                  case b + 1 - .1 - .1 - .1:
                                    {
                                        var brake48 = 5;
                                        L21448: do {
                                            c = 1 + c, (5 >= -1) - (25 === "number") > (undefined - 25 === "" << 1);
                                        } while ((c = 1 + c, ("b" >> 38..toString() >= (-2 != -0)) >>> ((b_2 += 22 <= 0) === (3 !== 0))) && --brake48 > 0);
                                    }
                                    break;

                                  default:
                                    switch (c = 1 + c, 38..toString() / "c" % (true <= 5) & 2 % "undefined" / ([ , 0 ][1] * "foo")) {
                                      default:
                                        ;

                                      case c = 1 + c, b_1 = (Infinity || "foo") >>> (-3 === 25) === ((-1 & 1) !== (b_2 && (b_2.in = "c" || this))):
                                        ;
                                        break;

                                      case c = 1 + c, (-5 ^ []) + (c = c + 1, "number") >>> (24..toString() < null) - (Infinity > {}):
                                        ;

                                      case c = 1 + c, (c = c + 1, -4 ^ -3) == ((c = c + 1, -2) === (NaN_1 && (NaN_1[c = 1 + c, 
                                        -(1 && 2) <= (false | -0) << "c" + -3] += /[a2][^e]+$/ && 5))):
                                        ;
                                        break;
                                    }
                                    if (c = 1 + c, -5 * 1 >= (2 | /[a2][^e]+$/) < ((b_2 && (b_2[c = 1 + c, (24..toString() >> undefined ^ ~-3) < ((null ^ -1) == "number" <= "b")] = "foo" ^ "bar")) !== 24..toString() * 22)) {
                                        c = 1 + c, ([ , 0 ].length === 2 & undefined) % (this == "c") && /[a2][^e]+$/ << false < (25 ^ null);
                                    }

                                  case 1 === 1 ? a : b:
                                    c = 1 + c, (a_1 && (a_1[a++ + 25] ^= (-4 != "a") + ("function", "undefined"))) <= (b_2 = 2 ^ -0) << "object" % {};
                                    L21449: for (var brake54 = 5; (c = 1 + c, ((null && "bar") ^ null === 23..toString()) >= ("foo" != "b" == "undefined" >> 24..toString())) && brake54 > 0; --brake54) {
                                        c = 1 + c, (b_1 && (b_1[a++ + ((c = 1 + c, b_1 = "foo" >>> null & 23..toString() + NaN & (this >= undefined & "c" % "undefined")) || a || 3).toString()] = -1 || (c = c + 1, 
                                        25))) / (23..toString() - 24..toString() && 22 < 24..toString());
                                    }
                                }
                            } while ((c = c + 1) + (a_1 && a_1.undefined) && --brake43 > 0);
                        }
                        break;

                      default:
                        c = c + 1;

                      case (c = c + 1) + (typeof f1 == "function" && --_calls_ >= 0 && f1()):
                        break;

                      case !function Infinity() {
                            switch ((c = c + 1) + (typeof f1 == "function" && --_calls_ >= 0 && f1())) {
                              case a++ + delete a:
                                {
                                    return c = 1 + c, (this || this || 22 - 22) ^ (b_1 && (b_1.a |= ("undefined" | []) <= ([ , 0 ].length === 2 == "")));
                                }

                              case b--:
                                var bar = (c = 1 + c, ("a" == 5 === (c = c + 1, [])) % (("b" | "b") <= (/[a2][^e]+$/ ^ Infinity)));
                                {
                                }
                                break;

                              default:
                                if (c = 1 + c, ("number" != "object" ^ [] >> -0) & ((0 | 1) ^ -2 === -3)) {
                                    c = 1 + c, void ((b_1 %= ("b", 24..toString())) <= "c" + -2);
                                } else {
                                    c = 1 + c, (1 == 1) / (5, "number") !== (-0 % -2 != true >= 3);
                                }

                              case (c = c + 1) + ~a:
                                var bar_2;
                                switch (c = 1 + c, -(([ , 0 ].length === 2 && -0) !== ~-2)) {
                                  case c = 1 + c, b_2 && (b_2[a++ + (typeof f4 == "function" && --_calls_ >= 0 && f4("function", "object", -5))] = (-25 && this & {}) !== (b_2 = (b_2 /= "bar" >>> 3) / ("undefined" * -5))):
                                    ;
                                    break;

                                  default:
                                    ;

                                  case c = 1 + c, (b_1 = (22 < "bar") - (5 != "undefined")) || 25 !== -0 !== ({} == "number"):
                                    ;
                                    break;

                                  case c = 1 + c, b_2 += -"function" - ([ , 0 ].length === 2) * "c" >>> (-3 > "" != ("bar" ^ -2)):
                                    ;
                                    break;
                                }
                                break;
                            }
                        }():
                    }
                } finally {
                    var b_2_1 = a++ + typeof parseInt;
                    if ((c = c + 1) + [ [ (c = 1 + c, (b_2 && (b_2[--b + (c = 1 + c, (b_2 && (b_2.in = (false <= Infinity) / (1 ^ null))) === (38..toString() !== 3) % (c = c + 1, 
                    "undefined"))] /= (NaN_1 && (NaN_1[c = 1 + c, ("foo" == ([ , 0 ].length === 2) && [ , 0 ].length === 2 != -4) | (this ^ 38..toString()) & (Infinity & [ , 0 ].length === 2)] = 23..toString() & [ , 0 ][1])) ^ ("c" && "number"))) << (3 != 24..toString() | -3 - /[a2][^e]+$/)), (c = 1 + c, 
                    void ((b_2 && (b_2.Infinity = ([ , 0 ].length === 2) >> 4)) + (-5 & -5))) ] ][--b + (typeof b_1 == "function" && --_calls_ >= 0 && b_1())]) {
                        switch ([ a++ + ((-4 && -1 && "c" << [ , 0 ][1]) > ((0 && "object") < ([ , 0 ].length === 2) << "object")), , (c = c + 1) + (b_2_1 &= (c = 1 + c, 
                        (NaN_1 && (NaN_1.c = (22 | "foo") << (-1 ^ 23..toString()))) - (-2 != this) * (3, 
                        4))), ((c = 1 + c, (Math_1 <<= (24..toString() & "foo") >= ([ , 0 ][1] <= "function")) ^ 4 - -5 != (1 ^ "")) || a || 3).toString() ]) {
                          default:
                          case !a:
                            break;

                          case b_2_1 && b_2_1.foo:
                            if (-(("number" && "foo" || 22 ^ "a") / (a_1 && (a_1.c = "b" || false) || [] != 1))) {
                                L21450: for (var brake70 = 5; (c = 1 + c, (this >= -3 || (Infinity, [ , 0 ].length === 2)) < (this <= this <= [] - "undefined")) && brake70 > 0; --brake70) {
                                    c = 1 + c, ((b_1 && (b_1.NaN += /[a2][^e]+$/ != ([ , 0 ].length === 2))) > (b_2 = "undefined" * -2)) >>> ((null || NaN) > "bar" - -0);
                                }
                            }
                            break;

                          case undefined:
                            break;
                        }
                    } else {
                        var NaN_1_1 = function f3(b_2, b_2) {
                            {
                            }
                            {
                                var brake74 = 5;
                                while ((c = 1 + c, (b_1 && (b_1.c *= 25 | [ , 0 ][1])) !== - -5 & (-3 <= -0) + (c = c + 1, 
                                "number")) && --brake74 > 0) {
                                    c = 1 + c, (38..toString() <= "b", ([ , 0 ].length === 2) - NaN) ^ ((c = c + 1, 
                                    Infinity) | 2 / "function");
                                }
                            }
                        }();
                    }
                }
            }
        }
    }
}

var arguments = f0("", a = (0 & this) / (1 + -5) + ("" / "bar" ^ (/[a2][^e]+$/ | Infinity)));

console.log(null, a, b, c, Infinity, NaN, undefined);
// uglified code
// (beautified)
var _calls_ = 10, a = 100, b = 10, c = 0;

function f0(NaN_1, b_2) {
    var Math_1 = void 0, expr4 = ++a;
    for (var key4 in expr4) {
        c = 1 + c;
        b_2 = expr4[key4];
        if ([] <= -3 | -5) {
            switch (a++ + typeof (--b + (b_2 && b_2["function" == typeof f0 && 0 <= --_calls_ && f0(a++ + ("string" == typeof b_1), --b + ("function" == typeof Math_1 && 0 <= --_calls_ && Math_1((c = 1 + c, 
            c += 1, 1), (c = 1 + c, ({} >>> "bar") / (b_2 += "function0")))))]))) {
              case !b:
                break;

              default:
                try {
                    var b_1 = (c = 1 + (c += 1), b_2 && (b_2.a = -3 % (2 === [ , 0 ].length)), c = 1 + c, 
                    void (b_2 && (b_2.var = (2 === [ , 0 ].length | NaN) / (23..toString() ^ []) << 0)));
                    try {
                        for (var brake12 = 5; c = 1 + c, c += 1, (2 === [ , 0 ].length || 24..toString() << -3 && (b_1 -= -0)) && 0 < brake12; --brake12) {
                            c = 1 + c, 23..toString(), c += 1;
                        }
                    } catch (c_2) {
                        c = 1 + c, c = 1 + (c += 1), c += 1, Math_1 && (Math_1.c += 1);
                    } finally {
                        c = 1 + (c = 1 + c), c += 1, c += 1, 23..toString();
                    }
                    var expr18 = --b + {};
                    for (var key18 in expr18) {
                        var a = expr18[key18];
                        throw c = 1 + (c = 1 + c), !0 & (this && -3) ^ "c" < this ^ !0;
                    }
                } catch (b_2) {
                    for (var brake20 = 5; {
                        null: (c = 1 + c, (b_2 && (b_2.NaN += !1 / (b_2 = 2 | 24..toString()))) >> (-0 ^ "object" < this)),
                        b: (c = 1 + (c += 1), (23..toString() << 2) % !1 | (2 === [ , 0 ].length) >> 0 <= "bar"),
                        Infinity: (c = 1 + (c += 1), NaN | -5 & 24..toString() | !0),
                        3: (c = 1 + c, -1 / (3 <= []) && NaN)
                    }[--b + ("symbol" == typeof b_2_1)] && 0 < --brake20; ) {}
                    c += 1;
                } finally {
                    var brake23 = 5;
                    do {
                        var brake24 = 5;
                        do {
                            for (var brake25 = 5; c = 1 + c, Math_1 && (Math_1[c = 1 + c, 38..toString(), !0] <<= 38..toString() || 5), 
                            23..toString(), c = 1 + c, -0 == [] >>> {} && 0 < --brake25; ) {}
                        } while ("object" != typeof foo_1 && 0 < --brake24);
                    } while ({
                        in: "-5number" << 1 / 0 * this != (3 << this & 0),
                        Infinity: (c = 1 + (c = 1 + c), 0)
                    }[(c += 1) + !(("number" <= 38..toString() <= 0) + (Math_1 && (Math_1[--b + a++] %= (-4 == 24..toString()) < NaN)))] && 0 < --brake23);
                    for (var brake27 = 5; 0 < brake27; --brake27) {
                        for (var brake28 = 5; --b + (c = 1 + (c += 1), (25 != 24..toString()) >>> ("function" >>> (2 === [ , 0 ].length)) < NaN || a || 3).toString() && 0 < --brake28; ) {}
                    }
                }

              case b_2 && b_2[(c += 1) + ("function" == typeof f3 && 0 <= --_calls_ && f3(a++ + ((c += 1) + ~b), -5, a++ + b))]:
                var a_1 = function() {
                    for (var key31 in -0) {
                        return;
                    }
                    a++ && (c += 1);
                }();
                break;

              case (c += 1) + ("function" == typeof Math_1 && 0 <= --_calls_ && Math_1()):
                var brake35 = 5;
                do {} while (a++ + Math_1 && 0 < --brake35);
                return NaN_1;
            }
        } else {
            try {
                switch ("function" == typeof Math_1 && 0 <= --_calls_ && Math_1()) {
                  case (c += 1) + a:
                    for (var brake40 = 5; --b + (a++ + !0) && 0 < brake40; --brake40) {
                        for (var brake41 = 5; --b + ("function" == typeof Math_1 && 0 <= --_calls_ && Math_1((c = 1 + c, 
                        (b_2 && (b_2[b = a] = 5 ^ NaN == 24..toString())) < (23..toString(), 4)), 4)) && 0 < brake41; --brake41) {}
                    }
                    var brake43 = 5;
                    do {
                        switch (a++ + a--) {
                          case (c += 1) + ("function" == typeof f4 && 0 <= --_calls_ && f4((c = 1 + c, c += 1, 
                            0 == (25 << 24..toString()) + ("object" >>> (2 === [ , 0 ].length))), (c = 1 + c, 
                            ({} !== [] ^ !0) >> ((23..toString() == (2 === [ , 0 ].length)) >>> 38..toString() % 5)))):
                            c += 1;
                            for (var brake46 = 5; c = 1 + c, 0 < --brake46; ) {
                                c = 1 + c, c += 1, 24..toString();
                            }
                            break;

                          case b + 1 - .1 - .1 - .1:
                            for (var brake48 = 5; c = 1 + (c = 1 + c), (!0 <= "b" >> 38..toString()) >>> (!0 === (b_2 += !1)) && 0 < --brake48; ) {}
                            break;

                          default:
                            switch (c = 1 + c, 38..toString() / "c" % !0 & NaN) {
                              default:
                              case c = 1 + c, b_1 = 0 === (1 !== (b_2 && (b_2.in = "c"))):
                                break;

                              case c = 1 + c, (-5 ^ []) + (c += 1, "number") >>> (24..toString() < null) - ({} < 1 / 0):
                              case c = 1 + c, c += 1, 1 == (c += 1, -2 === (NaN_1 && (NaN_1[c = 1 + c, !0] += 5))):
                            }
                            c = 1 + c, !1 < ((b_2 && (b_2[c = 1 + c, (24..toString() >> void 0 ^ 2) < !1] = 0)) !== 22 * 24..toString()) && (c = 1 + c);

                          case a:
                            c = 1 + c, a_1 && (a_1[25 + a++] ^= !0 + "undefined"), b_2 = 2;
                            for (var brake54 = 5; c = 1 + c, (null ^ null === 23..toString()) >= (1 == "undefined" >> 24..toString()) && 0 < brake54; --brake54) {
                                c = 1 + c, b_1 && (b_1[a++ + (c = 1 + c, (b_1 = 0 & 23..toString() + NaN & void 0 <= this & NaN) || a || 3).toString()] = -1), 
                                23..toString() - 24..toString() && 24..toString();
                            }
                        }
                    } while ((c += 1) + (a_1 && a_1.undefined) && 0 < --brake43);
                    break;

                  default:
                    c += 1;

                  case (c += 1) + ("function" == typeof f1 && 0 <= --_calls_ && f1()):
                    break;

                  case !function() {
                        switch ((c += 1) + ("function" == typeof f1 && 0 <= --_calls_ && f1())) {
                          case a++ + delete a:
                            return c = 1 + c, (this || this || 0) ^ (b_1 && (b_1.a |= ("undefined" | []) <= (2 === [ , 0 ].length == "")));

                          case b--:
                            c = 1 + c, c += 1;
                            break;

                          default:
                            c = 1 + c, 1 & (!0 ^ [] >> -0) ? (c = 1 + c, b_1 %= 24..toString()) : c = 1 + c;

                          case (c += 1) + ~a:
                            switch (-(1 !== (2 === [ , 0 ].length && -0))) {
                              case c = 1 + (c = 1 + c), b_2 && (b_2[a++ + ("function" == typeof f4 && 0 <= --_calls_ && f4("function", "object", -5))] = (this & {}) != (b_2 = (b_2 /= 0) / NaN)):
                                break;

                              default:
                              case c = 1 + c, (b_1 = -1) || !0 != ("number" == {}):
                              case c = 1 + c, b_2 += NaN - "c" * (2 === [ , 0 ].length) >>> !0:
                            }
                        }
                    }():
                }
            } finally {
                var b_2_1 = a++ + typeof parseInt;
                if ((c += 1) + [ [ (c = 1 + c, (b_2 && (b_2[--b + (c = 1 + c, (b_2 && (b_2.in = 1)) === (3 !== 38..toString()) % (c += 1, 
                "undefined"))] /= "number" ^ (NaN_1 && (NaN_1[c = 1 + c, ("foo" == (2 === [ , 0 ].length) && 2 === [ , 0 ].length != -4) | (this ^ 38..toString()) & 1 / 0 & 2 === [ , 0 ].length] = 0 & 23..toString())))) << (3 != 24..toString() | NaN)), (c = 1 + c, 
                void (b_2 && (b_2.Infinity = (2 === [ , 0 ].length) >> 4))) ] ][--b + ("function" == typeof b_1 && 0 <= --_calls_ && b_1())]) {
                    switch ([ a++ + (0 < (2 === [ , 0 ].length) << "object" < 0), , (c += 1) + (b_2_1 &= (c = 1 + c, 
                    (NaN_1 && (NaN_1.c = 22 << (-1 ^ 23..toString()))) - 4 * (-2 != this))), (c = 1 + c, 
                    !0 ^ (Math_1 <<= !1 <= ("foo" & 24..toString())) || a || 3).toString() ]) {
                      default:
                      case !a:
                        break;

                      case b_2_1 && b_2_1.foo:
                        if (NaN / (a_1 && (a_1.c = "b") || 1 != [])) {
                            for (var brake70 = 5; c = 1 + c, (-3 <= this || 2 === [ , 0 ].length) < (this <= this <= [] - "undefined") && 0 < brake70; --brake70) {
                                c = 1 + c, b_1 && (b_1.NaN += /[a2][^e]+$/ != (2 === [ , 0 ].length)), b_2 = NaN;
                            }
                        }
                        break;

                      case void 0:
                    }
                } else {
                    (function() {
                        for (var brake74 = 5; c = 1 + c, 5 !== (b_1 && (b_1.c *= 25)) & !0 + (c += 1, "number") && 0 < --brake74; ) {
                            c = 1 + c, 38..toString(), c += 1;
                        }
                    })();
                }
            }
        }
    }
}

var arguments = f0("", a = (0 & this) / -4);

console.log(null, a, b, c, 1 / 0, NaN, void 0);
original result:
null 0 10 0 Infinity NaN undefined

uglified result:
null -0 10 0 Infinity NaN undefined

minify(options):
{
  "mangle": false
}
@alexlamsl alexlamsl added the bug label Jan 15, 2020
alexlamsl added a commit to alexlamsl/UglifyJS that referenced this issue Jan 15, 2020
alexlamsl added a commit that referenced this issue Jan 15, 2020
@alexlamsl
Copy link
Collaborator Author

$ uglifyjs test.js -c --reduce-test
// reduce test pass 1, iteration 0: 17241 bytes
// reduce test pass 1, iteration 25: 7314 bytes
// reduce test pass 1, iteration 50: 165 bytes
// reduce test pass 1, iteration 75: 161 bytes
// reduce test pass 1: 132 bytes
// reduce test pass 2: 113 bytes
// reduce test pass 3: 89 bytes
var b = 0, c = 0;

var arguments = a = (0 & this) / -1 + 0;

console.log(null, a, b, c, Infinity, NaN, undefined);
// output: null 0 0 0 Infinity NaN undefined
// minify: null -0 0 0 Infinity NaN undefined
// options: {"compress":true,"mangle":false}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant