Repository: mishoo/UglifyJS (JavaScript)

Issue:
ufuzz failure
```js
// original code
// (beautified)
var _calls_ = 10, a = 100, b = 10, c = 0;

{
    var brake1 = 5;
    L85421: do {
        switch (--b + (1 === 1 ? a : b)) {
          case typeof f1 == "function" && --_calls_ >= 0 && f1():
            break;

          case a++:
            {
                var parseInt_1 = function f0(NaN_2, a) {
                    {
                        var brake4 = 5;
                        while (({} > Infinity || (a <<= 25 * [ , 0 ][1])) != "number" * Infinity >> ("undefined" ^ []) && --brake4 > 0) {
                            var NaN_2_1 = function f1(b_1) {
                                var await_2 = (c = 1 + c, ("a" | "undefined") - (25 == true) != ("b" !== "a") >> (c = c + 1, 
                                "bar"));
                                {
                                    var expr7 = (c = 1 + c, (a && ({
                                        a: a.undefined
                                    } = {
                                        a: (23..toString() | -5) & delete "number"
                                    })) ^ (true ^ undefined) >> ("number" ^ 38..toString()));
                                    L85422: for (var key7 in expr7) {
                                        c = 1 + c, (c = c + 1, c = c + 1, "bar") !== (4 == -0 !== (24..toString(), "b"));
                                    }
                                }
                            }(a++ + [ (c = 1 + c, ("" >> 1) / (-3 * "bar") & (4 >= 24..toString() && ("bar", 
                            []))), (c = 1 + c, "b" << {}, [] == "", (5 <= this) / (this & Infinity)), (c = 1 + c, 
                            ((NaN_2 && (NaN_2[c = 1 + c, NaN_2 && (NaN_2.foo += (25 ^ this) >>> (-2 >> 25) | (NaN_2 && (NaN_2.b += ("number" < this) * ("foo" && [ , 0 ].length === 2))))] += 1 ^ -0)) === "number" >>> "a") <= (([ , 0 ].length === 2 & "number") != 5 * 23..toString())), ...[ (c = 1 + c, 
                            (-0 ^ /[a2][^e]+$/) << (22 >>> "number") != (24..toString() > -5 & ("b" || 0))) ] ]);
                        }
                    }
                    c = c + 1;
                }(parseInt_1 && parseInt_1[{} in []]);
            }
            for (var brake10 = 5; -4 && brake10 > 0; --brake10) {}
            break;

          case (-2 || 6).toString()[parseInt_1]:
            var arguments_1;
            c = c + 1;
            break;

          case --b + void a ? (c = c + 1) + typeof (a++ + (parseInt_1 && parseInt_1.var)) : (c = c + 1) + (parseInt_1 && parseInt_1[--b + (+(-0 >= -2) !== ("foo" ^ -5) * (-2 + 24..toString()))]):
            var arguments;
            (c = c + 1) + ({
                null: a++ + arguments,
                var: arguments && typeof arguments.in == "function" && --_calls_ >= 0 && arguments.in(...[ --b + /[abc4]/g.exec(((c = 1 + c, 
                ("bar" || [ , 0 ].length === 2) >= (c = c + 1, -0) ^ (-2 && 25) >>> (arguments && (arguments.b >>>= true < /[a2][^e]+$/))) || b || 5).toString()), b = a ], -1, a++ + (false in [ (c = 1 + c, 
                (25 && 25) === 23..toString() >= "function" ^ (parseInt_1 && ({
                    foo: parseInt_1[c = 1 + c, "foo" * null + (2 <= "number") >= (null <= -4) % ("c" != null)]
                } = {
                    foo: "number" && 3
                })) + ([ , 0 ].length === 2) * 3), (c = 1 + c, c = c + 1, 1 ^ "" ^ 25 & Infinity), (c = 1 + c, 
                c = c + 1, NaN & [ , 0 ].length === 2 | !false) ])),
                a: arguments_1 && arguments_1.Infinity
            } ? (c = c + 1) + ~([ , 0 ][1] < 2 > (c = c + 1, this) || (this === 23..toString()) << /[a2][^e]+$/ + "object") : --b + function arguments_1() {
                var arguments_1_2 = (c = c + 1) + ((false || [ , 0 ][1]) - (25 | "bar") >> (parseInt_1 && (parseInt_1.a *= 22 << true | true % -1))), b_2 = a++ + (1 === 1 ? a : b);
                {
                    var brake17 = 5;
                    do {
                        return;
                    } while (typeof Math && --brake17 > 0);
                }
                switch (a++ + ~((3 <= "undefined") + "number" % -3 >>> ((b_2 && (b_2[c = 1 + c, 
                [] / 24..toString() >>> (null === 25) != ("undefined" >> 2 !== (-2 || ""))] = (-3, 
                38..toString()))) != (24..toString() ^ 24..toString())))) {
                  case {
                        ...(c = 1 + c, "c" >= 3 > "" >>> false < 2 + 1 >> ("number" << ""))
                    }:
                    break;

                  case --b + ((24..toString() & -1 ^ "c" >>> "undefined") >= 23..toString() - 23..toString() + (-2 >> -3)):
                  default:
                    c = 1 + c, (arguments_1 && (arguments_1[a++ + [ (c = 1 + c, ((parseInt_1 && (parseInt_1[c = 1 + c, 
                    ((b_2 && (b_2.null >>= 22 >>> 38..toString())) ^ 2 << {}) === -(c = c + 1, Infinity)] += -2 !== false)) === "number" < [ , 0 ][1]) - (("foo" || 0) >> "a" - NaN)) ][c = 1 + c, 
                    {} >> "number" !== (23..toString() && 3) != (-1 ^ {}) >>> (25 && "number")]] >>>= (null === "object") << (-1 ^ -2))) | ([ , 0 ][1] == -3) >>> ("undefined" && this);
                    for (var brake21 = 5; (c = 1 + c, (arguments_1 && (arguments_1[(c = c + 1) + (1 === 1 ? a : b)] = (0 / true, 
                    - -0))) == (5 !== 38..toString()) < "bar" + NaN) && brake21 > 0; --brake21) {
                        c = 1 + c, ([ , 0 ][1] ^ /[a2][^e]+$/) >>> (c = c + 1, ""), (b_2 && (b_2.a >>>= ([ , 0 ].length === 2, 
                        [ , 0 ][1]))) + ("b" == null);
                    }

                  case a++ + (arguments_1_2 && arguments_1_2[[ (c = 1 + c, (undefined >> true >>> (3 <= 38..toString())) / ((null, 
                    {}) ^ -2 << -5)), (c = 1 + c, ([] === "" || [ , 0 ][1] % "b") === ((arguments_1 = 1 & -3) ^ this > 3)) ].c]):
                    {
                        var brake23 = 5;
                        while ((c = 1 + c, arguments_1 && (arguments_1[(c = c + 1) + [ (c = 1 + c, "b" || undefined || "c" > 5, 
                        0 / "b" ^ true + this), (c = 1 + c, ("number" !== 1 == Infinity - -5) < ("" || "a") / ("foo" / 1)), (c = 1 + c, 
                        void ((arguments_1 = -3 != "number") | this & true)) ]] += (Infinity == -0) >> (null >= this) && (5 == "b") + (b_2 += 1 - -3))) && --brake23 > 0) {
                            c = 1 + c, (true << -2 && "function" < "a") >>> (0 - "" != (this === {}));
                        }
                    }
                    break;
                }
            });
            break;
        }
    } while (--b + ~b && --brake1 > 0);
}

a++ + ((a_1, async) => a++ + {
    0: a_1 && a_1.b,
    1.5: a++ + [ typeof arguments_1_2, , (c = c + 1) + delete (c = c + 1, (25 !== 1) - ("function" ^ "number")), --b + (a_1 = (c = c + 1) + new function(undefined, foo, bar) {
        let foo_2 = function Math() {
            {
                var brake26 = 5;
                while ((c = 1 + c, (c = c + 1, 5 / "b") ^ (parseInt_1 && (parseInt_1.var = (22 <= NaN) >>> ("function" >> NaN)))) && --brake26 > 0) {
                    c = 1 + c, c = c + 1, !5, 4 ^ "a";
                }
            }
            var arguments = (c = 1 + c, (-2 !== undefined) * (22 >>> ([ , 0 ].length === 2)) % ((bar = 4 != "undefined") < (38..toString() <= "object")));
            c = c + 1;
            c = c + 1;
        }();
        var bar_1 = (c = c + 1) + void function() {
        }(), arguments_1 = a++ + --b;
        if (/[abc4]/g.exec(((c = 1 + c, "function" / 2 | 4 < 23..toString() && ("function", 
        22) * ("a" + NaN)) || b || 5).toString())) {
        } else {
            c = 1 + c, (undefined += 2 ^ 22) > (foo_2 && ([ foo_2[c = 1 + c, (([ , 0 ].length === 2) >> 38..toString()) % (c = c + 1, 
            3) >> -(foo_2 && (foo_2[c = 1 + c, ({} | Infinity) >> (2 && [ , 0 ][1]) ^ 24..toString() * "object" != 0 < 23..toString()] /= 2 % "object"))] ] = [ -5 << 22 ])) & ({} >>> -0) - (-2 !== []);
        }
        {
            var brake35 = 5;
            while (!(((false, Infinity) != -1 >>> undefined) >> delete "" * ~/[a2][^e]+$/) && --brake35 > 0) {
            }
        }
        c = c + 1;
    }(Infinity, (c = c + 1) + (1 === 1 ? a : b), a++ + (arguments_1 && typeof arguments_1.var == "function" && --_calls_ >= 0 && arguments_1.var()))), a++ + a++ ][(c = c + 1) + !(("foo" & "b" || "b" | []) - ((-0 && "b") === ("undefined" !== -0)))],
    foo: --b + (arguments && arguments[a++ + {
        foo: ~b,
        [+function() {
            {
                var expr38 = 0 === 1 ? a : b;
                for (var [ key38 ] in expr38) {
                    if (c = 1 + c, (false ^ -5) / -22 >>> (arguments_1 && (arguments_1[c = 1 + c, (null * 1 === null << Infinity) / ((a_1 *= {} ^ undefined) / (arguments_1 && (arguments_1[c = 1 + c, 
                    (-5 || "") < (0, "number") ^ undefined + "number" - (22 || 22)] = 0 ^ [ , 0 ][1])))] <<= 22 >> 0 >> ("" >= -4)))) {
                        c = 1 + c, Infinity === "a" != 38..toString() > [] != ("undefined" == -2) <= 25 + 3;
                    }
                }
            }
            if (async) {
                var brake42 = 5;
                L85423: while ((c = 1 + c, (c = c + 1, /[a2][^e]+$/ != 1) < ((22 == 25) < ("object" < Infinity))) && --brake42 > 0) {
                    c = 1 + c, undefined ^ -5 ^ (true ^ -0) | (a_1 && (a_1.null += 24..toString() >> [ , 0 ][1] ^ (c = c + 1, 
                    "bar")));
                }
            }
            {
                var brake44 = 5;
                while (a++ + b-- && --brake44 > 0) {
                    if (c = 1 + c, (-2 >>> this) - (23..toString() === 25) || "bar" < 23..toString() !== Infinity - "foo") {
                        c = 1 + c, ({} <= -5) << (5 || this) & [ , 0 ][1] << "c" === ([] | 1);
                    }
                }
            }
            if ({
                [(c = 1 + c, ("function" & 4) + ("" && 25) + ((arguments = "foo" * "object") << ([] > 25)))]: (c = 1 + c, 
                (24..toString() != []) / ("undefined" > undefined) !== ((-4 ^ -0) & -2 + undefined)),
                [(c = 1 + c, 0 << "function" > (null == []) > (0 * [ , 0 ][1] || 2 << "object"))]: (c = 1 + c, 
                arguments && (arguments[a++ + function async() {
                    c = 1 + c, (4 ^ "undefined") >> (([ , 0 ].length === 2) >> 25) < (38..toString() * ([ , 0 ].length === 2) && 5 ^ "undefined");
                    c = 1 + c, async && ([ async[(c = c + 1, this / 23..toString()) >>> /[a2][^e]+$/ - 5 - -2 % "foo"] ] = [ (c = c + 1, 
                    22) >= undefined >>> 38..toString() ^ 2 > 0 & ("c" || 3) ]);
                    c = 1 + c, (3 & 1) / (/[a2][^e]+$/ - null) * ((1 == 38..toString()) >> (arguments_1 = false >= 2));
                    c = 1 + c, (22 ^ [ , 0 ][1]) != -0 << "bar" & Infinity <= NaN < (-5 || 0);
                }()] |= (null >>> /[a2][^e]+$/ == (-4 | 23..toString())) << ("c" < "b" | [] - "c")))
            }[c = 1 + c, "a" % NaN >= (-3 ^ -2) ^ (2 < "function") << (4 !== [])]) {
                var Math_1 = (c = 1 + c, false / 22 / (async && (async[c = 1 + c, delete (-4 && 3) != ("b" !== 23..toString() ^ undefined + undefined)] = 25 - 23..toString())) ^ (parseInt_1 && (parseInt_1[(bar_1, Math_1, a_1) => (c = 1 + c, 
                (1 - "" ^ "foo" & {}) / ("a" << -3 >= (-3 || "")))] >>>= (/[a2][^e]+$/ !== -5) >= ("number" === -4)))), Math_1_2 = (c = 1 + c, 
                +({} - false) + (c = c + 1, 1 >= NaN));
            }
        }()]: --b + {
            [a++ + (-1 in {
                a: (c = 1 + c, arguments_1 && (arguments_1.null = (void (-0 < this), parseInt_1 && (parseInt_1[(c = c + 1) + void function a() {
                }()] += (this === "object") - (38..toString() - -0)))))
            })]: (c = c + 1) + (arguments && typeof arguments.c == "function" && --_calls_ >= 0 && arguments.c("foo", ..."" + a_1)),
            null: (c = c + 1) + delete (-1 <= 5 !== (-2 === 22) === /[a2][^e]+$/ % "b" + (arguments && ({
                b: arguments[c = 1 + c, (NaN / 2 <= (NaN < 1)) << ("a" != 3 & "" >= "function")]
            } = {
                b: "a" >> ([ , 0 ].length === 2)
            }))),
            Infinity: a++ + void ((3 || -0) * (Infinity + "foo") < ((c = c + 1, 2) | null === -4)),
            "-2": --b + async,
            null: a++ + (arguments_1 ? a++ + ++a : --b + ((c = 1 + c, ![ , 0 ][1] * (this >> 2) - ("a" + Infinity !== 5 << "number")) || a || 3).toString())
        },
        parseInt_1: parseInt_1,
        [a++ + ((c = c + 1) + ({
            arguments_1: arguments_1
        } = (c = c + 1) + (arguments && typeof arguments.length == "function" && --_calls_ >= 0 && arguments.length(23..toString())) || {}) || a || 3).toString()]: (c = c + 1) + -((c = c + 1, 
        38..toString() != []) & (5 <= null ^ 24..toString() < Infinity))
    }]),
    Infinity: (function a(async, parseInt_1, arguments) {
        {
            var brake53 = 5;
            do {
                {
                    c = 1 + c, (22 / "undefined" << ("undefined", [ , 0 ].length === 2)) + (async && (async.in >>= "function" < "bar" || +""));
                }
            } while ([ --b + !a, typeof f3 == "function" && --_calls_ >= 0 && f3(), [ (c = 1 + c, 
            ((-2 != /[a2][^e]+$/) > ("a" && "c")) * (5 % -2 >>> /[a2][^e]+$/ % -5)), ..."" + a, (c = 1 + c, 
            async && (async.null = void (parseInt_1 && (parseInt_1[c = 1 + c, !(arguments && (arguments.in ^= 38..toString() < 22)) >>> ([ , 0 ].length === 2) / 38..toString() % (5 << /[a2][^e]+$/)] += false | 3)) != ("number" ^ "a") <= (a && (a[c = 1 + c, 
            -2 / "b" >>> ("c" < "foo") | [] / {} == true / 0] += undefined <= "")))), (c = 1 + c, 
            ((5 === /[a2][^e]+$/) > (async && (async.foo += Infinity != -0))) << (3 >= /[a2][^e]+$/ >= ([ , 0 ].length === 2) / 0)), (c = 1 + c, 
            (-5 ^ "number" | (arguments_1 &= "" ^ 23..toString())) % (5 + true > (-5 && "undefined"))) ].foo ][--b + /[abc4]/g.exec(([][c = 1 + c, 
            (23..toString() !== 1 != "a" >= 24..toString()) - (25 + 5 !== -4 > "undefined")] || b || 5).toString())] && --brake53 > 0);
        }
        c = c + 1;
        try {
            {
                var brake58 = 5;
                do {
                    {
                        var brake59 = 5;
                        do {
                            {
                                return c = 1 + c, ((/[a2][^e]+$/ != false) >>> "b" / "number") - ("function" == "bar" !== "" << 0);
                            }
                        } while ({
                            null: (c = 1 + c, (undefined, -5) - 1 * 4 === (undefined >= 3) * (-0 / false)),
                            c: (c = 1 + c, (parseInt_1 = ("bar" == {}, 24..toString() >>> false)) | ("foo" & 2) << (false && 38..toString()))
                        }[c = 1 + c, (NaN ^ "foo") <= "b" % 2 | (24..toString() && 38..toString()) > [ , 0 ][1] % 1] && --brake59 > 0);
                    }
                } while (typeof f2 == "function" && --_calls_ >= 0 && f2(this, 24..toString()) && --brake58 > 0);
            }
        } finally {
            for (var brake61 = 5; --b + (b = a) && brake61 > 0; --brake61) {
                for (var brake62 = 5; (c = 1 + c, ("object" - -3 ^ (parseInt_1 = [ , 0 ][1] == "bar")) - ("number" - "b") / (async && (async[c = 1 + c, 
                (Infinity < "c") / +"bar" || 5 > -4 ^ ("" ^ "object")] ^= ([ , 0 ].length === 2) >> this))) && brake62 > 0; --brake62) {
                    c = 1 + c, ("bar" || "bar") + (null === "function") && (async && (async.c += false >> 4 >> (arguments && (arguments.in += 4 || []))));
                }
            }
            if (a++ + {
                [(c = 1 + c, ((25 == 4) <= "b" + 5) / (Infinity == 24..toString() !== (parseInt_1 && (parseInt_1.null = 24..toString() >= "c"))))]: function() {
                },
                Infinity: (c = 1 + c, 23..toString() % [ , 0 ][1] / (-0 >= "foo") & ((arguments && (arguments.undefined ^= "object" % 23..toString())) | ("bar", 
                "undefined"))),
                var: (c = 1 + c, (-24..toString() & false + -5) != ([ , 0 ][1] !== this) / ({} & "")),
                undefined: (c = 1 + c, ({} + Infinity + (-3 >> 1)) % ((undefined, 25) & "" % -3)),
                length: (c = 1 + c, ((25, 5) !== (async && (async[c = 1 + c, (c = c + 1, -1 * "undefined") >= (-1 >= -1) - (-3 >= "")] = -1 & "c"))) + (parseInt_1 && (parseInt_1[parseInt_1 = (c = 1 + c, 
                (-2 > -4 != ([ , 0 ].length === 2) >= 23..toString()) - ((parseInt_1 && (parseInt_1[c = 1 + c, 
                async += ([] / "number" || 25 >> 38..toString()) > (-0 - 23..toString() > (5 < "bar"))] = (-3, 
                "bar"))) !== ([ , 0 ].length === 2 ^ -4)))] = (-2 && "foo") << NaN / 24..toString())))
            }) {
                for (var brake65 = 5; (c = 1 + c, (undefined === [ , 0 ][1] ^ (false ^ 0)) * ((4 != "b") - (23..toString() >>> "object"))) && brake65 > 0; --brake65) {
                    c = 1 + c, parseInt_1 = (arguments && (arguments[(c = c + 1) + a++] >>>= [ , 0 ][1] + 25 <= ("bar" == ([ , 0 ].length === 2)))) << ("" + /[a2][^e]+$/ << (NaN >> "function"));
                }
            }
        }
        L85424: {}
    } || a || 3).toString(),
    a: (c = c + 1) + []
}[typeof Math == "undefined"])(Infinity, (c = c + 1) + a--, typeof f3 == "function" && --_calls_ >= 0 && f3(-5));

console.log(null, a, b, c, Infinity, NaN, undefined);
```
```js
// uglified code
// (beautified)
var f, arguments, t, e, n = 10, i = 100, a = 10, r = 0, o = 5;

do {
    switch (--a + i) {
      case "function" == typeof f1 && 0 <= --n && f1():
        break;

      case i++:
        for (var c = (function(n, o) {
            for (var f = 5; 0 != (o <<= 0) && 0 < --f; ) {
                !function() {
                    for (var n in r = 1 + ((r = 1 + r) + 1), 0 ^ (o && ({
                        a: o.undefined
                    } = {
                        a: 1
                    }))) {
                        r = 1 + r, r += 1, r += 1;
                    }
                }((o++, r = 1 + (1 + (1 + r)), n && (n[r = 1 + r, n && (n.foo += (25 ^ this) >>> -1 | (n && (n.b += ("number" < this) * (2 === [ , 0 ].length))))] += 1), 
                r = 1 + r));
            }
            r += 1;
        }(c && c[{} in []])), l = 5; 0 < l; --l) {}
        break;

      case "-2"[c]:
        r += 1;
        break;

      case --a + void 0 ? (r += 1) + typeof (i++ + (c && c.var)) : (r += 1) + (c && c[--a + !0]):
        r += 1, i++, arguments && "function" == typeof arguments.in && 0 <= --n && arguments.in(--a + /[abc4]/g.exec((r = 1 + r, 
        "" + (r += 1, !1 ^ 25 >>> (arguments && (arguments.b >>>= !1)) || a || 5))), a = i, -1, i++ + (!1 in [ (r = 1 + r, 
        !1 ^ (c && ({
            foo: c[r = 1 + r, !1]
        } = {
            foo: 3
        })) + 3 * (2 === [ , 0 ].length)), 1, (r = 1 + ((r = 1 + r) + 1), r += 1, NaN & 2 === [ , 0 ].length | !0) ])), 
        f && f.Infinity, r += 1, r += 1;
    }
} while (--a + ~a && 0 < --o);

i++, t = 1 / 0, e = (r += 1) + i--, "function" == typeof f3 && 0 <= --n && f3(-5), 
i++, t && t.b, i++, r += 1, r += 1, --a, t = (r += 1) + new function(n, o, f) {
    let t = function() {
        for (var n = 5; r = 1 + r, r += 1, NaN ^ (c && (c.var = 0)) && 0 < --n; ) {
            r = 1 + r, r += 1;
        }
        r = 1 + r, r += 1, r += 1;
    }();
    i++, /[abc4]/g.exec((r = 1 + (r + 1), "" + (--a || 5))) || (r = 1 + r, n += 20, 
    t && ([ t[r = 1 + r, ((2 === [ , 0 ].length) >> "38") % (r += 1, 3) >> -(t && (t[r = 1 + r, 
    1] /= NaN))] ] = [ -5 << 22 ]));
    for (var e = 5; !((1 / 0 != -1 >>> n) >> -1) && 0 < --e; ) {}
    r += 1;
}(1 / 0, r += 1, (i++, f && "function" == typeof f.var && 0 <= --n && f.var())), 
i++, i++, r += 1, --a, arguments && arguments[i++ + {
    foo: ~a,
    [+function() {
        var n;
        for ([ n ] in a) {
            r = 1 + r, -5 / -22 >>> (f && (f[r = 1 + r, !0 / ((t *= 0) / (f && (f[r = 1 + r, 
            0] = 0)))] <<= 11)) && (r = 1 + r);
        }
        e && (r = 1 + r, r += 1);
        for (var o = 5; i++ + a-- && 0 < --o; ) {
            r = 1 + (1 + r);
        }
        r = 1 + (1 + (1 + (1 + (1 + (1 + r))))), e && (e[r = 1 + r, !1] = 2), c && (c[(n, o, f) => (r = 1 + r, 
        1)] >>>= !0), r = 1 + r, r += 1;
    }()]: --a + {
        [i++ + (-1 in {
            a: (r = 1 + r, f && (f.null = c && (c[(r += 1) + void 0] += ("object" === this) - 38)))
        })]: (r += 1) + (arguments && "function" == typeof arguments.c && 0 <= --n && arguments.c("foo", ..."" + t)),
        null: (r += 1) + (arguments && ({
            b: arguments[r = 1 + r, 0]
        } = {
            b: "a" >> (2 === [ , 0 ].length)
        }), !0),
        Infinity: i++ + void (r += 1),
        "-2": --a + e,
        null: i++ + (f ? i++ + ++i : --a + (r = 1 + r, "" + (!0 * (this >> 2) - !0 || i || 3)))
    },
    parseInt_1: c,
    [i++ + ("" + ((r += 1) + ({
        arguments_1: f
    } = (r += 1) + (arguments && "function" == typeof arguments.length && 0 <= --n && arguments.length("23")) || {}) || i || 3))]: (r += 1) + -(1 & (r += 1, 
    !0))
}], console.log(null, i, a, r += 1, 1 / 0, NaN, void 0);
```
```
original result:
null 121 -15 46 Infinity NaN undefined

uglified result:
null 121 -15 50 Infinity NaN undefined
```
```js
// reduced test case (output will differ)

// (beautified)
({
    [function() {
        if ({
            [0 + "" + 0]: 1
        }[0]) {
            0();
        }
    }()]: 0
});
// output: 
// minify: TypeError: 0 is not a function
// options: {
//   "compress": {
//     "passes": 1000000,
//     "unsafe": true
//   },
//   "toplevel": true,
//   "output": {
//     "v8": true
//   },
//   "validate": true
// }
```
```
minify(options):
{
  "compress": {
    "passes": 1000000,
    "unsafe": true
  },
  "toplevel": true,
  "output": {
    "v8": true
  }
}

Suspicious compress options:
  collapse_vars
  evaluate
  objects
  passes
  reduce_vars
  unsafe
```


