Uglifyjs: ufuzz failure

Created on 20 Dec 2017  Â·  25Comments  Â·  Source: mishoo/UglifyJS

~600kFuzz

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

function f0(foo_1, parseInt) {
    function f1(foo_1, b_1) {
        L22890: for (var brake1 = 5; !(b_1 && (b_1[+(([ , 0 ][1] == -5) + (true >= [ , 0 ][1]) & (0 - {}) % (1 + ""))] <<= (+3 & -2 === "undefined") != (-3 + 3) % ("function" > 23..toString()))) && brake1 > 0; --brake1) {
            var b = a++ + (/[a2][^e]+$/ << this === (24..toString() & 22) !== ((false & 22) === (NaN == Infinity))), bar_2 = b--;
        }
        for (var brake3 = 5; --b + (b = a) && brake3 > 0; --brake3) {
            var brake4 = 5;
            do {
                {
                    var brake5 = 5;
                    L22891: do {
                        {
                            var expr6 = (c = 1 + c, ({} > 25) + 25 % 23..toString() > (bar_2 = "" / 3 % (38..toString() + [ , 0 ][1])));
                            for (var key6 in expr6) {
                                c = 1 + c, (foo_1 && (foo_1.NaN = 38..toString() | 24..toString())) < -5 - null & (b_1 && (b_1[a++ + a--] = (false !== 5) / ("undefined" ^ 4)));
                            }
                        }
                    } while ((1 === 1 ? a : b) && --brake5 > 0);
                }
            } while (a++ + (typeof f2 == "function" && --_calls_ >= 0 && f2((c = 1 + c, ([ , 0 ][1] % "foo" <= (1 || Infinity)) << (b_1 += 1 > "" == Infinity << true)))) && --brake4 > 0);
        }
    }
    var arguments_1 = f1((c = c + 1) + (foo_1 && foo_1[--b + (typeof f3 == "function" && --_calls_ >= 0 && f3((c = 1 + c,
    c = c + 1, (/[a2][^e]+$/ || 38..toString()) <= ("function" == ([ , 0 ].length === 2)))))]), 22, 24..toString());
    function f2(foo_2, Infinity, a) {
        var arguments_1 = a++ + --b, foo_2_2 = (c = c + 1) + Infinity;
        {
            var Math_1 = function f3(foo_2, foo_1, foo_1_1) {
                function f4(bar_1) {
                }
                var bar_1 = f4((c = 1 + c, (3 || 22, "function" % "foo") ^ this + "number" != (2 != 38..toString())));
                function f5(bar) {
                }
                var a = f5();
            }([ (c = 1 + c, (delete this ^ 23..toString() << 22) << ("number" & "function",
            -1 !== "bar")) ], /[abc4]/.test(((c = 1 + c, (5 > -1) << (c = c + 1, []) & ("" << NaN & {} === [])) || b || 5).toString()));
        }
    }
    function f6(NaN) {
        {
            var brake10 = 5;
            while (a++ + 3 && --brake10 > 0) {
                if (c = 1 + c, (-0 | /[a2][^e]+$/ | "number" ^ 23..toString()) * (("function" != {}) >= 5 * false)) {
                    c = 1 + c, ("foo" ^ 1) <= 4 - -3 || foo_1 && (foo_1.var ^= 23..toString() == "object" != "undefined" >>> undefined);
                }
                {
                }
            }
        }
        {
            var expr15 = a++ + 5;
            L22892: for (var key15 in expr15) {
                {
                    if (c = 1 + c, c = c + 1, ([ , 0 ][1] ^ 24..toString()) != (arguments_1 && (arguments_1[(c = 1 + c,
                    (24..toString() + 24..toString() || 38..toString() & true) / ([ , 0 ].length === 2 != true | (arguments_1 && (arguments_1[(c = 1 + c,
                    (22 > -4 ^ true >> 38..toString()) >> (23..toString() && 22) - ("object" & -0))] <<= (-5,
                    [ , 0 ][1])))))] = 38..toString() % "object"))) {
                        c = 1 + c, (-0 || [] || ([ , 0 ].length === 2) <= /[a2][^e]+$/) < ({} + 5 > (-3 | "object"));
                    }
                }
            }
        }
    }
    var b = f6();
    function f7(bar, bar_1) {
        c = c + 1;
        for (var brake20 = 5; --b + foo_1 && brake20 > 0; --brake20) {
            c = c + 1;
        }
    }
    var b_1 = f7(null, -1);
    function f8(arguments_1_1, arguments_1_1_2) {
        {
            var brake22 = 5;
            L22893: while (function() {
                switch (c = 1 + c, -0 >= 2 > [] % 0 ^ false % [] >>> (Infinity != "undefined")) {
                  default:
                    ;

                  case c = 1 + c, ~(this * null) ^ ("number" | []) + (true <= 2):
                    ;
                    break;

                  case c = 1 + c, true / 5 ^ ([ , 0 ][1] | "foo") | delete ("number" < 0):
                    ;
                    break;

                  case c = 1 + c, (b_1 && (b_1[/[abc4]/.test(((c = 1 + c, (25 !== 3 || (null, this)) >= (-2 / "" > (foo_1 += ([ , 0 ].length === 2) * -5))) || b || 5).toString())] ^= [] % {} >= 5 % true)) << (24..toString() >> true & 3 * 38..toString()):
                    ;
                    break;
                }
                var Math;
                var foo_1_1 = (c = 1 + c, arguments_1_1_2 = "foo" + [ , 0 ][1] << (-4 >>> 5) ^ (24..toString() ^ "undefined" | [] / 24..toString()));
            } && --brake22 > 0) {
                L22894: {
                }
            }
        }
        {
            var foo_1 = function f9(bar_2) {
                {
                }
                {
                }
            }(--b + typeof (c = 1 + c, (/[a2][^e]+$/ != 5 || -3 & 0) == "foo" >> false < 22 << this), a++ + (foo_1 && foo_1.null), "object");
        }
    }
    var NaN_1 = f8(--b + arguments_1, a++ + (--b + (typeof parseInt_2 === "function") || 6).toString()[(c = c + 1) + (foo_1 && foo_1[a++ + [ (c = 1 + c,
    ((c = c + 1, /[a2][^e]+$/) & 4 < "number") === "number" <= "function" <= 3 * ([ , 0 ].length === 2)), (c = 1 + c,
    (2 < undefined) / (-2 % "bar") << ((-3 ^ undefined) <= (3 | this))), (c = 1 + c,
    foo_1 && (foo_1[--b + b_1] = (arguments_1 ^= (-2 && Infinity) * (23..toString(),
    "object")) * (-1 < "undefined" ^ (foo_1 /= true << 24..toString())))) ]])], --b + arguments_1);
}

var b_2 = f0(-0, false, [ , 0 ][1]);

console.log(null, a, b, c);

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

function f0(t) {
var n = function(t, n) {
for (var r = 5; (!n || !(n[+(1 & (0 - {}) % "1")] <<= 0 != 0 % ("function" > 23..toString()))) && r > 0; --r) {
var i = a++ + (/[a2][^e]+$/ << this == (22 & 24..toString()) != 0);
i--;
}
for (var g = 5; --i + (i = a) && g > 0; --g) {
var S = 5;
do {
var f = 5;
do {
var e = (c = 1 + c, ({} > 25) + 25 % 23..toString() > 0 % (38..toString() + 0));
for (var l in e) {
c = 1 + c, t && (t.NaN = 38..toString() | 24..toString()), n && (n[a++ + a--] = .25);
}
} while (a && --f > 0);
} while (a++ + (--_calls_ >= 0 && (c = 1 + c, n += !1, --o, c += 1, c = 1 + (c += 1),
23..toString(), /[abc4]/.test((c = 1 + c, !0 << (c += 1, []) & 0 & {} === [] || o || 5).toString()),
c = 1 + c, void 38..toString())) && --S > 0);
}
}((c += 1) + (t && t[--o + ("function" == typeof f3 && --_calls_ >= 0 && f3((c = 1 + c,
c += 1, /[a2][^e]+$/ <= ("function" == (2 === [ , 0 ].length)))))]), 22, 24..toString()), o = function() {
for (var t = 5; 3 + a++ && --t > 0; ) {
c = 1 + c, (0 | "number" ^ 23..toString()) * (("function" != {}) >= 0) && (c = 1 + c);
}
var o = 5 + a++;
for (var r in o) {
c = 1 + c, c += 1, (0 ^ 24..toString()) != (n && (n[(c = 1 + c, (24..toString() + 24..toString() || !0 & 38..toString()) / (2 === [ , 0 ].length != 1 | (n && (n[(c = 1 + c,
(!0 ^ !0 >> 38..toString()) >> (23..toString() && 22) - 0)] <<= 0))))] = 38..toString() % "object")) && (c = 1 + c);
}
}(), r = function() {
c += 1;
for (var n = 5; --o + t && n > 0; --n) {
c += 1;
}
}();
!function() {
for (var t = 5; function() {
switch (c = 1 + c, !1 > [] % 0 ^ !1 % [] >>> !0) {
default:
case c = 1 + c, ~(null * this) ^ ("number" | []) + !0:
case c = 1 + c, 1:
case c = 1 + c, (r && (r[/[abc4]/.test((c = 1 + c, !0 >= (-1 / 0 > (n += -5 * (2 === [ , 0 ].length))) || o || 5).toString())] ^= [] % {} >= 0)) << (24..toString() >> !0 & 3 * 38..toString()):
}
c = 1 + c, 24..toString(), 24..toString();
} && --t > 0; ) {}
var n = (--o, c = 1 + c, a++, void (n && n.null));
}(--o, (a++, (--o + ("function" == typeof parseInt_2) || 6).toString()[(c += 1) + (t && t[a++ + [ (c = 1 + c,
(!1 & (c += 1, /[a2][^e]+$/)) === !1 <= 3 * (2 === [ , 0 ].length)), (c = 1 + c,
NaN << (-3 <= (3 | this))), (c = 1 + c, t && (t[--o + r] = (n ^= 1 / 0 * (23..toString(),
"object")) * (!1 ^ (t /= !0 << 24..toString())))) ]])]), --o);
}

var b_2 = f0(-0, !1, 0);

console.log(null, a, b, c);