Discussion:

Patch:
diff --git a/lib/compress.js b/lib/compress.js
index 1aab36807e1..5081120c8e8 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -10198,7 +10198,7 @@ merge(Compressor.prototype, {
                 flush();
                 values.push(prop);
             }
-            if (found && !generated && typeof key == "string" && /^[0-9]+$/.test(key)) {
+            if (found && !generated && typeof key == "string" && /^[1-9]*[0-9]$/.test(key)) {
                 generated = true;
                 if (keys.has(key)) prop = keys.get(key)[0];
                 prop.key = make_node(AST_Number, prop, {


Test patch:
diff --git a/test/compress/objects.js b/test/compress/objects.js
index a02dd0842a9..d35f1538f31 100644
--- a/test/compress/objects.js
+++ b/test/compress/objects.js
@@ -413,3 +413,22 @@ issue_4380: {
     expect_stdout: "PASS"
     node_version: ">=4"
 }
+
+issue_4415: {
+    options = {
+        evaluate: true,
+        objects: true,
+    }
+    input: {
+        console.log({
+            ["00"]: "FAIL",
+        }[0] || "PASS");
+    }
+    expect: {
+        console.log({
+            "00": "FAIL",
+        }[0] || "PASS");
+    }
+    expect_stdout: "PASS"
+    node_version: ">=4"
+}