```js
original result:
null 118 10 67

uglified result:
null 118 10 72

minify(options):
{
  "compress": {
    "keep_fargs": false,
    "passes": 100
  }
}

Suspicious compress options:
  collapse_vars
  evaluate
  inline
  join_vars
  passes
  reduce_vars
  side_effects
  typeofs
  unused
bug

All 25 comments

Possibly related:

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

L67352: {
    {
        var brake2 = 5;
        while (--b + {}.NaN && --brake2 > 0) {
            switch (function() {
                switch (--b + ((c = c + 1) + -0)) {
                  case a++ + a:
                    if (--b + /[abc4]/.test((((c = 1 + c, (a && (a[a++ + +((c = c + 1, 25, "number" - 3) == ((a = [ , 0 ].length === 2 | -2) ^ delete -2))] = true * ([ , 0 ].length === 2) == (-2 == /[a2][^e]+$/))) / ((null,
                    0) != (2, -5))) || 1).toString()[(c = 1 + c, (true != 38..toString()) << ([ , 0 ].length === 2 !== false) !== (false != [] === ([ , 0 ].length === 2) >= -0))] || b || 5).toString())) {
                        var brake6 = 5;
                        L67353: while (a && a.foo && --brake6 > 0) {
                            c = c + 1;
                        }
                    } else {
                        var expr8 = a++ + {}[(c = 1 + c, (c = c + 1, {} || /[a2][^e]+$/) > (NaN <= 3 && (a = -0 || this)))];
                        L67354: for (var key8 in expr8) {
                            c = 1 + c;
                            var b = expr8[key8];
                            {
                                var brake9 = 5;
                                do {
                                    c = 1 + c, a && (a.Infinity -= (undefined == 4) * ([] == -0) >> (c = c + 1, [ , 0 ][1] || false));
                                } while ((c = 1 + c, (a && (a[(c = 1 + c, (4 || false) >= ("number" & 0) === (-3 != 38..toString() ^ -3 >> false))] = -5 >>> -5) && (a %= 1 >>> 23..toString())) & ("" ^ [ , 0 ][1]) == (3 !== -5)) && --brake9 > 0);
                            }
                        }
                    }
                    if (b = a) {
                        switch (typeof (c = 1 + c, a && (a[typeof f1 == "function" && --_calls_ >= 0 && f1([])] += (/[a2][^e]+$/ || {}) !== ([ , 0 ][1] & this)),
                        (-5 !== "undefined") + (-5 + 5))) {
                          default:
                            c = 1 + c, (-3 ^ /[a2][^e]+$/) >= "function" >>> "bar" === ((0 ^ 38..toString()) !== (c = c + 1,
                            22));
                            c = 1 + c, (a && (a.c += ({} >= Infinity) >>> (Infinity != "undefined"))) >= (("function" & 38..toString()) !== ([ , 0 ][1] | -1));

                          case undefined:
                            c = 1 + c, a && (a.b = 22 >> 3 < 22 % null != (a && (a.NaN >>>= undefined ^ -1)) <= (false & 1));
                            c = 1 + c, (1 << "undefined" >= void -4) >>> ((0 | NaN) ^ "foo" == this);
                            break;

                          case (c = c + 1) + a++:
                            c = 1 + c, ("object" === 0) + (undefined >>> {}) !== ((-1 | "function") == (a >>= NaN ^ 24..toString()));
                            break;

                          case a:
                            break;
                        }
                    }
                    break;

                  default:
                  case a++ + delete b:
                    {
                        var brake18 = 5;
                        do {
                            if (function() {
                            }()) {
                                var brake20 = 5;
                                while ((c = 1 + c, ({} - []) / (4 * -1) != (a = delete 3 << (([ , 0 ].length === 2) >> [ , 0 ][1]))) && --brake20 > 0) {
                                    c = 1 + c, a += (24..toString() | true) << ("function" ^ -5) != 3 - 25 >> (-2, undefined);
                                }
                            } else {
                                var brake22 = 5;
                                do {
                                    c = 1 + c, c = c + 1, "undefined" % 25 >= ("bar" > -1);
                                } while ((c = 1 + c, (c = c + 1, 22 >>> -0) || ("" < NaN || -3 >> -4)) && --brake22 > 0);
                            }
                        } while ({
                            var: (c = 1 + c, (a && (a.Infinity += ("undefined" << "bar", 23..toString() !== 22))) >= (this == 23..toString() !== (-3 && 4))),
                            NaN: (c = 1 + c, ((-4 == 1) - (a && (a.c = -1 - "function"))) / (([ , 0 ].length === 2) / false / (a = [ , 0 ].length === 2 & true))),
                            "-2": (c = 1 + c, 5 - "" >= (a && (a.Infinity = this && 3)) && 2 < -0 | 23..toString() * /[a2][^e]+$/),
                            null: (c = 1 + c, (2 === false) % (null % -5) ^ (null - "function", Infinity != 2)),
                            NaN: (c = 1 + c, +("foo" == 25) * ((false ^ 0) != (a && (a.b += 1 < "foo"))))
                        }[(c = c + 1) + {
                            Infinity: (c = 1 + c, ("function" * "number" == -1 < "function") + ("undefined" % "foo" - (4 ^ Infinity))),
                            set a(b_2) {
                                this.null = {} <= 24..toString();
                            }
                        }] && --brake18 > 0);
                    }
                    c = c + 1;
                    break;

                  case a++ + a++:
                    return --b;
                    L67355: {
                        c = 1 + c, (-0 < 4) % ("function" > -0) | (-5 & 23..toString()) != 22 / -3;
                    }
                    break;
                }
            }) {
              case a:
                [ a++ + (1 === 1 ? a : b), [ ((c = 1 + c, ("number" / 1 | "undefined" ^ -0) * ((3 || 24..toString()) && 5 < 2)) || 9).toString()[(c = 1 + c,
                (-5 <= 4) >> (([ , 0 ].length === 2) << [ , 0 ][1]) ^ (a && (a.null += (true === 0) < (0 && ""))))], a++ + (c = 1 + c,
                ("foo" == [] !== /[a2][^e]+$/ > 38..toString()) <= (/[a2][^e]+$/ > -2 | -1 + 5)), [] ][--b + (b |= a)], (c = c + 1) + ++a, ,  ].NaN;
                break;

              case b <<= a:
                {
                    var expr30 = [ foo_2 && foo_2.b ];
                    for (var key30 in expr30) {
                        c = 1 + c;
                        var foo_2 = expr30[key30];
                        L67356: for (var brake31 = 5; --b && brake31 > 0; --brake31) {
                            for (var brake32 = 5; typeof a_1 == "special" && brake32 > 0; --brake32) {
                                (c = c + 1) + {}.in;
                            }
                        }
                    }
                }
                try {
                    {
                        var brake35 = 5;
                        do {
                            try {
                                break;
                            } catch (foo_2_2) {
                                var Math_1;
                                {
                                    var brake39 = 5;
                                    do {
                                        {
                                            var brake40 = 5;
                                            do {
                                                c = 1 + c, true % 0 > (Math_1 && (Math_1.undefined = Infinity < 24..toString())) & this <= this <= (foo_2_2 && (foo_2_2[(c = 1 + c,
                                                ((22 | /[a2][^e]+$/) ^ "number" >>> []) < (1 >> [] <= ("bar" ^ 22)))] += Infinity - "number"));
                                            } while ((c = 1 + c, c = c + 1, ({} & 3) !== Infinity >> "function") && --brake40 > 0);
                                        }
                                    } while (delete a && --brake39 > 0);
                                }
                            } finally {
                                for (var brake42 = 5; (false - [ , 0 ][1] & {} > 0) / (null < 0 !== ("function" && 5)) && brake42 > 0; --brake42) {
                                    for (var brake43 = 5; (c = 1 + c, /[a2][^e]+$/ > -5 === {} < 24..toString() != (undefined + ([ , 0 ].length === 2) || this >= 22)) && brake43 > 0; --brake43) {
                                        c = 1 + c, -(this >>> "foo"), 38..toString() / -4, 2 >= ([ , 0 ].length === 2);
                                    }
                                }
                                {
                                    var expr45 = ~(3 - 0 === ("foo" | -5) != ([] <= 3 != (Math_1 && (Math_1.a += Infinity * NaN))));
                                    for (var key45 in expr45) {
                                        c = 1 + c;
                                        var undefined_1 = expr45[key45];
                                        {
                                        }
                                    }
                                }
                            }
                        } while (b++ && --brake35 > 0);
                    }
                } finally {
                    if (--b + delete ((undefined_1 && (undefined_1.undefined = -5 >= [ , 0 ][1])) + NaN * -0 || Math_1 && (Math_1.in = (22,
                    -4) + (-1 || "foo")))) {
                        try {
                            {
                                var brake49 = 5;
                                do {
                                    c = 1 + c, (/[a2][^e]+$/ ^ this) === ([ , 0 ].length === 2 || null) && -(false !== /[a2][^e]+$/);
                                } while (--b + b++ && --brake49 > 0);
                            }
                        } catch (c) {
                            var b = (c = 1 + c, (c = c + 1, 3 | 25) >= (-3 || 38..toString()) * (5 + [ , 0 ][1])), c_1 = (c = 1 + c,
                            foo_2 && (foo_2[[ (c = 1 + c, (c = c + 1, c = c + 1, "object") ^ (24..toString() === "number" && [ , 0 ][1] | "foo")), (c = 1 + c,
                            25 - 22 + (25 >>> 22) << (undefined & 5) % ([ , 0 ][1] + "")), (c = 1 + c, 5 + 24..toString() > (5 || -4) <= (foo_2 && (foo_2[typeof f0 == "function" && --_calls_ >= 0 && f0()] >>>= (this - true) % ("" === 5)))), (c = 1 + c,
                            ([] || {}) >= ("number" >= 25) || c_1 && (c_1[a++ + typeof undefined_1] = ("function" >= [ , 0 ][1]) << (false <= -5))), (c = 1 + c,
                            38..toString() % undefined ^ (-3, "object") && ([ , 0 ].length === 2 && -2) * (-4 - /[a2][^e]+$/)) ]] <<= ("undefined" === false && 24..toString() < /[a2][^e]+$/) >> ((0 && -4) < ("bar" > "number"))));
                            try {
                                c = 1 + c, (c_1 /= true >>> 23..toString()) % (c_1 |= Infinity <= [ , 0 ][1]) && -0 % 3 === (3,
                                false);
                            } finally {
                            }
                        } finally {
                            L67357: for (var brake54 = 5; (c = 1 + c, (Infinity == 1 | (-5 || {})) << (this >> /[a2][^e]+$/ !== 23..toString() << 25)) && brake54 > 0; --brake54) {
                                c = 1 + c, (2 & -1) << [] / 24..toString() >> ((24..toString() | undefined) > (24..toString() == "function"));
                            }
                            var NaN_1;
                        }
                    }
                    {
                        var expr57 = --b + (a++ + (foo_2 && foo_2[a++ + [ (c = 1 + c, 22 * [ , 0 ][1] !== ([ , 0 ][1] === -0) !== (3,
                        /[a2][^e]+$/) << -1 * this), (c = 1 + c, (arguments_1 = 4 <= {} >= ("undefined" != -0)) >>> (("object",
                        "number") && "bar" === [ , 0 ][1])), (c = 1 + c, NaN / "bar" == (NaN, 25) === (Math_1 && (Math_1[(c = 1 + c,
                        c_1 && (c_1[a++ + typeof (c = 1 + c, (null !== {}) >= (undefined_1 = -2 >> "bar") <= Infinity - 22 - (-0 === null))] += "" >> true && (foo_2 && (foo_2[(c = 1 + c,
                        ([] === true ^ (38..toString() ^ "foo")) == (!1 != (NaN | NaN)))] += 5 & "function"))) && (-0,
                        NaN) > ("number" > ([ , 0 ].length === 2)))] /= 1 - "function"), "bar", 5)), ,  ][(c = 1 + c,
                        (/[a2][^e]+$/ == 4) - (c = c + 1, 38..toString()) === ((4 || -3) !== (false ^ [ , 0 ].length === 2)))]]) || 9).toString()[(c = c + 1) + (new function parseInt_2() {
                            this.undefined = -4 || 1;
                            this.b = -3 + [ , 0 ][1];
                            this[(c = 1 + c, (NaN_1 && (NaN_1[foo_2 && foo_2[(c = 1 + c, NaN_1 && (NaN_1[--b + {
                                c: (c = 1 + c, (-1 >> {}) * ("number" << this) && undefined ^ 24..toString() ^ 2 - 38..toString()),
                                "": (c = 1 + c, (this * undefined && (true || 3)) != ((parseInt_2 && (parseInt_2.undefined += 0 * -4)) ^ ("foo" ^ -3))),
                                null: (c = 1 + c, ((-5 === -5) >>> (Infinity ^ "foo")) / (("function" || "number") + (5,
                                /[a2][^e]+$/))),
                                c: (c = 1 + c, (~0 ^ /[a2][^e]+$/ >= -2) / ((foo_2 && (foo_2[(c = 1 + c, (c = c + 1,
                                null ^ NaN) >= ((c = c + 1, -5) != ({} != 24..toString())))] %= 2 << null)) ^ (-2 ^ 25))),
                                a: (c = 1 + c, (4 - "undefined") * (foo_2 && (foo_2.a = -5 !== ([ , 0 ].length === 2))) & (foo_2 && (foo_2.NaN = /[a2][^e]+$/ >> 4 ^ (c = c + 1,
                                -2))))
                            }.in] += (-0 >= []) - (undefined_1 = 0 ^ /[a2][^e]+$/) || "object" != [] ^ NaN < [ , 0 ][1]))]] /= "number" << 1 ^ -4 - true)) >= (-3 & true) * ({} | []))] >>= "" <= 3;
                        }() || a || 3).toString()];
                        for (var key57 in expr57) {
                            c = 1 + c;
                            var arguments_1 = expr57[key57];
                            c = c + 1;
                        }
                    }
                }

              case --b + (undefined_1 && undefined_1.b):
                {
                    var brake59 = 5;
                    L67358: do {
                        {
                            var expr60 = a++;
                            for (var key60 in expr60) {
                                c = 1 + c;
                                var b_1 = expr60[key60];
                                {
                                    var arguments_1 = function f0(Math_1_2, b_2, NaN_1_1) {
                                        function f1(NaN_1_1_2) {
                                        }
                                        var foo_2_1 = f1(23..toString(), (c = 1 + c, (null - this > (NaN <= {})) >>> ("" !== "bar" & +"undefined")));
                                        function f2(c_1_2, foo_2_2) {
                                        }
                                        var foo_2_1_1 = f2(2, 24..toString(), 5);
                                        function f3(foo, bar_1) {
                                        }
                                        var Math_1 = f3(Infinity, (c = 1 + c, 23..toString() >> NaN !== "number" % 38..toString(),
                                        undefined && -1 && ([ , 0 ].length === 2) * []), "function");
                                        function f4(a_2) {
                                        }
                                        var arguments_1 = f4();
                                    }(NaN);
                                }
                            }
                        }
                    } while (--b + (b /= a) && --brake59 > 0);
                }
                break;

              case --b + (0 === 1 ? a : b):
                break;
            }
        }
    }
    if ({
        undefined: a++ + a++,
        c: -a,
        Infinity: 0 === 1 ? a : b
    }) {
        switch (a++ + typeof null) {
          case [ (c = c + 1) + (0 === 1 ? a : b), , (c = c + 1) + /[abc4]/.test(({}.null || b || 5).toString()), a++ + (typeof c_1 == "function" && --_calls_ >= 0 && c_1(false, 2)), a++ + ~b ].a:
            arguments_1 && arguments_1.length;
            var b_2 = (c = c + 1) + void function() {}(), Math_1 = --b + ~(-(5 % Infinity) * (Infinity != "number" || -4 > /[a2][^e]+$/));
            break;

          default:
            {
                var expr66 = (c = c + 1) + (b = a);
                for (var key66 in expr66) {
                    c = 1 + c;
                    var b_1_1 = expr66[key66];
                    {
                        var expr67 = 1 === 1 ? a : b;
                        for (var key67 in expr67) {
                            c = 1 + c;
                            var parseInt = expr67[key67];
                            var foo_2 = a++, c_1_1 = +b;
                        }
                    }
                }
            }
            ;

          case a++ + --b:
            void (((undefined_1 = [] - -2) | [ , 0 ].length === 2 ^ true) == ((c_1_1 && (c_1_1.b += {} != true)) & /[a2][^e]+$/ >>> [ , 0 ][1]));
            {
                var b_2_2 = function b_2(NaN_1_2) {
                    if (b_2 && b_2.length) {
                        var b_1 = function f5(arguments_1, arguments_1_2, a) {
                        }((c = 1 + c, (-0 >= {}) - (25 | {}) >>> (Math_1 && (Math_1[--b + arguments_1] += ("" != "bar") * (b_1_1 &= null << {})))));
                    } else {
                        4;
                    }
                    c = c + 1;
                }(--b + (typeof Math_1 == "function" && --_calls_ >= 0 && Math_1(typeof f1 == "function" && --_calls_ >= 0 && f1(24..toString(), (c = 1 + c,
                b_2 &= (~38..toString(), -2 <= 0) - (-3 >= 24..toString()) % (Infinity % "foo"))), a++ + (Math_1 && Math_1.null))), -5, --b + delete ([] / 24..toString() - ("undefined" < "") + ((25 | 22) >> [ , 0 ][1] / /[a2][^e]+$/)));
            }
            break;

          case -b:
            c = c + 1;
            break;
        }
    } else {
        var brake77 = 5;
        while (a++ + (--b + b--) && --brake77 > 0) {
            var Infinity_2;
        }
    }
    {
        var expr79 = {
            3: a++ + "object",
            "\t": 0 === 1 ? a : b
        };
        L67359: for (var key79 in expr79) {
            if ((c = c + 1) + (typeof b_2_2_2 !== "special")) {
                try {
                    switch (a++ + a++) {
                      case --b + {}.undefined:
                        for (var brake83 = 5; a++ + {
                            length: +function() {
                            }()
                        } && brake83 > 0; --brake83) {
                            (c = c + 1) + -2;
                        }
                        {
                            var foo_2 = function b_2_2_2() {
                                {
                                    var expr86 = (c = 1 + c, ([ , 0 ][1] >= ([ , 0 ].length === 2) ^ 0 >> {}) << (-2 >= 38..toString() | "bar" * true));
                                    L67360: for (var key86 in expr86) {
                                        c = 1 + c;
                                        var Math_1_2 = expr86[key86];
                                        c = 1 + c, (38..toString() === 25) >> (-5 < {}) & ({} !== 4) * (-2 - "foo");
                                    }
                                }
                                var a_2;
                            }(-1);
                        }
                        break;

                      case undefined_1:
                        {
                            var brake89 = 5;
                            do {
                                switch ({
                                    "\t": (c = 1 + c, (c_1 && (c_1.foo = (/[a2][^e]+$/ * 38..toString(), 25 >> Infinity))) == (-0 >= Infinity) - (2 > "number")),
                                    var: (c = 1 + c, 23..toString() % "foo" | (c = c + 1, 5) || "object" % "number" >> (b_1_1 %= 1 > Infinity)),
                                    undefined: (c = 1 + c, (0 < 5 & (38..toString() & "undefined")) < (("" || [ , 0 ].length === 2) > (NaN < "")))
                                }) {
                                  case typeof f2 == "function" && --_calls_ >= 0 && f2((c = 1 + c, (undefined_1 && (undefined_1[a++ + (typeof f2 == "function" && --_calls_ >= 0 && f2())] = (Math_1 && (Math_1[(c = 1 + c,
                                    b_2_2 && (b_2_2[typeof b_2 == "function" && --_calls_ >= 0 && b_2([ , 0 ].length === 2, [ , 0 ][1], (c = 1 + c,
                                    (4 >= 25, null >= 1) === (this >= -3) >> (3 == "undefined")))] = ((this || /[a2][^e]+$/) == "bar" / -4) >> ((2 ^ -4) >> (4 ^ "number"))))] = undefined << 23..toString())) >>> (foo_2.c = 38..toString() % null))) & (Infinity | 0 | Infinity ^ true))):
                                    if (c = 1 + c, "undefined" > "object" & (Infinity ^ -2) ^ void "bar" >> (24..toString() >= 25)) {
                                        c = 1 + c, (0 < "bar" === (undefined | "")) <= ((-3, 38..toString()) > (0 > 3));
                                    }
                                    ;
                                    break;

                                  case (c = c + 1) + /[a2][^e]+$/:
                                    break;

                                  case [][a++ + typeof (c = 1 + c, (Math_1 && (Math_1.Infinity += 2 / 2 || null + Infinity)) === ("" && -1) <= (undefined_1 && (undefined_1.c = 3 >= 38..toString())))]:
                                    {
                                        var brake94 = 5;
                                        L67361: do {
                                            c = 1 + c, ([ , 0 ][1] == this != ({} && 25)) + ({} !== undefined ^ (b_2 && (b_2.b += null ^ Infinity)));
                                        } while ((c = 1 + c, -3 / {} < (-0 >= "foo") ^ (NaN || [ , 0 ].length === 2) === "object" << 38..toString()) && --brake94 > 0);
                                    }
                                    break;

                                  default:
                                }
                            } while ((0 === 1 ? a : b) && --brake89 > 0);
                        }
                        L67362: {
                            1 === 1 ? a : b;
                            for (var brake98 = 5; (c = c + 1) + (((/[a2][^e]+$/ | -5) & (null && -5)) > 1 * 23..toString() * (false << 25)) && brake98 > 0; --brake98) {
                                for (var brake99 = 5; (c = 1 + c, ((-5 && -3) > ("bar" || null)) + ((-1 ^ -4) <= (b_1 |= (-3,
                                38..toString())))) && brake99 > 0; --brake99) {
                                    c = 1 + c, (-0 & true) !== ({} | 2) || [ , 0 ][1] !== -2 != (c = c + 1, "number");
                                }
                            }
                            {
                                var brake101 = 5;
                                do {
                                    {
                                        var expr102 = (c = 1 + c, b_2 && (b_2.NaN |= ("number" && -5) >> ("" !== 38..toString())) && -0 * false ^ "undefined" / "foo");
                                        L67363: for (var key102 in expr102) {
                                            c = 1 + c, ("bar" % ([ , 0 ].length === 2) >> ([] || 24..toString())) * (null >>> "" << ("object",
                                            -0));
                                        }
                                    }
                                } while ((1 === 1 ? a : b) && --brake101 > 0);
                            }
                        }

                      case --b + function Math_1_2() {
                            {
                                var c = function f6() {
                                    c = 1 + c, Infinity_2[(c = c + 1) + [ (c = 1 + c, /[a2][^e]+$/ / 22 ^ (-0 && "foo") || (2 < NaN) - (2 ^ {})), (c = 1 + c,
                                    (NaN_1 && (NaN_1[[ (c = 1 + c, 24..toString() * -0 >>> (foo_2 /= -1 ^ -5) > -2 - 3 - (true - 1)), (c = 1 + c,
                                    (25 ^ undefined) + ("bar" ^ 24..toString()) !== (c = c + 1, -0 - 24..toString())), (c = 1 + c,
                                    b_1 && (b_1.c += (c = c + 1, [ , 0 ].length === 2) == (-1 || "bar") === 25 >> 22 >>> (22 || Infinity))), (c = 1 + c,
                                    !NaN <= ("" >= "function") || (c = c + 1, 3) >= (24..toString() && "object")), (c = 1 + c,
                                    (24..toString() & "number") === (undefined | 4), null != null && "bar" << "function") ][(c = 1 + c,
                                    (b_1 %= [] >= undefined ^ -4 % /[a2][^e]+$/) >= ((b_1_1 && (b_1_1[(c = 1 + c, false / 24..toString() === (23..toString() ^ 2) === -5 >> 25 << -2 % "undefined")] /= 38..toString() || "object")) <= (this && "undefined")))]] = ("function" === -1) * (b_2_2 && (b_2_2[(c = 1 + c,
                                    (Math_1 = 4 || 22) - ("bar" <= 3) & ("number", -3) % ({} - 0))] = null === 24..toString())))) >> ([ , 0 ][1] / 1 !== "function" >>> /[a2][^e]+$/)), (c = 1 + c,
                                    (this & []) << -1 % ([ , 0 ].length === 2) >>> (+ -2 > (-2 !== this))) ].b] += (38..toString() != 4) % (23..toString() >>> 3) % ((24..toString() ^ 22) / (-2 === {}));
                                    c = 1 + c, (-4 == 1) >>> ("function" !== -5) ^ (false * 25 | -3 - "foo");
                                }();
                            }
                            ({
                                "\t": (c = 1 + c, (-3 % 5 || -0 * 4) >= (({} | -2) !== 1 << /[a2][^e]+$/)),
                                b: (c = 1 + c, (/[a2][^e]+$/ > ([ , 0 ].length === 2) ^ 2 > "") - (c = c + 1, "" > -2)),
                                "\t": (c = 1 + c, 25 * 3 === {} + "foo" ^ 0 * "number" & 38..toString() % 3)
                            }).null;
                            {
                                var b_2_2_1 = function f7(parseInt) {
                                    c = 1 + c, -4 / {} - (2 & "bar") || (3 ^ false) >>> 3 % [];
                                    c = 1 + c, -25 * (38..toString() == -3) / (c = c + 1, NaN_1 = 3 ^ undefined);
                                }("foo");
                            }
                            {
                                var a_2 = function f8() {
                                    c = 1 + c, !((true < "foo") % (Math_1_2 = -3 && this));
                                    c = 1 + c, (Infinity_2 && (Infinity_2.a += (25 & -3) != Infinity > {})) ^ -3 + 23..toString() + -2 % 23..toString();
                                }((c = 1 + c, arguments_1 = (2 != 23..toString()) < 2 >> -5 === (23..toString() | {},
                                b_1[(c = 1 + c, 3 >>> Infinity >= ([] == -5) <= ("bar" || 5) >> 22 + -0)] = "bar" || [ , 0 ].length === 2)), (c = 1 + c,
                                "function" - "number" + (true || null) ^ "undefined" % -2 + (-4 != 25)), (c = 1 + c,
                                (3 >> this | (1 | {})) == (-0 < 2 & (24..toString() || 2))));
                            }
                        }():
                        var b_2_2 = ((c = 1 + c, (b_2_2 = "function" >= 5 !== (b_1_1 += 5 & "bar")) / ((false & 23..toString()) << true % -3)) ? (c = 1 + c,
                        ((-5 || "undefined") && [] << ([ , 0 ].length === 2)) | delete true ^ (false ^ 38..toString())) : (c = 1 + c,
                        (-1 % 5 && undefined > "") !== (5 <= 22 == (-0 && /[a2][^e]+$/)))) ? {
                            c: (c = 1 + c, NaN_1 &= (b_2_2 && (b_2_2.null = (24..toString() | false, "" <= -0))) !== ([ , 0 ].length === 2 !== 38..toString() ^ NaN < -5)),
                            3: (c = 1 + c, c = c + 1, this % 24..toString() !== 23..toString() * undefined),
                            1.5: (c = 1 + c, arguments_1 >>= (NaN * null >= (b_1 && (b_1.undefined = 3 - undefined))) * ((0,
                            "function") ^ (24..toString(), false))),
                            null: (c = 1 + c, ("" << -0) * (24..toString() !== "undefined") < (-5 + ([ , 0 ].length === 2) == ("object" === "bar"))),
                            "\t": (c = 1 + c, ("undefined" && 0) !== [] > 5 ^ -2 % 24..toString() <= ("bar" ^ 1))
                        } : typeof f9 == "function" && --_calls_ >= 0 && f9(23..toString(), (c = 1 + c,
                        /[a2][^e]+$/ + 1 != "number" <= "bar" || -2 - -3 ^ (true ^ 5)), (c = 1 + c, ((true,
                        {}) || this ^ true) - ("undefined" !== Infinity) / ("function" >= 5)));
                        for (var brake115 = 5; (c = c + 1) + (typeof f2 == "function" && --_calls_ >= 0 && f2()) && brake115 > 0; --brake115) {
                            switch (a++ + -a) {
                              case {
                                    3: (c = 1 + c, undefined_1 && (undefined_1[typeof undefined_1 == "function" && --_calls_ >= 0 && undefined_1((c = 1 + c,
                                    ((c = c + 1, -4) | 38..toString() < /[a2][^e]+$/) !== delete (undefined % undefined)), (c = 1 + c,
                                    ("foo" == true) + "undefined" * "number" !== (-0 == -4) >= (3 && -1)), "undefined")] += ((/[a2][^e]+$/ >= 38..toString()) + (22 <= -0)) % ~(/[a2][^e]+$/ ^ -1))),
                                    b: (c = 1 + c, (22 >= 1, -2 && Infinity) & ((false, "undefined") & (-4 ^ null))),
                                    "-2": (c = 1 + c, -3 * 1 >> (2 == []) || 4 * "undefined" > "object" >>> Infinity)
                                }.var:
                                {
                                    var brake117 = 5;
                                    L67364: while ((c = 1 + c, void (5 ^ "") * (("bar" ^ "bar") * (/[a2][^e]+$/ | [ , 0 ][1]))) && --brake117 > 0) {
                                        c = 1 + c, ({} ^ false ^ 4 - 24..toString()) << ((b_1 = 24..toString() - Infinity) !== -0 <= 2);
                                    }
                                }
                                break;

                              case (c = c + 1) + (Math_1 && Math_1[typeof arguments_1 == "function" && --_calls_ >= 0 && arguments_1((c = 1 + c,
                                (/[a2][^e]+$/ - 2) % (true % 5) < ({} !== [ , 0 ][1] === (23..toString() | -5))), 5, "number")]):
                              case a++ + (b_2_2 && b_2_2.length):
                                if (c = 1 + c, (c = c + 1, arguments_1 && (arguments_1[(c = 1 + c, (4 > 3 >= (null ^ 2)) << (b_2_2 && (b_2_2[(c = c + 1) + !function b_1_1_1() {
                                }()] -= 24..toString() % "function" !== (4 || 24..toString()))))] += ([ , 0 ].length === 2) + undefined)) >> (b_2 && (b_2[0 === 1 ? a : b] = [ , 0 ][1] - 2 >>> (this ^ 25)))) {
                                    c = 1 + c, ("bar" >= "bar") << (-5 ^ 38..toString()) ^ (-3 !== Infinity) > (25,
                                    Infinity);
                                } else {
                                    c = 1 + c, (23..toString() != this) - (NaN_1 += ([ , 0 ].length === 2) < null) & ("object" % -1 && "undefined" % false);
                                }
                                {
                                }
                                break;

                              case (c = c + 1) + (a++ + Math_1 ? undefined_1 : typeof Math_1 == "function" && --_calls_ >= 0 && Math_1((c = 1 + c,
                                "object" % 38..toString() > (this != -2) === -38..toString() % (-0 == {})))):
                                {
                                    var brake123 = 5;
                                    do {
                                        c = 1 + c, ({} << 4) / ("undefined" % "function") !== (NaN % this != ([] & -5));
                                    } while ((c = 1 + c, ((38..toString() & {}) > "" % "undefined") / ((c = c + 1, "number") <= (b_2_2 &= /[a2][^e]+$/ > -2))) && --brake123 > 0);
                                }
                                c = c + 1;
                                break;
                            }
                        }
                        break;

                      case (c = c + 1) + (b_1 = -3 && NaN && "number" >= this) % ((undefined >> -0) - ("" == -4)):
                        try {
                            b = a;
                        } catch (c_1) {
                            {
                                var expr128 = ((c = 1 + c, c = c + 1, ([ , 0 ][1] & 38..toString()) >>> (true || "undefined")) || 4).toString()[(c = 1 + c,
                                "undefined" % /[a2][^e]+$/ + ("" === "object") >= ([ , 0 ][1] - "bar") * (-3 != this))];
                                for (var key128 in expr128) {
                                    c = 1 + c;
                                    var NaN_1_2 = expr128[key128];
                                    c = 1 + c, ("bar" == "bar") - ("object" ^ -5) || (Infinity & "function") <= ("undefined" !== NaN);
                                }
                            }
                            (c = c + 1) + ((c = 1 + c, (-0 >> -2 <= "bar" % ([ , 0 ].length === 2)) - ((-3 & -3) - ({},
                            22))) || a || 3).toString();
                        } finally {
                            if (NaN_1) {
                                try {
                                    c = 1 + c, (1, null) + (Infinity >> "bar") != ((arguments_1 && (arguments_1[(c = 1 + c,
                                    (arguments_1 && (arguments_1[((b_1 && (b_1[(c = 1 + c, b_1 = (-3 | -4) >> (24..toString() == 0) <= (23..toString() % "bar" || -1 | [ , 0 ].length === 2))] = /[a2][^e]+$/ % /[a2][^e]+$/)) ^ (b_2_2 && (b_2_2[(c = 1 + c,
                                    (1 | 25) == ("number" && 25), arguments_1 >>= ("foo" & NaN) >= /[a2][^e]+$/ << [])] %= {} >= true))) >= (NaN ^ "") - (/[a2][^e]+$/ - NaN)] = (4 !== undefined) / ("number" >> this))) <= (25 | [ , 0 ].length === 2) + (c = c + 1,
                                    -3))] += [ , 0 ][1] >>> null)) == void "bar");
                                } catch (undefined) {
                                }
                            }
                            c = c + 1;
                        }
                        break;
                    }
                } catch (b_2_2_1) {
                    a++ + a++;
                }
            } else {
                var brake137 = 5;
                L67365: while (function() {
                    c = c + 1;
                    for (var brake139 = 5; --b + (b += a) && brake139 > 0; --brake139) {
                        L67366: for (var brake140 = 5; NaN_1_2 && NaN_1_2[--b + b_1_1] && brake140 > 0; --brake140) {
                            var bar_1;
                        }
                    }
                } && --brake137 > 0) {}
            }
        }
    }
    {
        var bar_1 = function f9(b) {
            function f10() {
                c = c + 1;
                {
                    var brake145 = 5;
                    L67367: while (--b + b-- && --brake145 > 0) {
                        switch (c = 1 + c, "foo" != -4 & 3 >= "foo", (22 || -0) === (-1, undefined)) {
                          default:
                            ;

                          case c = 1 + c, (4 !== {} | (0 && -3)) >> (undefined % "function" < ([ , 0 ].length === 2 ^ Infinity)):
                            ;
                            break;

                          case c = 1 + c, (-1 === "number") << false - this == (([ , 0 ].length === 2) * 3 && -3 < 5):
                            ;
                            break;

                          case c = 1 + c, (false & 5) <= delete -5 | (foo_2 && (foo_2[(c = 1 + c, c_1_1 && (c_1_1.in /= [] % -1 != (-5 === []) | (c = c + 1,
                            +"foo")))] <<= "bar" && 1)) * ("object" ^ true):
                            ;
                            break;
                        }
                    }
                }
            }
            var Infinity_2_1 = f10(-2);
            function f11(foo_1, b_1_2, b) {
                L67368: {}
            }
            var b_2_2 = f11(-1);
        }(a++ + (b = a), -3 & 23..toString() ^ [ , 0 ][1] + 1 ^ undefined % -0 < (2 == true), undefined);
    }
}

{
    var brake149 = 5;
    do {
        (c = c + 1) + (foo_2 && foo_2.Infinity);
    } while (--b + typeof foo_2_1 && --brake149 > 0);
}

console.log(null, a, b, c);

```js
// uglified code
// (beautified)
for (var _calls_ = 10, a = 100, b = 10, c = 0, brake2 = 5; --b + {}.NaN && --brake2 > 0; ) {
switch (function() {
switch (--n + ((c += 1) + -0)) {
case a++ + a:
if (--n + /[abc4]/.test(((c = 1 + c, (a && (a[a++ + (c += 1, +(NaN == (!0 ^ (a = 2 === [ , 0 ].length | -2))))] = !0 * (2 === [ , 0 ].length) == 0)) / !0 || 1).toString()[(c = 1 + c,
(1 != 38..toString()) << (2 === [ , 0 ].length != 0) !== (0 != [] == (2 === [ , 0 ].length) >= -0))] || n || 5).toString())) {
for (var t = 5; a && a.foo && --t > 0; ) {
c += 1;
}
} else {
var e = a++ + {}[(c = 1 + c, c += 1, ({} || /[a2][^e]+$/) > !1)];
for (var r in e) {
c = 1 + c;
var n = e[r], o = 5;
do {
c = 1 + c, a && (a.Infinity -= !1 * (-0 == []) >> (c += 1, !1));
} while (c = 1 + c, !1 & (a && (a[(c = 1 + c, !0 === (-3 != 38..toString() ^ -3))] = 31) && (a %= 1 >>> 23..toString())) && --o > 0);
}
}
if (n = a) {
switch (c = 1 + c, a && (a["function" == typeof f1 && --_calls_ >= 0 && f1([])] += /[a2][^e]+$/ !== (0 & this)),
"number") {
default:
c = 1 + c, 38..toString(), c = 1 + (c += 1), a && (a.c += ({} >= 1 / 0) >>> !0),
38..toString(), c = 1 + c, a && (a.b = 0 != (a && (a.NaN >>>= -1)) <= 0), c = 1 + c;
break;

              case (c += 1) + a++:
                c = 1 + c, a >>= NaN ^ 24..toString();
                break;

              case a:
            }
        }
        break;

      default:
      case a++ + delete n:
        var i = 5;
        do {
            var _ = 5;
            do {
                c = 1 + c, c += 1;
            } while (c = 1 + c, c += 1, --_ > 0);
        } while ({
            var: (c = 1 + c, (a && (a.Infinity += 22 !== 23..toString())) >= (this == 23..toString() !== 4)),
            NaN: (c = 1 + c, (!1 - (a && (a.c = NaN))) / ((2 === [ , 0 ].length) / !1 / (a = 2 === [ , 0 ].length & !0))),
            "-2": (c = 1 + c, 5 >= (a && (a.Infinity = this && 3)) && !1 | 23..toString() * /[a2][^e]+$/),
            null: (c = 1 + c, 1),
            NaN: (c = 1 + c, 0 * (0 != (a && (a.b += !1))))
        }[(c += 1) + {
            Infinity: (c = 1 + c, NaN),
            set a(c) {
                this.null = {} <= 24..toString();
            }
        }] && --i > 0);
        c += 1;
        break;

      case a++ + a++:
        return --n;
    }
}) {
  case a:
    a++, (c = 1 + c, 9).toString()[(c = 1 + c, !0 >> ((2 === [ , 0 ].length) << 0) ^ (a && (a.null += !1)))],
    a++, c = 1 + c, 38..toString(), --b, b |= a, c += 1, ++a;
    break;

  case b <<= a:
    var expr30 = [ foo_2 && foo_2.b ];
    for (var key30 in expr30) {
        c = 1 + c;
        for (var foo_2 = expr30[key30], brake31 = 5; --b && brake31 > 0; --brake31) {
            for (var brake32 = 5; "special" == typeof a_1 && brake32 > 0; --brake32) {
                c += 1;
            }
        }
    }
    try {
        var brake35 = 5;
        do {
            try {
                break;
            } catch (t) {
                var brake39 = 5;
                do {
                    var brake40 = 5;
                    do {
                        c = 1 + c, Math_1 && (Math_1.undefined = 1 / 0 < 24..toString()), t && (t[(c = 1 + c,
                        (22 ^ "number" >>> []) < (1 >> [] <= 22))] += NaN);
                    } while (c = 1 + c, c += 1, 0 != (3 & {}) && --brake40 > 0);
                } while (delete a && --brake39 > 0);
            } finally {
                for (var brake42 = 5; (0 & {} > 0) / !0 && brake42 > 0; --brake42) {
                    for (var brake43 = 5; c = 1 + c, 0 == {} < 24..toString() != (void 0 + (2 === [ , 0 ].length) || this >= 22) && brake43 > 0; --brake43) {
                        c = 1 + c, 38..toString();
                    }
                }
                var expr45 = ~(0 != ([] <= 3 != (Math_1 && (Math_1.a += NaN))));
                for (var key45 in expr45) {
                    c = 1 + c;
                    var undefined_1 = expr45[key45];
                }
            }
        } while (b++ && --brake35 > 0);
    } finally {
        if (--b + ((undefined_1 && (undefined_1.undefined = !1)) + NaN || Math_1 && (Math_1.in = -5),
        !0)) {
            try {
                var brake49 = 5;
                do {
                    c = 1 + c;
                } while (--b + b++ && --brake49 > 0);
            } catch (c) {
                c = 1 + c, b = !0;
                var c_1 = (c = 1 + (c += 1), foo_2 && (foo_2[[ (c = 1 + c, c += 1, c += 1, "object" ^ ("number" === 24..toString() && 0)), (c = 1 + c,
                3), (c = 1 + c, 5 + 24..toString() > 5 <= (foo_2 && (foo_2["function" == typeof f0 && --_calls_ >= 0 && f0()] >>>= (this - !0) % !1))), (c = 1 + c,
                ([] || {}) >= !1 || c_1 && (c_1[a++ + typeof undefined_1] = 0)), (c = 1 + c, 38..toString() % void 0 ^ "object" && NaN * (2 === [ , 0 ].length && -2)) ]] <<= 0));
                try {
                    c = 1 + c, c_1 /= !0 >>> 23..toString(), c_1 |= !1;
                } finally {}
            } finally {
                for (var brake54 = 5; c = 1 + c, -5 << (this >> /[a2][^e]+$/ != 23..toString() << 25) && brake54 > 0; --brake54) {
                    c = 1 + c, 24..toString(), 24..toString(), 24..toString();
                }
                var NaN_1;
            }
        }
        var expr57 = --b + (a++ + (foo_2 && foo_2[a++ + [ (c = 1 + c, !0 !== /[a2][^e]+$/ << -1 * this), (c = 1 + c,
        (arguments_1 = 4 <= {} >= !0) >>> !1), (c = 1 + c, !1 === (Math_1 && (Math_1[(c = 1 + c,
        c_1 && (c_1[a++ + (c = 1 + c, typeof ((null !== {}) >= (undefined_1 = -2) <= 1 / 0))] += 0) && NaN > ("number" > (2 === [ , 0 ].length)))] /= NaN),
        5)), ,  ][(c = 1 + c, !1 - (c += 1, 38..toString()) === (4 != (!1 ^ 2 === [ , 0 ].length)))]]) || 9).toString()[(c += 1) + (new function t() {
            this.undefined = -4, this.b = -3, this[(c = 1 + c, (NaN_1 && (NaN_1[foo_2 && foo_2[(c = 1 + c,
            NaN_1 && (NaN_1[--b + {
                c: (c = 1 + c, (-1 >> {}) * ("number" << this) && void 0 ^ 24..toString() ^ 2 - 38..toString()),
                "": (c = 1 + c, (void 0 * this && !0) != (-3 ^ (t && (t.undefined += -0)))),
                null: (c = 1 + c, NaN),
                c: (c = 1 + c, -1 / (-25 ^ (foo_2 && (foo_2[(c = 1 + c, c += 1, 0 >= (c += 1, -5 != ({} != 24..toString())))] %= 2)))),
                a: (c = 1 + c, NaN * (foo_2 && (foo_2.a = -5 !== (2 === [ , 0 ].length))) & (foo_2 && (foo_2.NaN = 0 ^ (c += 1,
                -2))))
            }.in] += (-0 >= []) - (undefined_1 = 0) || "object" != [] ^ !1))]] /= -5)) >= 1 * ({} | []))] >>= !0;
        }() || a || 3).toString()];
        for (var key57 in expr57) {
            c = 1 + c;
            var arguments_1 = expr57[key57];
            c += 1;
        }
    }

  case --b + (undefined_1 && undefined_1.b):
    var brake59 = 5;
    do {
        var expr60 = a++;
        for (var key60 in expr60) {
            c = 1 + c;
            var b_1 = expr60[key60];
            23..toString(), c = 1 + c, 24..toString(), c = 1 + c, 23..toString(), arguments_1 = void 38..toString();
        }
    } while (--b + (b /= a) && --brake59 > 0);
    break;

  case --b + b:
}

}

var brake77, Infinity_2;

switch (a++, a++, a++ + "object") {
case [ (c += 1) + b, , (c += 1) + /[abc4]/.test(({}.null || b || 5).toString()), a++ + ("function" == typeof c_1 && --_calls_ >= 0 && c_1(!1, 2)), a++ + ~b ].a:
arguments_1 && arguments_1.length;
var b_2 = (c += 1) + void 0, Math_1 = 4 + --b;
break;

default:
var expr66 = (c += 1) + (b = a);
for (var key66 in expr66) {
c = 1 + c;
var b_1_1 = expr66[key66], expr67 = a;
for (var key67 in expr67) {
c = 1 + c;
var parseInt = expr67[key67], c_1_1 = (foo_2 = a++, +b);
}
}

case a++ + --b:
undefined_1 = [] - -2, c_1_1 && (c_1_1.b += 1 != {});
var b_2_2 = function t() {
t && t.length && (c = 1 + c, Math_1 && (Math_1[--b + arguments_1] += !0 * (b_1_1 &= null << {}))),
c += 1;
}((--b, "function" == typeof Math_1 && --_calls_ >= 0 && Math_1("function" == typeof f1 && --_calls_ >= 0 && f1(24..toString(), (c = 1 + c,
b_2 &= (38..toString(), !0 - (-3 >= 24..toString()) % NaN))), a++ + (Math_1 && Math_1.null))), (--b,
24..toString()));
break;

case -b:
c += 1;
}

var expr79 = {
3: a++ + "object",
"t": b
};

for (var key79 in expr79) {
if ((c += 1) + ("special" != typeof b_2_2_2)) {
try {
switch (a++ + a++) {
case --b + {}.undefined:
for (var brake83 = 5; a++ + {
length: NaN
} && brake83 > 0; --brake83) {
c += 1;
}
foo_2 = function() {
var t = (c = 1 + c, (0 >= (2 === [ , 0 ].length) ^ 0 >> {}) << (-2 >= 38..toString() | NaN));
for (var a in t) {
c = 1 + (c = 1 + c), 38..toString();
}
}();
break;

          case undefined_1:
            var brake89 = 5;
            do {
                switch ({
                    "\t": (c = 1 + c, 0 == (c_1 && (c_1.foo = (38..toString(), 25)))),
                    var: (c = 1 + c, 23..toString() % "foo" | (c += 1, 5) || NaN >> (b_1_1 %= !1)),
                    undefined: (c = 1 + c, (0 & 38..toString()) < ((2 === [ , 0 ].length) > !1))
                }) {
                  case "function" == typeof f2 && --_calls_ >= 0 && f2((c = 1 + c, 1 & (undefined_1 && (undefined_1[a++ + ("function" == typeof f2 && --_calls_ >= 0 && f2())] = (Math_1 && (Math_1[(c = 1 + c,
                    b_2_2 && (b_2_2["function" == typeof b_2 && --_calls_ >= 0 && b_2(2 === [ , 0 ].length, 0, (c = 1 + c,
                    !1 === (this >= -3) >> !1))] = (NaN == (this || /[a2][^e]+$/)) >> -1))] = void 0 << 23..toString())) >>> (foo_2.c = 38..toString() % null))))):
                    c = 1 + c, 0 ^ void 0 >> (24..toString() >= 25) && (c = 1 + c, 38..toString());
                    break;

                  case (c += 1) + /[a2][^e]+$/:
                    break;

                  case [][a++ + (c = 1 + c, typeof ((Math_1 && (Math_1.Infinity += 1)) === "" <= (undefined_1 && (undefined_1.c = 3 >= 38..toString()))))]:
                    var brake94 = 5;
                    do {
                        c = 1 + c, b_2 && (b_2.b += 0);
                    } while (c = 1 + c, -3 / {} < !1 ^ 2 === [ , 0 ].length === "object" << 38..toString() && --brake94 > 0);
                }
            } while (b && --brake89 > 0);
            for (var brake98 = 5; (c += 1) + (0 > 1 * 23..toString() * 0) && brake98 > 0; --brake98) {
                for (var brake99 = 5; c = 1 + c, !1 + (3 <= (b_1 |= 38..toString())) && brake99 > 0; --brake99) {
                    c = 1 + c, 0 != (2 | {}) || (c += 1);
                }
            }
            var brake101 = 5;
            do {
                var expr102 = (c = 1 + c, b_2 && (b_2.NaN |= -5 >> ("" !== 38..toString())) && 0);
                for (var key102 in expr102) {
                    c = 1 + c;
                }
            } while (a && --brake101 > 0);

          case --b + function() {
                var c = function() {
                    c = 1 + c, Infinity_2[(c += 1) + [ (c = 1 + c, !1 - (2 ^ {})), (c = 1 + c, (NaN_1 && (NaN_1[[ (c = 1 + c,
                    -0 * 24..toString() >>> (foo_2 /= 4) > -5), (c = 1 + c, 25 + ("bar" ^ 24..toString()) != (c += 1,
                    -0 - 24..toString())), (c = 1 + c, b_1 && (b_1.c += -1 == (c += 1, 2 === [ , 0 ].length) === 0)), (c = 1 + c,
                    c += 1, 3 >= (24..toString() && "object")), (c = 1 + c, 24..toString(), !1) ][(c = 1 + c,
                    (b_1 %= [] >= void 0 ^ NaN) >= ((b_1_1 && (b_1_1[(c = 1 + c, !1 / 24..toString() == (2 ^ 23..toString()) === -1)] /= 38..toString() || "object")) <= (this && "undefined")))]] = !1 * (b_2_2 && (b_2_2[(c = 1 + c,
                    (Math_1 = 4) - !1 & -3 % ({} - 0))] = null === 24..toString())))) >> !1), (c = 1 + c,
                    (this & []) << -1 % (2 === [ , 0 ].length) >>> (-2 > (-2 !== this))) ].b] += (4 != 38..toString()) % (23..toString() >>> 3) % ((22 ^ 24..toString()) / (-2 === {})),
                    c = 1 + c;
                }();
                c = 1 + (c = 1 + c), c = 1 + (c += 1), 38..toString(), c = 1 + (c = 1 + c), 38..toString(),
                NaN_1 = 3, c = 1 + (c += 1), arguments_1 = (2 != 23..toString()) < 0 === (23..toString(),
                b_1[(c = 1 + c, 3 >= (-5 == []) <= 0)] = "bar"), c = 1 + (c = 1 + c), 24..toString(),
                c = 1 + (c = 1 + c), Infinity_2 && (Infinity_2.a += 25 != 1 / 0 > {}), 23..toString(),
                23..toString();
            }():
            c = 1 + c, b_2_2 = ((b_2_2 = !1 !== (b_1_1 += 0)) / ((!1 & 23..toString()) << 1) ? (c = 1 + c,
            [] << (2 === [ , 0 ].length) | 1 ^ 38..toString()) : (c = 1 + c, 0)) ? {
                c: (c = 1 + c, NaN_1 &= (b_2_2 && (b_2_2.null = (24..toString(), !0))) !== (2 === [ , 0 ].length !== 38..toString() ^ !1)),
                3: (c = 1 + c, c += 1, this % 24..toString() != void 0 * 23..toString()),
                1.5: (c = 1 + c, arguments_1 >>= (NaN >= (b_1 && (b_1.undefined = NaN))) * ("function" ^ (24..toString(),
                !1))),
                null: (c = 1 + c, 0 * ("undefined" !== 24..toString()) < (-5 + (2 === [ , 0 ].length) == 0)),
                "\t": (c = 1 + c, 0 !== [] > 5 ^ -2 % 24..toString() <= 1)
            } : "function" == typeof f9 && --_calls_ >= 0 && f9(23..toString(), (c = 1 + c,
            !0), (c = 1 + c, ({} || !0 ^ this) - 1 / 0));
            for (var brake115 = 5; (c += 1) + ("function" == typeof f2 && --_calls_ >= 0 && f2()) && brake115 > 0; --brake115) {
                switch (a++ - a) {
                  case {
                        3: (c = 1 + c, undefined_1 && (undefined_1["function" == typeof undefined_1 && --_calls_ >= 0 && undefined_1((c = 1 + c,
                        !0 !== (c += 1, -4 | 38..toString() < /[a2][^e]+$/)), (c = 1 + c, !0), "undefined")] += ((/[a2][^e]+$/ >= 38..toString()) + !1) % 0)),
                        b: (c = 1 + c, 0),
                        "-2": (c = 1 + c, -3 >> (2 == []) || !1)
                    }.var:
                    var brake117 = 5;
                    c = 1 + c;
                    break;

                  case (c += 1) + (Math_1 && Math_1["function" == typeof arguments_1 && --_calls_ >= 0 && arguments_1((c = 1 + c,
                    NaN < (0 !== {} === (-5 | 23..toString()))), 5, "number")]):
                  case a++ + (b_2_2 && b_2_2.length):
                    c = 1 + c, c += 1, (arguments_1 && (arguments_1[(c = 1 + c, !1 << (b_2_2 && (b_2_2[(c += 1) + !0] -= 24..toString() % "function" != 4)))] += (2 === [ , 0 ].length) + void 0)) >> (b_2 && (b_2[b] = -2 >>> (25 ^ this))) ? (c = 1 + c,
                    38..toString()) : (c = 1 + c, 23..toString(), NaN_1 += (2 === [ , 0 ].length) < null);
                    break;

                  case (c += 1) + (a++ + Math_1 ? undefined_1 : "function" == typeof Math_1 && --_calls_ >= 0 && Math_1((c = 1 + c,
                    "object" % 38..toString() > (-2 != this) === -38..toString() % (-0 == {})))):
                    var brake123 = 5;
                    do {
                        c = 1 + c;
                    } while (c = 1 + c, ((38..toString() & {}) > NaN) / (c += 1, "number" <= (b_2_2 &= !1)) && --brake123 > 0);
                    c += 1;
                }
            }
            break;

          case (c += 1) + (b_1 = NaN) % 0:
            try {
                b = a;
            } catch (c_1) {
                var expr128 = (c = 1 + c, c += 1, (0 & 38..toString()) >>> !0 || 4).toString()[(c = 1 + c,
                NaN >= NaN * (-3 != this))];
                for (var key128 in expr128) {
                    c = 1 + c;
                    var NaN_1_2 = expr128[key128];
                    c = 1 + c;
                }
                (c = 1 + (c += 1), (0 <= "bar" % (2 === [ , 0 ].length)) - -25 || a || 3).toString();
            } finally {
                if (NaN_1) {
                    try {
                        c = 1 + c, arguments_1 && (arguments_1[(c = 1 + c, (arguments_1 && (arguments_1[((b_1 && (b_1[(c = 1 + c,
                        b_1 = -3 >> (0 == 24..toString()) <= (23..toString() % "bar" || -1 | 2 === [ , 0 ].length))] = NaN)) ^ (b_2_2 && (b_2_2[(c = 1 + c,
                        arguments_1 >>= 0 >= /[a2][^e]+$/ << [])] %= {} >= !0))) >= NaN] = !0 / ("number" >> this))) <= (25 | 2 === [ , 0 ].length) + (c += 1,
                        -3))] += 0);
                    } catch (c) {}
                }
                c += 1;
            }
        }
    } catch (c) {
        a++, a++;
    }
} else {
    for (var brake137 = 5; function() {
        c += 1;
        for (var t = 5; --b + (b += a) && t > 0; --t) {
            for (var e = 5; NaN_1_2 && NaN_1_2[--b + b_1_1] && e > 0; --e) {}
        }
    } && --brake137 > 0; ) {}
}

}

var bar_1 = function(t) {
!function() {
c += 1;
for (var a = 5; --t + t-- && --a > 0; ) {
switch (c = 1 + c, !1) {
default:
case c = 1 + c, (4 !== {} | 0) >> (NaN < (2 === [ , 0 ].length ^ 1 / 0)):
case c = 1 + c, !1 << !1 - this == (3 * (2 === [ , 0 ].length) && !0):
case c = 1 + c, !0 | 1 * (foo_2 && (foo_2[(c = 1 + c, c_1_1 && (c_1_1.in /= [] % -1 != (-5 === []) | (c += 1,
NaN)))] <<= 1)):
}
}
}();
}(a++ + (b = a), 23..toString()), brake149 = 5;

do {
c += 1, foo_2 && foo_2.Infinity;
} while (--b + typeof foo_2_1 && --brake149 > 0);

console.log(null, a, b, c);

```js
original result:
null 116 111 25

uglified result:
null 116 111 24

minify(options):
{
  "compress": {
    "keep_fargs": false,
    "passes": 100
  }
}

Suspicious compress options:
  unused

I can't reproduce the first test case:

$ cat 600k.js | node
null 118 10 67

$ cat 600k.js | bin/uglifyjs -mc keep_fargs=0,passes=100 -b | node
null 118 10 67

I can reproduce the second test case:

$ cat second.js | node
null 116 111 25

$ cat second.js | bin/uglifyjs -mc keep_fargs=0,passes=100 -b | node
null 116 111 24

Another 1.2MFuzz yields four cases...

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

function f0(foo_1, a_1, b_2) {
    function f1() {
        for (var brake1 = 5; delete ((foo_1 && (foo_1[(c = 1 + c, +((this >= -3) >> (3 || 2)))] = -3 % undefined)) / (undefined >>> NaN) !== (true == -4) < -5 - "number") && brake1 > 0; --brake1) {
            var brake2 = 5;
            while (typeof f2 == "function" && --_calls_ >= 0 && f2((c = 1 + c, (b_2 && (b_2.var = "" << 3 >>> (b_2 && (b_2[(c = 1 + c, 
            b_2 && (b_2.foo >>= ("function" === -4) >> -2 / -0 >= ((c = c + 1, 38..toString()) >= (false === 1))))] >>>= /[a2][^e]+$/ < 5)))) << (this || -4) / ("undefined" - "undefined"))) && --brake2 > 0) {}
        }
        c = c + 1;
    }
    var b_2 = f1([ (c = c + 1) + (typeof f1 == "function" && --_calls_ >= 0 && f1(-0, (c = 1 + c, 
    b_2 = (25 % "bar" ^ -5 > this) === (22 ^ 25) >> (-1 ^ 4)))), , typeof b_2_2 != "boolean", a++ + a--, {
        NaN: (c = 1 + c, b_2 && (b_2.NaN = (undefined | false) - 22 * 5 !== (("foo", -2) | (-1 || 25)))),
        var: (c = 1 + c, ("undefined" > -3 < "function" >> 4) * ((b_2 && (b_2[(c = 1 + c, 
        (([ , 0 ].length === 2) % undefined ^ (this | 3)) + (0 != undefined ^ 23..toString() == 5))] = ([ , 0 ].length === 2) % null)) | -5 + 22)),
        "\t": (c = 1 + c, 24..toString() === 4 == 2 / true | this > 38..toString() === 3 >= 4),
        length: (c = 1 + c, ("foo" == /[a2][^e]+$/ || 23..toString() - "undefined") > (foo_1 && (foo_1[/[a2][^e]+$/] %= 22 == 24..toString() | (b_2 = "" !== "number")))),
        3: (c = 1 + c, ([ , 0 ][1] == -4 !== /[a2][^e]+$/ >= true) >>> (-1 << true) / ({} != -0))
    }.Infinity ].length, function() {
        {
            var undefined_1 = function b_2(Infinity_2, a_2, undefined) {
            }(-5, "");
        }
        c = c + 1;
        {
            var expr7 = typeof a != "boolean";
            for (var key7 in expr7) {
                c = 1 + c;
                var undefined_1 = expr7[key7];
                {
                }
            }
        }
        {
            return;
            (c = c + 1) + ((c = 1 + c, ~(foo_1 && (foo_1.NaN = [ , 0 ][1] + 23..toString() + (a_1 && (a_1.in = -1 & [ , 0 ][1]))))) ? (c = 1 + c, 
            ([ , 0 ][1] < 0) * (/[a2][^e]+$/ - -2) >>> ((b_2 += -4 << -5) !== (undefined !== 1))) : (c = 1 + c, 
            (38..toString() != ([ , 0 ].length === 2) | -2 ^ 38..toString()) % (([ , 0 ].length === 2) / 4 | 25 >> "number")));
        }
    }());
    function f2(a) {
        {
            var a = function f3(b_1, NaN) {
                try {
                    c = 1 + c, b_2 = (38..toString() || -0) <= (b_2 && (b_2[(c = 1 + c, delete ((Infinity & true) == (c = c + 1, 
                    "")))] += 24..toString() % -0)) !== (foo_1 &= 25 === "foo") + (true >>> true);
                } catch (b_2_2) {
                }
                {
                }
            }(--b, ((c = 1 + c, ("foo" ^ [ , 0 ][1]) >= (a_1 && (a_1.var = -2 + undefined)) != (-0 <= "number" ^ delete Infinity)) || 1).toString()[(c = 1 + c, 
            (0 > "bar") / (23..toString() == Infinity) === +(foo_1 && (foo_1.null = (-2, 24..toString()))))]);
        }
        {
            var a_2 = function b_2_2(a_1, a_1_1) {
                function f4() {
                }
                var foo_1_2 = f4();
                function f5(foo_1_2_1) {
                }
                var b = f5();
                function f6(bar_2, foo_1, a_1_1) {
                }
                var NaN = f6();
                function f7(b_1) {
                }
                var a_1 = f7(false);
                function f8(a_1_2, b_1) {
                }
                var Math_1 = f8((c = 1 + c, (foo_1 && (foo_1.undefined = undefined & "function")) * (22 & Infinity) != (b_2 += 38..toString() && []) <= (false | false)));
            }(22, (c = c + 1) + foo_1, []);
        }
    }
    function f9(arguments_1) {
        var a = (c = c + 1) + (typeof f1 == "function" && --_calls_ >= 0 && f1(a++ + /[abc4]/.test(((c = 1 + c, 
        (c = c + 1, 5 & "") <= (/[a2][^e]+$/ + "" & ("bar" ^ true))) || b || 5).toString()), -0)), a_2 = --b + ((c = c + 1) + a++ || a || 3).toString();
        a++ + new function() {
            this.foo >>>= ((this && "function") ^ -"bar") >> (0 << true != (b_2 >>>= "bar" == 3));
            this[a++ + (--b + [] || 7).toString()[arguments_1 && arguments_1[(c = 1 + c, "foo" * "bar" * (NaN + "bar") % (c = c + 1, 
            Infinity / "foo"))]]] = (23..toString() <= [ , 0 ][1]) << (c = c + 1, "foo") ^ (24..toString(), 
            -2) & (a_2 *= undefined - 23..toString());
            c = 1 + c, Infinity >= 2 == -5 < 24..toString() ^ 38..toString() / 0 * (24..toString() ^ "object");
        }();
    }
    var parseInt_2 = f9();
    function f10() {
        {
            var brake18 = 5;
            do {
                try {
                    {
                        c = 1 + c, (c = c + 1, -0 <= 5) || (38..toString() << /[a2][^e]+$/) + true * 22;
                        c = 1 + c, ("bar" & true) === Infinity / NaN ^ (parseInt_2 && (parseInt_2[b = a] = "undefined" << 23..toString() <= ([ , 0 ].length === 2 === "function")));
                    }
                } catch (b_2_1) {
                    {
                        var expr23 = (c = 1 + c, (parseInt_2 && (parseInt_2.var = -1 || "")) >>> (undefined == []) <= -5 + null << (parseInt_2 >>= 38..toString() * this));
                        for (var key23 in expr23) {
                            c = 1 + c, +(24..toString() >= "bar" ^ undefined === []);
                        }
                    }
                    {
                    }
                } finally {
                    try {
                        c = 1 + c, (parseInt_2 && (parseInt_2[(c = 1 + c, 3 << undefined >> Infinity - 0 > ("number" && [ , 0 ].length === 2) % (c = c + 1, 
                        "bar"))] += 3 / -0), "foo" != 38..toString()) - (2 ^ 2 | [ , 0 ][1] ^ 1);
                    } catch (b_1) {
                    } finally {
                    }
                    try {
                        c = 1 + c, (5 * "undefined" ^ (-4 ^ -2)) != (4 & 23..toString()) >= (22 <= undefined);
                    } finally {
                    }
                }
            } while (a++ && --brake18 > 0);
        }
        L142681: {}
    }
    var Infinity_1 = f10(38..toString(), this, 23..toString());
}

var c_1 = f0();

console.log(null, a, b, c);

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

function f0(t, n, o) {
function i() {
for (var i = 5; t && (t[(c = 1 + c, +((this >= -3) >> 3))] = NaN), i > 0; --i) {
for (var r = 5; --_calls_ >= 0 && (c = 1 + c, o && (o.var = 0 >>> (o && (o[(c = 1 + c,
o && (o.foo >>= 0 >= (c += 1, 38..toString() >= !1)))] >>>= !1))), function() {
try {
c = 1 + c, o = (38..toString() || -0) <= (o && (o[(c = 1 + c, c += 1, !0)] += 24..toString() % -0)) !== 0 + (t &= !1);
} catch (t) {}
}(--b, (c = 1 + c, 0 >= (n && (n.var = NaN)) != (!1 ^ delete Infinity) || 1).toString()[(c = 1 + c,
!1 / (23..toString() == 1 / 0) == +(t && (t.null = 24..toString())))]), c += 1,
c = 1 + (c += 1), t && (t.undefined = 0), void (o += 38..toString() && [])) && --r > 0; ) {}
}
c += 1;
}
o = i((c += 1, --_calls_ >= 0 && i((c = 1 + c, o = 0 == (NaN ^ -5 > this))), a++,
a--, c = 1 + c, o && (o.NaN = !0), c = 1 + c, o && (o[(c = 1 + c, ((2 === [ , 0 ].length) % void 0 ^ (3 | this)) + (!0 ^ 5 == 23..toString()))] = (2 === [ , 0 ].length) % null),
c = 1 + c, 24..toString(), 38..toString(), c = 1 + c, 23..toString(), t && (t[/[a2][^e]+$/] %= 22 == 24..toString() | (o = !0)),
c = 1 + c), function() {
c += 1;
var t = "boolean" != typeof a;
for (var n in t) {
c = 1 + c;
}
}());
var r = function() {
var t = (c += 1) + (--_calls_ >= 0 && i((t++, /[abc4]/.test((c = 1 + c, c += 1,
!0).toString())))), n = --b + ((c += 1) + t++ || t || 3).toString();
t++, new function() {
this.foo >>>= (NaN ^ (this && "function")) >> (0 != (o >>>= !1)), this[t++ + (--b + [] || 7).toString()[void 0]] = (23..toString() <= 0) << (c += 1,
"foo") ^ (24..toString(), -2 & (n *= void 0 - 23..toString())), c = 1 + c, 24..toString(),
38..toString(), 24..toString();
}();
}();
!function() {
var t = 5;
do {
try {
c = 1 + c, c = 1 + (c += 1), r && (r[b = a] = "undefined" << 23..toString() <= (2 === [ , 0 ].length === "function"));
} catch (t) {
var n = (c = 1 + c, (r && (r.var = -1)) >>> (void 0 == []) <= -5 << (r >>= 38..toString() * this));
for (var o in n) {
c = 1 + c, 24..toString();
}
} finally {
try {
c = 1 + c, r && (r[(c = 1 + c, 3 > (2 === [ , 0 ].length) % (c += 1, "bar"))] += -1 / 0),
38..toString();
} catch (t) {}
try {
c = 1 + c, 23..toString();
} finally {}
}
} while (a++ && --t > 0);
}(38..toString(), 23..toString());
}

var c_1 = f0();

console.log(null, a, b, c);

```js
original result:
null 105 -1 130

uglified result:
null 105 -1 139

minify(options):
{
  "compress": {
    "keep_fargs": false,
    "passes": 100
  }
}

Suspicious compress options:
  collapse_vars
  evaluate
  inline
  join_vars
  passes
  reduce_vars
  side_effects
  typeofs
  unused
// original code
// (beautified)
var _calls_ = 10, a = 100, b = 10, c = 0;

function f0(a_2, a_1) {
    function f1(a_1, parseInt_1) {
        for (var brake1 = 5; (c = c + 1) + [ 25, a_2 && a_2[(c = 1 + c, a_1 && (a_1.Infinity += (parseInt_1 && (parseInt_1[{}] = (c = c + 1, 
        {}) === !/[a2][^e]+$/)) <= ((null == 0) < (0 & "number"))))], --a ][typeof f2 == "function" && --_calls_ >= 0 && f2(0)] && brake1 > 0; --brake1) {
            c = c + 1;
        }
        c = c + 1;
    }
    var a_1 = f1(1);
    function f2() {
        var arguments = a++ + (b += a);
        var bar_2 = a++ + (a_1 && a_1.in);
    }
    function f3(NaN_1, c_1) {
        function f4() {
            c = c + 1;
            var a_2 = (c = 1 + c, undefined > 25 ^ [] >>> -4 || c_1 && (c_1.c = Infinity % 5 === -0 * -4));
        }
        var c_2 = f4();
        function f5(Infinity_2) {
            function f6(a, b_1, Infinity_2_2) {
            }
            var b_2 = f6();
            function f7(b_2_1, foo_1) {
            }
            var b = f7();
        }
        var arguments_1 = f5([ , 0 ][1], 2);
        function f8() {
            switch (c = 1 + c, c_1 && (c_1.in ^= (5 >>> "") * (Infinity <= false) + (false >>> this >> (23..toString(), 
            3)))) {
              case c = 1 + c, (("function" | null) > (false < -2)) / (-undefined !== ("function" ^ 1)):
                ;
                break;

              case c = 1 + c, (-0 !== -5 ^ [] / -4) * ((3 !== -4) * ({} ^ false)):
                ;
                break;

              case c = 1 + c, (c = c + 1, "undefined") << ("number" === 4) == ([ , 0 ][1] !== "" && 5 - 25):
                ;

              case c = 1 + c, (38..toString() >= /[a2][^e]+$/) >>> (c = c + 1, 38..toString()) << ((3 | NaN) > (null <= -4)):
                ;
                break;
            }
            {
                var brake9 = 5;
                while ((c = 1 + c, ((arguments_1 && (arguments_1[(c = 1 + c, this >>> [] === false > [] ^ ("number" == this) >= (c_1 && (c_1.c += ([ , 0 ].length === 2) % 24..toString())))] = [ , 0 ][1] != ([ , 0 ].length === 2))) == 3 <= 38..toString()) % (-5 >>> "number" === (arguments_1 && (arguments_1[(c = 1 + c, 
                (a_1 *= (22 == -4) >>> (25 >>> ([ , 0 ].length === 2))) <= (24..toString() || 2 || "number" && 25))] = "function" / "object")))) && --brake9 > 0) {
                    c = 1 + c, ([] == "number", 23..toString() ^ "number") ^ 1 !== true != (c = c + 1, 
                    null);
                }
            }
        }
        var a_1_1 = f8(-4, (c = c + 1) + (typeof f5 == "function" && --_calls_ >= 0 && f5()), "");
    }
    var b_2 = f3();
    function f9(a_1) {
        function f10() {
            {
                return c = 1 + c, (c = c + 1, 38..toString()) >> "bar" + -1 === ([ , 0 ][1] != 24..toString()) <= (a_1 && (a_1[(c = 1 + c, 
                ([ , 0 ][1] < "object" == (a_1 && (a_1[(c = 1 + c, void (("function" && 1) !== NaN / ([ , 0 ].length === 2)))] = 5 >>> -0))) % (-0 < {} !== this << 1))] >>>= "number" & 3));
            }
        }
        var parseInt_1 = f10();
        function f11(b) {
            c = 1 + c, a_2 && (a_2.NaN += (parseInt_1 && (parseInt_1[--b + (b_2 && b_2[(c = 1 + c, 
            a_1 && (a_1.b %= (a_1 && (a_1[a++ + typeof (c = 1 + c, a_2 = (/[a2][^e]+$/ / [] >= (true > [ , 0 ][1])) - ((a_1 && (a_1.null = -0 <= "number")) !== ("number" != -0)))] = (-0, 
            [], "bar" || [ , 0 ][1]))) >= (-5 & 4 && (22, 24..toString()))))])] = "function" < ([ , 0 ].length === 2) !== (true | 4))) ^ (2 < {}) >> (Infinity >= true));
            for (var brake14 = 5; (c = 1 + c, (-1 ^ {}) >> ![ , 0 ][1] < (5 || -3) + (a_2 ^= 22 === /[a2][^e]+$/)) && brake14 > 0; --brake14) {
                c = 1 + c, 22 - 25 == (a_1 && (a_1[(c = 1 + c, (c = c + 1, -2) >= (([ , 0 ][1] & null) == (/[a2][^e]+$/ == null)))] = "function" && 4)), 
                a_1 && (a_1[a++ + void function parseInt_1_2() {
                }()] = ("number" != 24..toString()) << (-2 & -5));
            }
        }
        var b = f11();
        function f12(a_2, a_2, c) {
            function f13(Math_1) {
            }
            var a = f13(2, (c = 1 + c, ((false && 38..toString()) >> 22 * 22) - (-1 >= 23..toString() && (3, 
            Infinity))), (c = 1 + c, [ , 0 ][1] > 24..toString() === [] >> 0 && this != "number" != "function" << 25));
            function f14(arguments_1, parseInt_1_1) {
            }
            var b_1 = f14("function", [ , 0 ].length === 2);
            function f15(a_2) {
            }
            var a_2 = f15((c = 1 + c, (0 != 23..toString()) >= (4 || /[a2][^e]+$/) & ~("number", 
            NaN)), "function", (c = 1 + c, ([ , 0 ].length === 2) % true > ("function" != 25) != (a_1 && (a_1.Infinity = -4 ^ -4) || "foo" < "")));
            function f16(bar_1, bar) {
            }
            var foo = f16((c = 1 + c, !(a_1 = ({} << 23..toString(), delete "foo"))));
            function f17() {
            }
            var b_2 = f17();
        }
        var a_1 = f12(23..toString(), /[a2][^e]+$/, "");
        function f18(a_1, a_1_1, NaN) {
            {
                var expr16 = (c = 1 + c, (3 > [ , 0 ][1] && [] <= 22) <= (4 <= "bar") + ("object" == 23..toString()));
                L304354: for (var key16 in expr16) {
                    c = 1 + c, (a_1 && (a_1[(c = 1 + c, (1 === NaN) % (4 ^ 1) ^ (parseInt_1 && (parseInt_1.a = (true | /[a2][^e]+$/, 
                    /[a2][^e]+$/ != 24..toString()))))] = undefined >>> -4)) + (-4 - 25) !== (parseInt_1 && (parseInt_1[(c = 1 + c, 
                    (c = c + 1, null && Infinity) > ("foo" | -3 || 23..toString() <= "undefined"))] *= 38..toString() > NaN)) - (23..toString() >= "object");
                }
            }
            switch (c = 1 + c, ((3 === 22) < (Infinity ^ "number")) >> 38..toString() % false % (2 >>> 24..toString())) {
              case c = 1 + c, (/[a2][^e]+$/ >>> 2) - (2 + 22) << (Infinity < Infinity == ("object" != -4)):
                ;
                break;

              case c = 1 + c, (-2 > 22 && (a_1 += {} >>> [])) | (a_1 && (a_1[(c = 1 + c, (25 / this && null % 23..toString()) !== (-2 >= [] ^ (b_2 && (b_2.NaN = 22 > true))))] = -3 << 4)) * ({} !== -2):
                ;
                break;

              case c = 1 + c, (-4 <= this < (c = c + 1, undefined)) / ((a_1 && (a_1[(c = 1 + c, 
                a_1_1 && (a_1_1[(c = c + 1) + (a_1 && a_1.foo)] = (~[] & /[a2][^e]+$/ > "bar") <= (-"number" === /[a2][^e]+$/ * -3)))] = undefined * Infinity)) <= (22 & 1)):
                ;
                break;

              case c = 1 + c, (a_1_1 = (Infinity ^ [ , 0 ][1]) % ([] < false)) | (a_2 && (a_2[b = a] = 5 != 2 != (c = c + 1, 
                /[a2][^e]+$/))):
                ;
                break;
            }
        }
        var b_2 = f18(-4, typeof parseInt_1 != "unknown");
    }
    var b_2 = f9(/[a2][^e]+$/, 0, (c = c + 1) + [ --b + {
        "": (c = 1 + c, ("number" > this != Infinity / {}) << ("" & 24..toString()) / ("object" << 24..toString()))
    }[(c = c + 1) + b_2], (c = c + 1) + !(("object" !== "") >= (-0 & true) <= (-1 >>> 3 >= false - 23..toString())) ][a++ + {
        "-2": --b + {
            undefined: (c = 1 + c, "undefined" % Infinity >>> (b_2 && (b_2[(c = 1 + c, (1 % -5 & null == "function") === (b_2 = -1 >>> -5 ^ ("" ^ null)))] += this || 4)) >= (-4 != ([ , 0 ].length === 2), 
            "function" / 24..toString()))
        }.NaN
    }[(c = c + 1) + null]]);
}

var b_2 = f0(b_2 && b_2.Infinity);

console.log(null, a, b, c);

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

function f0(t, n) {
n = function() {
for (var i = 5; (c += 1) + [ 25, t && t[(c = 1 + c, 1..Infinity += !1)], --a ][--_calls_ >= 0 && (a++,
b += ++a, a++, void (n && n.in))] && i > 0; --i) {
c += 1;
}
c += 1;
}();
var i = (c = 1 + (c += 1), void function() {
switch (void (c = 1 + c)) {
case c = 1 + c, 0:
case c = 1 + c, !0 * (!1 ^ {}) * (!0 ^ [] / -4):
break;

      case c = 1 + c, -20 == (c += 1, 0):
      case c = 1 + c, (38..toString() >= /[a2][^e]+$/) >>> (c += 1, 38..toString()) << !0:
    }
    for (var t = 5; c = 1 + c, (void 0 == 3 <= 38..toString()) % !1 && --t > 0; ) {
        c = 1 + c, 23..toString(), c += 1;
    }
}((c += 1, --_calls_)));
i = function(n) {
    var i = function() {
        return c = 1 + c, c += 1, 38..toString() >> "bar-1" === (0 != 24..toString()) <= (n && (n[(c = 1 + c, 
        (0 == (n && (n[void (c = 1 + c)] = 5))) % (-0 < {} !== this << 1))] >>>= 0));
    }();
    !function(o) {
        c = 1 + c, t && (t.NaN += (i && (i[--o + (r && r[(c = 1 + c, n && (n.b %= (n && (n[a++ + (c = 1 + c, 
        typeof (t = (/[a2][^e]+$/ / [] >= !0) - (!0 !== (n && (n.null = !1)))))] = "bar")) >= 0))])] = "function" < (2 === [ , 0 ].length) !== 5)) ^ (2 < {}) >> !0);
        for (var g = 5; c = 1 + c, (-1 ^ {}) >> !0 < 5 + (t ^= !1) && g > 0; --g) {
            c = 1 + c, n && (n[(c = 1 + c, c += 1, !1)] = 4), n && (n[a++ + void 0] = ("number" != 24..toString()) << -6);
        }
    }();
    var o;
    23..toString(), o = 1 + (o = ""), 23..toString(), o = 1 + o, 24..toString(), o = 1 + o, 
    23..toString(), o = 1 + o, n && (n.Infinity = 0), o = 1 + o, 23..toString(), n = void (n = !0);
    var r = function(n, o) {
        var g = (c = 1 + c, [] <= 22 <= !1 + ("object" == 23..toString()));
        for (var S in g) {
            c = 1 + c, (-4)[(c = 1 + c, 0 ^ (i && (i.a = /[a2][^e]+$/ != 24..toString())))] = 0, 
            i && (i[(c = 1 + c, c += 1, !0)] *= 38..toString() > void 0), 23..toString();
        }
        switch (c = 1 + c, !1 >> 38..toString() % !1 % (2 >>> 24..toString())) {
          case c = 1 + c, -24:
          case !1 | ((-4)[(c = 1 + (c = 1 + c), (25 / this && null % 23..toString()) !== (-2 >= [] ^ (r && (r.NaN = !0))))] = -48) * (-2 !== {}):
          case c = 1 + c, (-4 <= this < void (c += 1)) / (((-4)[(c = 1 + c, o && (o[(c += 1) + (-4).foo] = (!1 & ~[]) <= !1))] = NaN) <= 0):
          case c = 1 + c, (o = 0 % ([] < !1)) | (t && (t[a] = 1 != (c += 1, /[a2][^e]+$/))):
        }
    }(0, "unknown" != typeof i);
}(/[a2][^e]+$/, (c += 1, --b, c = 1 + c, 24..toString(), 24..toString(), c += 1, 
c += 1, 23..toString(), a++, --b, c = 1 + c, i && (i[(c = 1 + c, 0 == (i = 31))] += this || 4), 
24..toString(), c += 1));

}

var b_2 = f0(b_2 && b_2.Infinity);

console.log(null, a, b, c);

```js
original result:
null 107 108 55

uglified result:
null 108 109 55

minify(options):
{
  "compress": {
    "keep_fargs": false,
    "passes": 100
  }
}

Suspicious compress options:
  collapse_vars
  evaluate
  inline
  join_vars
  passes
  reduce_vars
  sequences
  typeofs
  unused
// original code
// (beautified)
var _calls_ = 10, a = 100, b = 10, c = 0;

function f0(b_1, b, b_2) {
    function f1(a) {
        for (var brake1 = 5; {
            in: [ (c = 1 + c, (3 ^ -1 | ("bar" | "bar")) >= (("number" | null) & 23..toString() % -2)), (c = 1 + c,
            "number" / "object" >> (3 || /[a2][^e]+$/) === 22 / 4 >> (-1 >> 5)), (c = 1 + c,
            (-5 >= this ^ 22 + -3) !== ((b_2 += "" << "function") && + -3)), (c = 1 + c, b_2 && (b_2.Infinity += (null >>> true | 23..toString() > -2) << ("object" + "function") % ("" + -2))) ][(c = 1 + c,
            (4 << -4) / (([ , 0 ].length === 2) > 38..toString()) !== ([] >> NaN, -0 & 25))],
            foo: a++ + ((c = 1 + c, c = c + 1, (b_2 += 23..toString() & 3) - (b_2 && (b_2.in |= 5 >> 22))) || 3).toString()[(c = 1 + c,
            undefined + "undefined" > "undefined" + {} | (undefined && [ , 0 ].length === 2) ^ /[a2][^e]+$/ * true)],
            c: /[abc4]/.test(((c = 1 + c, (-0 || -1) >>> (-4 > "bar") != (b_2 && (b_2.in = ([ , 0 ].length === 2) >>> 0 >>> ("object" != "number")))) || b || 5).toString())
        }[--b + (typeof f2 == "function" && --_calls_ >= 0 && f2("object", (c = 1 + c, (b_1 && (b_1.NaN = (c = c + 1,
        "function") ^ {} >= 5)) * ((-3 != undefined) - ([ , 0 ][1] >>> null))), (c = 1 + c,
        (c = c + 1, ([ , 0 ].length === 2) < -3) % ([ , 0 ][1] % true | (true || NaN)))))] && brake1 > 0; --brake1) {
            var brake2 = 5;
            L255899: while (--b + b++ && --brake2 > 0) {
                try {
                    {
                        var brake4 = 5;
                        do {
                            c = 1 + c, (-2 ^ Infinity || 5 && "number") & ("foo" & -5 && -3 ^ 23..toString());
                        } while ((c = 1 + c, (b_1 && (b_1[typeof b_1 == "function" && --_calls_ >= 0 && b_1("function", (c = 1 + c,
                        (-2 == "undefined", false, 22) << (b_2 = null <= -1 ^ ("bar" || -1))))] |= 24..toString() - Infinity != (25 !== 25))) + (true < false & Infinity >>> "bar")) && --brake4 > 0);
                    }
                } finally {
                    c = 1 + c, (2 >>> "undefined") - (-4 >= "object") & ("" + -1 && -2 <= -5);
                    c = 1 + c, ((b_2 && (b_2[(c = 1 + c, ("" % "number" <= (b_1 += {} !== "object")) % ((1 || 25) / (23..toString() << -0)))] /= NaN + "bar")) !== null > undefined) > (([ , 0 ][1],
                    "") && {} > this);
                }
            }
        }
        return (a++ + (typeof f1 == "function" && --_calls_ >= 0 && f1({})) || a || 3).toString();
    }
    var b = f1(2, a++ + (b_1 && b_1.c));
    function f2(foo_2) {
        var b_1_2 = a++ + --b;
        var foo_1 = 0 === 1 ? a : b, foo_2 = b += a;
    }
    function f3(parseInt_1, parseInt_1_1) {
        switch (--b + parseInt_1_1) {
          case a++ + (0 === 1 ? a : b):
            try {
                switch (c = 1 + c, ("number" >> 2, null + NaN) !== (c = c + 1, "") < /[a2][^e]+$/ / "function") {
                  case c = 1 + c, (parseInt_1 = false < 1 >= null << "function") < ((b_2 && (b_2[(c = 1 + c,
                    (24..toString() - 4 >>> (Infinity <= "foo")) + (+[ , 0 ][1] <= ([ , 0 ][1] === -0)))] += {} ^ [])) === (-4 == null)):
                    ;
                    break;

                  default:
                    ;

                  case c = 1 + c, +(2 << 5) % ((true != 1) >>> this + this):
                    ;
                    break;

                  case c = 1 + c, ("number" >> -5) + (true && 4) == (c = c + 1, "bar") <= (23..toString() != 5):
                    ;
                    break;
                }
            } catch (undefined_1) {
                c = 1 + c, ((24..toString() && 23..toString()) == "undefined" > "") >> (4 + -3) / (-4 << 5);
                c = 1 + c, (38..toString() / -5 ^ (b_2 += 5 >= 4)) !== ([ , 0 ][1] === "bar") < (c = c + 1,
                23..toString());
            }
            {
                var brake16 = 5;
                do {
                    {
                    }
                } while (a++ + (b += a) && --brake16 > 0);
            }
            break;

          default:
          case --b + typeof b--:
            c = c + 1;
            break;

          case (1 & "bar") < undefined % -0 ^ false !== 1 == 2 * "undefined":
            {
                var brake19 = 5;
                do {
                    {
                    }
                } while (!b && --brake19 > 0);
            }
            {
                c = 1 + c, 22 / false === (c = c + 1, "") !== (0 < false === (4 !== -2));
                c = 1 + c, (parseInt_1 && (parseInt_1[--b] += (parseInt_1 = "function" % 5) % (null + 2))) >> ((23..toString(),
                undefined) >> 0 * {});
                c = 1 + c, (-1, {}) != [] * /[a2][^e]+$/ != {} >= 25 < "object" - -0;
            }
            break;
        }
        switch (a--) {
          case a++ + typeof parseInt_1_1:
            c = c + 1;
            break;

          case a++:
            break;

          case a++ + [ b_1 && b_1[(c = 1 + c, parseInt_1_1 && (parseInt_1_1.null = ((b_1 && (b_1.a >>>= ([],
            -5))) | 0 * 0) - ((-5, undefined) | -4 >= 38..toString())))], (c = 1 + c, (c = c + 1,
            "number" || 24..toString()) >>> ((false !== -0) <= ([ , 0 ].length === 2 || -4))), --b + ((c = 1 + c,
            (0 ^ [] | (2, "foo")) & ((parseInt_1_1 += -5 & -5) | NaN === 5)) || 0).toString()[(c = 1 + c,
            ([ , 0 ][1] * NaN && "number" >= 1) >= (parseInt_1 && (parseInt_1[(c = 1 + c, ([ , 0 ].length === 2) / 24..toString() * +3 + (([ , 0 ].length === 2 || -0) <= 23..toString() * -0))] = true * "object")) + (1 === -0))], a++ + (b = a), a++ + /[abc4]/.test(((c = 1 + c,
            c = c + 1, this < "" >= -3 + Infinity) || b || 5).toString()) ][a++ + (typeof f3 == "function" && --_calls_ >= 0 && f3("undefined"))]:
            break;

          case typeof f2 == "function" && --_calls_ >= 0 && f2(25, --b + (parseInt_1 && parseInt_1[(c = 1 + c,
            (22 ^ [] ^ true < "undefined") & -2 + {} !== (5 == "function"))]), 23..toString()):
            return (c = c + 1) + {
                in: (c = 1 + c, (4 === "") < (true, 1) <= (-5 >= 2 ^ -5 !== 3)),
                0: (c = 1 + c, (parseInt_1_1 && (parseInt_1_1.undefined = false - "function")) >> (-5 ^ 3) || void /[a2][^e]+$/ | 3 & -3),
                null: (c = 1 + c, (2 << 2) / (2 <= "number") === ~(null > Infinity)),
                in: (c = 1 + c, (parseInt_1_1 && (parseInt_1_1.b >>= 0 < 5)) > (/[a2][^e]+$/ === 3) | undefined >= -2 <= ("function" !== []))
            };
            break;
        }
    }
}

var bar_2 = f0(this, [ , 0 ].length === 2, [ -1 ][a++ + void ((bar_2 && (bar_2.NaN += 4 / 3 * (1 >> "bar"))) % (2 % NaN !== 0 + []))]);

console.log(null, a, b, c);

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

function f0(n, t, i) {
function o(r) {
for (var l = 5; {
in: [ (c = 1 + c, -4 >= (0 & 23..toString() % -2)), (c = 1 + c, !0), (c = 1 + c,
(-5 >= this ^ 19) !== ((i += 0) && -3)), (c = 1 + c, i && (i.Infinity += (0 | 23..toString() > -2) << NaN)) ][(c = 1 + c,
(4 << -4) / ((2 === [ , 0 ].length) > 38..toString()) != 0)],
foo: r++ + (c = 1 + c, c += 1, (i += 3 & 23..toString()) - (i && (i.in |= 0)) || 3).toString()[(c = 1 + c,
void 0 + "undefined" > "undefined" + {} | 0)],
c: /[abc4]/.test((c = 1 + c, -1 >>> !1 != (i && (i.in = (2 === [ , 0 ].length) >>> 0 >>> !0)) || t || 5).toString())
}[--t + (--_calls_ >= 0 && (c = 1 + c, n && (n.NaN = (c += 1, "function" ^ {} >= 5)),
c = 1 + c, c += 1, a++, --t, void (t += ++a)))] && l > 0; --l) {
for (var f = 5; --t + t++ && --f > 0; ) {
try {
var e = 5;
do {
c = 1 + c;
} while (c = 1 + c, (n && (n["function" == typeof n && --_calls_ >= 0 && n("function", (c = 1 + c,
22 << (i = 0)))] |= 24..toString() - 1 / 0 != 0)) + 0 && --e > 0);
} finally {
c = 1 + (c = 1 + c), i && (i[(c = 1 + c, (NaN <= (n += "object" !== {})) % (1 / (23..toString() << -0)))] /= "NaNbar");
}
}
}
return (r++ + (--_calls_ >= 0 && o({})) || r || 3).toString();
}
t = o(2, (a++, n && n.c));
}

var bar_2 = f0(this, 2 === [ , 0 ].length, [ -1 ][a++ + void (bar_2 && (bar_2.NaN += 4 / 3 * 1))]);

console.log(null, a, b, c);

```js
original result:
null 107 10 74

uglified result:
null 112 10 74

minify(options):
{
  "compress": {
    "keep_fargs": false,
    "passes": 100
  }
}

Suspicious compress options:
  collapse_vars
  evaluate
  inline
  join_vars
  passes
  reduce_vars
  sequences
  typeofs
  unused
// original code
// (beautified)
var _calls_ = 10, a = 100, b = 10, c = 0;

function f0(Math_1) {
    function f1() {
        {
            var brake1 = 5;
            do {
            } while (typeof f2 == "function" && --_calls_ >= 0 && f2(a++ + "undefined", 24..toString()) && --brake1 > 0);
        }
        {
            switch (+(1 !== [ , 0 ][1] != (undefined == 23..toString()) ^ -(23..toString() || NaN))) {
              case --b + (b *= a):
                c = 1 + c, (Math_1 && (Math_1.a += undefined + -5 >> (23..toString() ^ 24..toString()))) * (NaN << {} ^ "foo" == -3);
                break;

              case (c = c + 1) + (typeof f3 == "function" && --_calls_ >= 0 && f3("", (c = 1 + c, 
                delete ((1 === ([ , 0 ].length === 2)) > (([ , 0 ].length === 2) > ([ , 0 ].length === 2)))), true)):
                c = 1 + c, ("undefined" <= 22 <= (c = c + 1, -2)) + ("bar" * "" >> ("object" == Infinity));
                c = 1 + c, (c = c + 1, ([ , 0 ].length === 2) * 22) || Math_1 && (Math_1.NaN = "foo" & -2) && -5 ^ true;
                break;

              case a++ + a--:
                c = 1 + c, (-4 && -2) + (Math_1 && (Math_1.null = [] ^ 1)) | (3 >>> "object" || (-3 || 38..toString()));
                c = 1 + c, (this == "foo") >>> ("undefined" >> -3) < ((-1 | NaN) >= (Math_1 && (Math_1[(c = 1 + c, 
                Math_1 && (Math_1[--b + (b = a)] -= (false << -1 | (22 | -0)) - (3 < NaN === (false || "bar"))))] = this < "foo")));
                break;

              default:
                c = 1 + c, ((/[a2][^e]+$/ || 25) && (3 || -2)) << ((-1 != "function") > (/[a2][^e]+$/ ^ "number"));
                c = 1 + c, 5 <= "bar" !== 2 << -4 ^ (2 === 5) << true + ([ , 0 ].length === 2);
            }
        }
    }
    var parseInt_1 = f1();
    function f2(bar_2) {
        {
            var b_1 = function f3(parseInt_1_1, bar_2) {
                var Infinity_1 = (c = 1 + c, 2 <= 3 > -"foo" === this * "" <= (NaN & {})), parseInt_1 = (c = 1 + c, 
                3 == this == 0 > "object" & (c = c + 1, -5 !== "object"));
            }();
        }
        return;
    }
    function f4() {
        c = c + 1;
        c = c + 1;
    }
    var Math_1_1 = f4(a++ + {
        a: /[abc4]/.test((--b + ([ , 0 ].length === 2) || b || 5).toString())
    }[[ b--, --b + "function", {
        b: (c = 1 + c, (-3 & "function") / ("bar" === -0) ^ ("bar" ^ "undefined") >> (-3, 
        Infinity)),
        "": (c = 1 + c, ("function", 3) === -3 * "bar", ("object" ^ "object") >> -5 + undefined),
        b: (c = 1 + c, (NaN << 22) % (this > 0) - ((25 ^ Infinity) !== (parseInt_1 && (parseInt_1.NaN = [ , 0 ][1] && this))))
    }[(c = 1 + c, (-0 > NaN) >> -4 % -5 || "function" / /[a2][^e]+$/ << (-2 ^ 22))], --b + (Math_1_1 && Math_1_1.c) ][a++]], false, {});
    function f5(b_2, a_1, parseInt) {
        for (var brake18 = 5; a++ + (typeof f6 == "function" && --_calls_ >= 0 && f6(typeof parseInt_1 == "function" && --_calls_ >= 0 && parseInt_1((c = 1 + c, 
        c = c + 1, [] <= true <= -4 << {}), 25, -2), !b, "foo")) && brake18 > 0; --brake18) {
            c = c + 1;
        }
        {
            var brake20 = 5;
            L186734: while ((b = a) && --brake20 > 0) {
                try {
                    L186735: {
                        c = 1 + c, ([ , 0 ][1] >= [] <= -0 >>> -3) + ((38..toString() ^ true) & (-4 ^ 5));
                    }
                } finally {
                    c = 1 + c, (-4 >> "number" == ([ , 0 ].length === 2) + -0) >> (Infinity << null < this / 5);
                }
            }
        }
    }
    var bar = f5([], typeof a_1 === "crap");
}

var b_2 = f0(-(/[a2][^e]+$/ << true, [ , 0 ][1] << 5, b_2 = (-3 ^ -2) <= "number" + ([ , 0 ].length === 2)), --b, b + 1 - .1 - .1 - .1);

console.log(null, a, b, c);

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

function f0(t) {
var o = function() {
var o = 5;
do {} while (--_calls_ >= 0 && (a++, 24..toString(), c = 1 + c, c = 1 + (c = 1 + c),
void (c += 1)) && --o > 0);
switch (+(1 != (void 0 == 23..toString()) ^ -(23..toString() || NaN))) {
case --b + (b *= a):
c = 1 + c, t && (t.a += NaN >> (23..toString() ^ 24..toString()));
break;

      case (c += 1) + ("function" == typeof f3 && --_calls_ >= 0 && f3("", (c = 1 + c, !0), !0)):
        c = 1 + c, c = 1 + (c += 1), c += 1, 22 * (2 === [ , 0 ].length) || t && (t.NaN = 0);
        break;

      case a++ + a--:
        c = 1 + c, t && (t.null = 1 ^ []), c = 1 + c, t && (t[(c = 1 + c, t && (t[--b + (b = a)] -= 22))] = this < "foo");
        break;

      default:
        c = 1 + (c = 1 + c);
    }
}(), n = (a++, /[abc4]/.test((--b + (2 === [ , 0 ].length) || b || 5).toString()), 
b--, --b, c = 1 + c, c = 1 + c, c = 1 + c, o && (o.NaN = 0), c = 1 + c, --b, n && n.c, 
a++, c += 1, void (c += 1));
!function() {
    for (var t = 5; a++ + ("function" == typeof f6 && --_calls_ >= 0 && f6("function" == typeof o && --_calls_ >= 0 && o((c = 1 + c, 
    c += 1, [] <= !0 <= -4 << {}), 25, -2), !b, "foo")) && t > 0; --t) {
        c += 1;
    }
    for (var n = 5; (b = a) && --n > 0; ) {
        try {
            c = 1 + c, 38..toString();
        } finally {
            c = 1 + c;
        }
    }
}();

}

var b_2 = f0(-(b_2 = 3 <= "number" + (2 === [ , 0 ].length)), --b, b + 1 - .1 - .1 - .1);

console.log(null, a, b, c);

```js
original result:
null 109 109 25

uglified result:
null 109 109 26

minify(options):
{
  "compress": {
    "keep_fargs": false,
    "passes": 100
  }
}

Suspicious compress options:
  collapse_vars
  evaluate
  if_return
  inline
  passes
  reduce_vars
  sequences
  typeofs
  unused

Sorry, schoolboy error - that last one is just your average unused false positive.

Only four cases in 1.2MFuzz

I can't reproduce the first test case:

That's weird - I can. Hopefully this isn't OS-dependent... :see_no_evil:

That's weird - I can. Hopefully this isn't OS-dependent...

I tried a few node versions with various options and could not get the first test case to fail. Once you reduce the test case I can try again.

My current test case:


issue_2630: {
    options = {
        collapse_vars: true,
        inline: true,
        passes: 2,
        reduce_funcs: true,
        reduce_vars: true,
        sequences: true,
        side_effects: true,
        unused: true,
    }
    input: {
        var c = 0;
        (function() {
            while (f());
            function f() {
                var a = function() {
                    var b = c++, d = c = 1 + c;
                }();
            }
        })();
        console.log(c);
    }
    expect: {
        var c = 0;
        (function() {
            while (c++, void (c = 1 + ++c)) ;
        })(),
        console.log(c);
    }
    expect_stdout: "2"
}

I saved your reduced test case, renamed it and tried to run it with node and got this baffling result:

$ cat test1reduced.js | node
Galloping...
Tommy the Palomino moved 34m.

It turns out I had an old test program by the same name (I'm not very inventive) and the file move had failed and I didn't see the error.

The reduced test case does indeed fail here:

$ cat test1b.js | node
2

$ cat test1b.js | bin/uglifyjs --toplevel -c passes=9 | node
3
       while (f());
       function f() {

Was this a forward call generated by the most recent ufuzz changes?

Tommy the Palomino moved 34m.

You've made my day! :rofl:

Was this a forward call generated by the most recent ufuzz changes?

Yup - and single-use to boot 😎

I thought I'd reduce the third test case, but it appears similar to the one already reduced above. You might make a test of it anyway.

$ cat tc3.js 
var c = 0;
!function() {
    while (f()) {}
    function f() {
        var not_used = function() {
            c = 1 + c;
        }(c = c + 1);
    }
}();
console.log(c);
$ cat tc3.js | node
2



md5-83a03272ee61cfa3b07dc28bb990ddaa



$ cat tc3.js | bin/uglifyjs -c passes=2 | node
3

It'd be easier if a new issue was created for each fuzz failure.

Test case 5 reduced:

$ cat tc5.js 
var x = 2, a = 1;
(function() {
    function f1(a) {
        f2();
        --x >= 0 && f1({});
    }
    f1(a++);
    function f2() {
        a++;
    }
})();
console.log(a);

```
$ cat tc5.js | node
5


$ cat tc5.js | bin/uglifyjs -bc | node
2

```js
$ cat tc5.js | bin/uglifyjs -bc
var x = 2, a = 1;

!function() {
    function f1(a) {
        a++, --x >= 0 && f1({});
    }
    f1(a++);
}(), console.log(a);

Test case 4 reduced:

$ cat tc4.js 
var x = 3, a = 1, b = 2;
(function() {
    (function f1() {
        for (; --x >= 0 && f2();) {}
    }());
    function f2() {
        a++ + (b += a);
    }
})();
console.log(a);

```
$ cat tc4.js | node
2


$ cat tc4.js | bin/uglifyjs -bc | node
3

```js
$ cat tc4.js | bin/uglifyjs -bc
var x = 3, a = 1, b = 2;

!function() {
    !function() {
        for (;--x >= 0 && void (a++, b += ++a); ) ;
    }();
}(), console.log(a);

Thanks for the test cases – I'm under the impression that they are all of the same bug, hence the single report.

Though now that I have to scroll through it, I think I shall make a separate issue for each ufuzz report in the future...

do/while test variation:

$ cat tc3c.js
var c = 1;
!function() {
    do {
        c *= 10;
    } while (f()) {}
    function f() {
        return function() {
            return (c = 2 + c) < 100;
        }(c = c + 3);
    }
}();
console.log(c);

```
$ cat tc3c.js | node
155


$ cat tc3c.js | bin/uglifyjs -bc passes=2 | node
188

```js
$ cat tc3c.js | bin/uglifyjs -bc passes=2
var c = 1;

!function() {
    do {
        c *= 10;
    } while (c += 3, (c = 2 + (c += 3)) < 100);
}(), console.log(c);

I'm under the impression that they are all of the same bug, hence the single report.

Did that impression hold true?

What's the current fuzz count or will you reset?

Did that impression hold true?

Sort of - there are three different bugs, but the failed cases overlap between what they've tripped over :sweat:

What's the current fuzz count or will you reset?

I always reset when master got (code) changes.

... and without #2636 the fix for this issue would trip over a whole can of worms as well.

What's the new fuzz iteration target before release?

I'm aiming for 5MFuzz - hopefully the extra day is going to help :wink:

Was this page helpful?
0 / 5 - 0 ratings

Related issues

buu700 picture buu700  Â·  5Comments

gabmontes picture gabmontes  Â·  5Comments

GrosSacASac picture GrosSacASac  Â·  3Comments

alexlamsl picture alexlamsl  Â·  4Comments

diegocr picture diegocr  Â·  3Comments