Repository: mishoo/UglifyJS (language: javascript)

Issue:
ufuzz failure
```js
// original code
// (beautified)
var _calls_ = 10, a = 100, b = 10, c = 0;

try {
    {
        var brake2 = 5;
        L13311: while (a++ && --brake2 > 0) {
            L13312: {
                {
                    var brake4 = 5;
                    do {
                        for (var brake5 = 5; a && brake5 > 0; --brake5) {
                            var expr6 = /[abc4]/.test(([].null || b || 5).toString());
                            for (a in expr6) {
                                c = 1 + c;
                                var foo_2 = expr6[a];
                                switch (a++ + (typeof f1 == "function" && --_calls_ >= 0 && f1({
                                    __proto__: (c = 1 + c, ({} === []) >> (([ , 0 ].length === 2) > "bar") != (25 / "foo" ^ (true ^ -5))) || {}
                                }.a, Infinity))) {
                                  case (38..toString() === "function" || this - 2) ^ true - "function" << (5 >>> -2):
                                    break;

                                  case -(foo_2 && (foo_2[typeof b !== "function"] /= -0 - 2 - (4 !== "undefined") > ((c = c + 1, 
                                    []) && (foo_2 && (foo_2[c = 1 + c, foo_2 += (foo_2 += -5 - "" | "c" >> -5) ^ 1 === [] === "c" % []] += false ^ 4))))):
                                    switch (--b + /[abc4]/.test(((c = 1 + c, (3 != "undefined") / (foo_2 *= ([ , 0 ].length === 2) % false) + (23..toString() == true || undefined > 25)) || b || 5).toString())) {
                                      case [ (c = 1 + c, -3 !== 23..toString() != (foo_2 = "function" === "foo"), 
                                        -5 * "undefined" << ("object" >> false)), , (c = 1 + c, 
                                        -("bar" ^ 23..toString()) >>> (foo_2 += (-3 || []) <= 1 >> 38..toString())) ].c:
                                        c = 1 + c, !("undefined" === 24..toString() && -0 ^ -4);
                                        break;

                                      case foo_2 && typeof foo_2.null == "function" && --_calls_ >= 0 && foo_2.null(5):
                                        break;

                                      case (c = c + 1) + a++:
                                        c = 1 + c, ({} << 4 === ("function" && 5)) < (4 ^ -4) >> "number" / [];
                                        break;

                                      case a++ + (1 === 1 ? a : b):
                                        c = 1 + c, ((foo_2 && (foo_2.in += 24..toString() * 4)) === ("bar" === -2)) < (-1 - "object" > (NaN > -5));
                                        c = 1 + c, -5 - [] | 0 + ([ , 0 ].length === 2) | (24..toString() ^ -3 && (foo_2 && (foo_2[c = 1 + c, 
                                        (25 > "c") - (23..toString() && "number") !== ("c" & this ^ (-1 | 24..toString()))] = Infinity >> undefined)));
                                        c = 1 + c, (foo_2 = ("foo" ^ NaN) == "bar" / "a") !== (5 == /[a2][^e]+$/ ^ false * "object");
                                        break;
                                    }

                                  case a++ + (typeof f0 == "function" && --_calls_ >= 0 && f0()):
                                    {
                                        var brake14 = 5;
                                        do {
                                            c = 1 + c, 1 / 22 % ("a" ^ [ , 0 ].length === 2) >> (foo_2 && (foo_2.next += (this + []) % (3 || 24..toString())));
                                        } while (a++ + (b = a) && --brake14 > 0);
                                    }
                                    {
                                        var yield_1 = function f0(bar) {
                                        }();
                                    }
                                    break;

                                  case foo_2:
                                    break;
                                }
                            }
                        }
                    } while ((1 === 1 ? a : b) && --brake4 > 0);
                }
                {
                    var expr17 = a++ + (3 in []);
                    for (a in expr17) {
                        c = 1 + c;
                        var a_2 = expr17[a];
                        c = c + 1;
                    }
                }
                if (b + 1 - .1 - .1 - .1) {
                    if (a++ + a) {
                        var a_1 = async function f1() {
                            typeof b == "undefined";
                        }("function", "a", "b");
                    } else {
                        c = c + 1;
                    }
                } else {
                    c = c + 1;
                }
                break L13311;
            }
        }
    }
} catch (NaN_1) {
    {
        var expr27 = ++a;
        for (let key27 in expr27) {
            switch (--a) {
              case a++ + (typeof f2 == "function" && --_calls_ >= 0 && f2(-2)):
                break;

              case --b + (0 === 1 ? a : b):
                {
                    var async_2 = function f2(undefined_1, bar_2) {
                        function f3() {}
                        var bar_2 = f3((c = 1 + c, undefined_1 && (undefined_1[a++ + (key27 && typeof key27.static == "function" && --_calls_ >= 0 && (a++ + "foo", 
                        key27.static)((c = 1 + c, (undefined < 38..toString() | (24..toString() && 5)) != (bar_2 = -4 >>> false || NaN_1 && (NaN_1.foo >>>= "undefined" ^ "c"))), undefined))] = (1 >= 38..toString()) / (23..toString() <= -3) > ("function" == 2) - 0 / -4)), ..."" + bar_2, 24..toString());
                        function f4(b_1) {}
                        var b_1 = f4();
                        function f5(b_2, b_1) {
                            c = 1 + c, (false != 1 ^ null != "b") !== ((38..toString() | -0) == (c = c + 1, 
                            "function"));
                            c = 1 + c, (("a" & false) >> (38..toString() > true)) % ((NaN ^ 23..toString()) & (-3 ^ Infinity));
                            c = 1 + c, (bar_2 && (bar_2[c = 1 + c, b_2 = undefined >> null << (false ^ "bar") === 0 >> false >>> ({} && "function")] = "b" * -3)) - ([ , 0 ].length === 2) % false != 23..toString() << true >> ("object" == Infinity);
                        }
                        var b_2 = f5((c = 1 + c, ("bar" < false ^ "bar" & -3) >= (([] && 38..toString()) <= 2 / -4)));
                    }(Infinity, -5);
                }
                --b + [ "a" ][a++ + (async_2 && typeof async_2.undefined == "function" && --_calls_ >= 0 && ((c = c + 1) + (typeof f5 == "function" && --_calls_ >= 0 && f5(-0)), 
                async_2.undefined)((c = c + 1) + (typeof NaN_1 == "function" && --_calls_ >= 0 && NaN_1()), key27 && typeof key27.static == "function" && --_calls_ >= 0 && key27.static(5)))];
                c = c + 1;

              default:
                c = c + 1;
                {
                    var async_2_1 = function f6(bar, b_1) {}();
                }
                {
                    var Infinity_1 = function f7(arguments, arguments_1 = void (((5 || 4) != (NaN !== null)) - ("" && "bar") / (1 << "bar"))) {
                        {
                            {
                                var brake39 = 5;
                                do {
                                    c = 1 + c, Infinity + {} >>> (undefined < undefined) >= !("function" * 4);
                                } while ((c = 1 + c, ({} >= 23..toString() | "a" !== 5) << ((24..toString() != 3) >>> 5 * [ , 0 ][1])) && --brake39 > 0);
                            }
                        }
                    }(NaN_1, "b");
                }

              case 1 === 1 ? a : b:
                switch (a++ + b++ ? --b + [].async : b >>= a) {
                  case a++ + (typeof f6 == "function" && --_calls_ >= 0 && f6(--b + new function(async_2_1_1) {
                        this.undefined += ((async_2_1_1 = -2 | [ , 0 ].length === 2) & 0 % -5) !== 5 >>> "bar" << (3 == {});
                        {
                            return;
                            c = 1 + c, ("function" != this && -4 < "b") << ("undefined" !== "undefined" != (4 == "b"));
                        }
                    }(), 23..toString())):
                    for (var brake43 = 5; b + 1 - .1 - .1 - .1 && brake43 > 0; --brake43) {
                        var brake44 = 5;
                        while (a++ + (NaN_1 && NaN_1[(c = c + 1) + (b + 1 - .1 - .1 - .1)]) && --brake44 > 0) {
                            if (--b + (b += a)) {
                                var brake46 = 5;
                                while ((c = 1 + c, (NaN_1 = 4 !== Infinity && /[a2][^e]+$/ != 38..toString()) - (1 <= 1) % (3 ^ 1)) && --brake46 > 0) {
                                    c = 1 + c, (([ , 0 ].length === 2) >> 22) * (async_2 += -4 == 38..toString()) || delete "function" <= (-3 != 25);
                                }
                            } else {
                            }
                        }
                    }
                    {
                        var await = function bar_1() {
                            function f8(arguments_2, a_2) {
                            }
                            var b_1 = f8(null, (c = 1 + c, (NaN_1 && (NaN_1.in = "function" * -2)) === (-0 && "") & (24..toString() | -2) - (5 && undefined)), /[a2][^e]+$/);
                            function f9(NaN_2) {
                            }
                            var a_2 = f9("foo", "function");
                            function f10(Infinity_1_1, bar, let_1) {
                            }
                            var b_1 = f10();
                        }(-4);
                    }
                    {
                        var brake50 = 5;
                        L13313: while ((Infinity_1 && (Infinity_1[b + 1 - .1 - .1 - .1] += -0 >>> "function" | [] == false)) >= 5 / -0 + (22 - "b") && --brake50 > 0) {}
                    }
                    break;

                  case --b + (typeof undefined_2 != "crap"):
                    switch (void function arguments() {
                        c = 1 + c, ((c = c + 1, [ , 0 ].length === 2) === -4 << 23..toString()) * ([ , 0 ][1] - -3 - {} * 3);
                        {
                        }
                    }()) {
                      case a++ + -0 ? --b + NaN_1 : !function() {
                            c = 1 + c, (3 << 38..toString() > (await && (await[c = 1 + c, 
                            (true || "c") & (c = c + 1, []) & (c = c + 1, -3 < 1)] |= "a" | 1))) << ("object" >>> false) * (true === "a");
                        }():
                        {
                            var brake57 = 5;
                            while (typeof f8 == "function" && --_calls_ >= 0 && f8`${c = 1 + c, 
                            4 / -0 & "bar" !== "" ^ ("bar" === Infinity) <= 0 >> -2}` && --brake57 > 0) {
                                var brake58 = 5;
                                L13314: while ((c = 1 + c, 25 < "function" !== (NaN_1 && (NaN_1.get >>= "object" >= this)) != 22 * "object" % (Infinity_1 && (Infinity_1.c = [ , 0 ][1] - "foo"))) && --brake58 > 0) {
                                    c = 1 + c, await && (await.undefined += (NaN_1 -= (-1 >> []) - (false > [])) && (c = c + 1, 
                                    -1) == (c = c + 1, Infinity));
                                }
                            }
                        }
                        break;

                      case (c = c + 1) + (0 === 1 ? a : b):
                        break;

                      case 3:
                        {
                            var brake60 = 5;
                            L13315: while (([ , 0 ][1] >> 24..toString()) / (2 >>> 22) * ("number" >> 38..toString() < "foo" % Infinity) && --brake60 > 0) {
                                try {
                                    c = 1 + c, 0 / "a" & (c = c + 1, []), this <= undefined || "bar" != "foo";
                                } finally {
                                }
                            }
                        }
                        {
                            var expr63 = function a_1() {
                            };
                            L13316: for (var [ key63 ] in expr63) {
                                c = 1 + c;
                                var key27_2 = expr63[key63];
                                for (var brake64 = 5; (c = 1 + c, ("b" <= -4) % ("a" ^ 22) % (Infinity_1 && ([ Infinity_1.foo ] = [ (NaN | []) / (0, 
                                []) ]))) && brake64 > 0; --brake64) {
                                    c = 1 + c, 2 << 22 << 25 * -0 == -3 / [] - ([ , 0 ][1] - [ , 0 ][1]);
                                }
                            }
                        }
                        break;

                      case --b + ((0 === 1 ? a : b) || a || 3).toString():
                        switch (--b + {
                            1.5: (c = 1 + c, ((Infinity_1 && (Infinity_1.c += 25 + 2)) | ("object" && 38..toString())) == [ , 0 ][1] < "bar" > (/[a2][^e]+$/ === -5))
                        }.get) {
                          case -1 << null >>> ([ , 0 ][1] == undefined) ^ ([ , 0 ][1] !== "number" || /[a2][^e]+$/ >>> 24..toString()):
                            c = 1 + c, ("bar" ^ "") - (23..toString() > 22) && (NaN_1 && (NaN_1[(c = c + 1) + "number"] += (c = c + 1, 
                            []) !== (async_2 >>= 4 ^ "foo")));
                            break;

                          case a++ + a++:
                            c = 1 + c, async_2_1 && (async_2_1[{
                                then: (c = 1 + c, !(([ , 0 ].length === 2 === "b") * (undefined % ([ , 0 ].length === 2)))),
                                in: (c = 1 + c, !(({} == "foo") < ("c" ^ "")))
                            }.Infinity] -= ((-3 & "object") <= (/[a2][^e]+$/ && 5)) + ([ , 0 ][1] >> -2 ^ (false || 23..toString())));
                            break;

                          case a++ + (0 === 1 ? a : b):
                            c = 1 + c, delete (5 ^ 0) >= ("undefined" <= -0) - NaN * ([ , 0 ].length === 2);
                            c = 1 + c, -2 - this ^ (2 ^ [ , 0 ].length === 2), -0 >> "number" >>> (null >>> "number");
                            break;

                          case (c = c + 1) + Infinity:
                            c = 1 + c, (null, "") / ("a" || "foo") >> (25 < Infinity >= ("c" || "foo"));
                            break;
                        }
                        break;
                    }
                    for (var brake72 = 5; NaN_1 && typeof NaN_1.Infinity == "function" && --_calls_ >= 0 && NaN_1.Infinity`\\${c = 1 + c, 
                    ("number" && null) << (async_2_1 && (async_2_1.a = this == -4)) | ((Infinity_1 = 4 - "") && "b" < 0)}` && brake72 > 0; --brake72) {
                        var expr73 = a++ + {};
                        for (var key73 in expr73) {
                            try {
                                for (var brake75 = 5; (c = 1 + c, Infinity_1 <<= (23..toString() - 1 & 3 <= false) + (null >= "c" > ([ , 0 ].length === 2) >>> undefined)) && brake75 > 0; --brake75) {
                                    c = 1 + c, (await += (c = c + 1, 22) ^ ([ , 0 ].length === 2) / null) ^ [] - 38..toString() !== (3 | "bar");
                                }
                            } catch (a_2) {
                                c = 1 + c, (23..toString() << ([ , 0 ].length === 2) != [ , 0 ][1] >>> "") / (key73 && (key73[((c = 1 + c, 
                                (undefined << Infinity, [ , 0 ][1] >>> false) % ((25 ^ "foo") < (23..toString() >= "b"))) || a || 3).toString()] ^= (-5 || "function") + (-2 !== /[a2][^e]+$/)));
                                c = 1 + c, async_2 >>= Infinity / "" / ("undefined" - -1) / (/[a2][^e]+$/ / -3 <= (-1 | 25));
                                c = 1 + c, (key73 && (key73.null = -4 >= 3)) < (Infinity ^ "undefined") || [] >= -0 | "undefined" === "undefined";
                            } finally {
                                c = 1 + c, (this ^ "bar") * (null >> ([ , 0 ].length === 2)), 
                                (async_2 = "c" === 22) >= 25 - -3;
                            }
                        }
                    }
                    L13317: for (var brake81 = 5; --b + (b = a) && brake81 > 0; --brake81) {
                        ({
                            done: (c = 1 + c, (async_2 && ({
                                undefined: async_2.c
                            } = {
                                undefined: 2 * Infinity
                            })) | (Infinity_1 *= 0 | undefined), (-4 | 5) / (key27 && ({
                                "-2": key27[c = 1 + c, (23..toString() && /[a2][^e]+$/) < 1 << "foo" !== (key27 && (key27.c = 22 == "bar" | 38..toString() >> 38..toString()))]
                            } = {
                                "-2": 24..toString() / "undefined"
                            }))),
                            [(c = 1 + c, (async_2_1 && (async_2_1[(c = c + 1) + [ (c = 1 + c, 
                            "number" * this << (5 >= "a") <= (key27 && (key27.Infinity += 3 >>> 5 | (Infinity_1 ^= undefined < [ , 0 ][1])))), (c = 1 + c, 
                            c = c + 1, {} + Infinity - ([ , 0 ].length === 2 && this)) ]] >>>= ([] && 0) + (this | null))) + (NaN_1 += ("object" & 4) === -5 % 5))]: (c = 1 + c, 
                            3 & undefined ^ (async_2 && (async_2[c = 1 + c, (undefined ^ Infinity | ("function" || "a")) <= (-3 !== [] !== false <= NaN)] = -0 || {})) && -1 <= "undefined" | (c = c + 1, 
                            38..toString())),
                            "": (c = 1 + c, ((null === "b") << (Infinity | "")) * (23..toString() % NaN || +38..toString())),
                            static: (c = 1 + c, ~((24..toString() & "number") === "c" * ""))
                        });
                    }
                    break;

                  case b >>>= a:
                    try {
                        {
                            var b_2 = function async_1(async_2_1_2, NaN_1, {
                                foo: await_2 = 1,
                                "\t": []
                            }) {
                                c = 1 + c, (-5 - NaN == -2) <= (("object" || undefined) > (false <= []));
                            }([ , 0 ].length === 2, !(("c" + "function") / ("function" & "c") ^ ((async_2 = "b" - 23..toString()) && [ , 0 ].length === 2 | false)), {
                                "\t": "",
                                "-2": "c",
                                length: (c = 1 + c, (25 & "object" ^ 3 >>> 38..toString()) >> ((24..toString() & "foo") < ("a" == -0)))
                            });
                        }
                    } catch (a) {
                        {
                            var let_1 = function f11(NaN_1, async_2, async_2_2) {
                            }((c = 1 + c, -3 ^ undefined ^ 0 >> 4 ^ (this > "function" ^ true <= 5)));
                        }
                        {
                            var brake87 = 5;
                            L13318: do {
                                c = c + 1;
                            } while (async_2_1 && typeof async_2_1.next == "function" && --_calls_ >= 0 && async_2_1.next((c = 1 + c, 
                            (24..toString() >= 1 ^ (async_2 && (async_2[c = 1 + c, 
                            (1 !== NaN) / (this >= -2), undefined + "function" | (23..toString(), 
                            false)] <<= -0 | undefined))) % ((-1 != -2) >> ([ , 0 ][1] <= {}))), -1, (c = 1 + c, 
                            (-2 | this) - ("a" ^ "bar") || key27 && ({
                                next: key27[a++ + +(async_2 = ("bar" >= 24..toString() < "c" / -3) << ((b_2 && (b_2[c = 1 + c, 
                                delete 4 * (undefined < null) % (22 >= 25 && null - "function")] = -4 || /[a2][^e]+$/)) ^ 23..toString() * 2))]
                            } = {
                                next: ("a" >> "function") + (NaN_1 /= "b" ^ [ , 0 ].length === 2)
                            }))) && --brake87 > 0);
                        }
                    }
                    switch (38..toString() in {
                        in: a--,
                        "": await && typeof await.async == "function" && --_calls_ >= 0 && (c = 1 + c, 
                        c = c + 1, (-2 ^ -5) & 23..toString() !== this, await.async)(..."" + async_2_1)
                    }) {
                      case key27 && key27.value:
                        break;

                      case -(!"object" >>> (/[a2][^e]+$/ === /[a2][^e]+$/) !== +(async_2 && (async_2[c = 1 + c, 
                        await += ((-0 | []) == (-0 ^ [])) >> ([ , 0 ].length === 2, 
                        -5) + (false + null)] += "b" ^ ""))):
                        break;

                      case (c = c + 1) + (b_2 && typeof b_2.in == "function" && --_calls_ >= 0 && b_2.in(0, Infinity)):
                        b + 1 - .1 - .1 - .1;
                        break;

                      default:
                        {
                            var brake91 = 5;
                            L13319: do {
                            } while (~((3 >> {} & (async_2 && (async_2.then -= "" >> 3))) << (1 + [ , 0 ][1], 
                            3 < undefined)) && --brake91 > 0);
                        }
                        try {
                            for (var brake94 = 5; (c = 1 + c, (-2 << 23..toString() && {} == []) >>> (-4 == this ^ (NaN || null))) && brake94 > 0; --brake94) {
                                c = 1 + c, (-2 + this) % (1 << 2) % (("bar" && 38..toString()) % ("a" ^ NaN));
                            }
                        } finally {}
                        {
                            var brake96 = 5;
                            L13320: while (--b + --a && --brake96 > 0) {
                                var expr97 = [ (c = 1 + c, (b_2 = (c = c + 1, "") >> ({} != 2)) === (-2 ^ "c" | (c = c + 1, 
                                "b"))), ,  ];
                                for (const key97 of expr97) {
                                    c = 1 + c;
                                    var async = expr97[key97];
                                    c = 1 + c, delete ("foo" << {}) != ((22, 1) === 3 << 24..toString());
                                }
                            }
                        }
                    }
                    break;

                  case --b + --b:
                    break;
                }
                break;
            }
        }
    }
    {
        var brake99 = 5;
        do {
            {
                var expr100 = /[abc4]/g.exec((typeof (NaN_1 && typeof NaN_1.c == "function" && --_calls_ >= 0 && NaN_1.c(...[], a++ + /[abc4]/g.exec(((c = c + 1) + (("a" & -3) < (c = c + 1, 
                -1), 24..toString() + [ , 0 ][1] >= ("number" & 38..toString())) || b || 5).toString()))) || b || 5).toString());
                L13321: for (var key100 in expr100) {
                    try {
                        for (var brake102 = 5; --b + void function() {
                            {
                                var brake103 = 5;
                                L13322: while (delete b && --brake103 > 0) {
                                    if (typeof NaN_1 == "function" && --_calls_ >= 0 && NaN_1()) {
                                        c = 1 + c, (("b" >= "function") >>> (23..toString() <= "b")) * (NaN_1 && (NaN_1[(c = c + 1) + {
                                            3: (c = 1 + c, ("" > "object") / ("number" > "foo") == ("object" < "a" === "" <= "bar")),
                                            set 3(NaN) {
                                                this.Infinity += -4 - Infinity;
                                            },
                                            c: (c = 1 + c, key100 = (!"foo" != ({} || "function")) >> !(22 >>> [])),
                                            1.5: (c = 1 + c, ("c" !== [ , 0 ][1]) - (4 === 5) > (this >>> null == -2 >= "function")),
                                            value: (c = 1 + c, ((key100 && (key100.a += 3 === -3)) | (key100 && (key100[c = 1 + c, 
                                            ~({} >> 0 ^ ({} ^ "b"))] >>>= this >>> 5))) == (delete null != (NaN_1 |= -1 <= "object")))
                                        }] = -1 - "undefined" !== void Infinity));
                                    } else {
                                        c = c + 1;
                                    }
                                }
                            }
                            {
                                var b_2 = function f12(bar_2_1, bar, bar_2) {
                                    c = 1 + c, bar_2 && (bar_2[--b + void a] += (c = c + 1, 
                                    "number", "a") - (([ , 0 ].length === 2 && []) !== 2 < -0));
                                    c = 1 + c, "foo" % "" < ([] === "bar") ^ [] == 3 !== (bar = "b" * -1);
                                }();
                            }
                            {
                                var expr111 = typeof b_2 == "function" && --_calls_ >= 0 && b_2();
                                for (const [ key111 ] in expr111) {
                                    c = 1 + c;
                                    const bar_2 = expr111[key111];
                                    for (var brake112 = 5; -0 && brake112 > 0; --brake112) {
                                        var b_2 = (c = 1 + c, -((22 || []) + ("c" << "c")));
                                    }
                                }
                            }
                            var b;
                        }() && brake102 > 0; --brake102) {
                            for (var brake115 = 5; key100 && typeof key100.var == "function" && --_calls_ >= 0 && key100.var(22) && brake115 > 0; --brake115) {
                                a++ + {
                                    set: (c = c + 1) + (1 === 1 ? a : b),
                                    Infinity: --b + -0,
                                    NaN_1: NaN_1
                                };
                            }
                        }
                    } finally {
                        {
                            var expr117 = a++;
                            for (var key117 in expr117) {
                                switch ((c = c + 1) + -b) {
                                  case key100:
                                    try {
                                        switch (c = 1 + c, ((key100 = "object" ^ 5) >> ("" != "number")) + ("function" - 0 > (c = c + 1, 
                                        NaN))) {
                                          case c = 1 + c, ("c" || null) / ("function" <= "foo") & (key117 && (key117[c = 1 + c, 
                                            ("c" >>> "number" ^ "a" * 22) !== ((24..toString() ^ null) === (22 && false))] = [] / "function")) <= (0 || [ , 0 ][1]):
                                            ;
                                            break;

                                          case c = 1 + c, (key117 && (key117[1 === 1 ? a : b] += "c" << "c" || "number" !== "c")) - ((key117 && (key117.value ^= "a" & {})) - (c = c + 1, 
                                            24..toString())):
                                            ;
                                            break;

                                          case c = 1 + c, {} / 25 ^ ([ , 0 ][1] || -1) ^ 22 - true >= 24..toString() * -5:
                                            ;
                                            break;

                                          case c = 1 + c, (4 >= "object" === (22 === "bar")) >> (("" == "bar") < "a" * 38..toString()):
                                            ;
                                            break;
                                        }
                                    } catch (yield) {
                                        c = 1 + c, (false * [ , 0 ][1] && +true) == (yield && ([ yield[a++ + ++a] ] = [ (-5 / "object", 
                                        "object" == /[a2][^e]+$/) ]));
                                    }
                                    --b + --b;
                                    break;

                                  case a++ + ((key100 && (key100.next += (c = c + 1, 
                                    "b") === 4 << 0)) | (key117 && (key117.next -= "bar" === 38..toString())) <= (-4 & 5) ? (c = c + 1) + new function c_1(foo_1, a) {
                                        this[c = 1 + c, (1 >>> ([ , 0 ].length === 2) << (c = c + 1, 
                                        38..toString())) % (3 * null <= ("foo" ^ false))] = {} || 3;
                                        this.in >>>= this >> "number";
                                    }(true) : typeof NaN_1 == "function" && --_calls_ >= 0 && NaN_1(5, -0)):
                                    {
                                        var expr123 = (c = c + 1) + !function() {
                                        }();
                                        for (var key123 in expr123) {
                                            switch (c = 1 + c, (undefined >> "bar", 
                                            -4 | this) % (38..toString() !== 2 != (-0 | NaN))) {
                                              default:
                                                ;

                                              case c = 1 + c, NaN_1 = ((c = c + 1, 
                                                [ , 0 ].length === 2) != (NaN_1 && (NaN_1.static = 2 <= 24..toString()))) >>> (([ , 0 ][1] ^ 5) << ("bar" ^ "number")):
                                                ;
                                                break;

                                              case c = 1 + c, (key123 && (key123[[].null] &= (-0 & this) >>> ("undefined" | 3))) & (undefined & 25) <= ("foo" ^ -3):
                                                ;

                                              case c = 1 + c, +(c = c + 1, "object") || ("" != false || (c = c + 1, 
                                                "foo")):
                                                ;
                                                break;
                                            }
                                        }
                                    }
                                    switch (+(key100 && (key100.Infinity %= void ("bar" !== 3) - ((NaN_1 && (NaN_1[c = 1 + c, 
                                    (Infinity === 1) - ([ , 0 ][1] || "bar") | (key117 += 22 ^ 23..toString(), 
                                    "bar" * -1)] += "c" * 38..toString())) + ~1)))) {
                                      default:
                                        c = 1 + c, (key117 && (key117[c = 1 + c, 
                                        ("b" / 2 && true < -2) / ("function" + "a" ^ "a" % "undefined")] = NaN >>> "foo")) << (3 > 3) >>> (("object" || true) < this % []);
                                        c = 1 + c, (38..toString() > 25 ^ 0 >= 2) !== (-2 % 22 ^ (NaN_1 && (NaN_1[c = 1 + c, 
                                        38..toString() & 4 & [] * "undefined" & (-0 ^ undefined && "bar" >= -3)] = 3 << 2)));

                                      case (c = 1 + c, (false == 23..toString()) < (Infinity || 5) <= ((-1 || -4) === (c = c + 1, 
                                        true))) ? (c = 1 + c, ((key117 && (key117[c = 1 + c, 
                                        ("b" >>> -1 ^ NaN % this) / (key117 = -0 + NaN > ("object" == this))] <<= null / 1)) ^ (-0 | 4)) != ((NaN_1 = -2 !== -4) || Infinity > 25)) : (c = 1 + c, 
                                        (key117 += ([ , 0 ].length === 2 ^ -2) + ("number" === true)) | + -4 <= -1 - 4):
                                        c = 1 + c, ((38..toString() ^ -5) <= !24..toString()) / ((key100 && ({
                                            length: key100.a
                                        } = {
                                            length: [] != {}
                                        })) < 5 - "function");
                                        c = 1 + c, (22 === Infinity || [ , 0 ][1] == false) | (c = c + 1, 
                                        NaN_1 = undefined >>> 3);
                                        break;

                                      case --b + ~((key100 >>>= "c" * true >= ([] > -0)) ^ -3 == "undefined" === (3 ^ /[a2][^e]+$/)):
                                        c = 1 + c, (Infinity && 1) & null >> {} | (key117 && (key117[a++ + (key117 && key117.set)] = "foo" - 1 != 2 < "number"));
                                        c = 1 + c, ((Infinity & NaN) === (23..toString() ^ "b")) >>> ((1 || null) === (-5 | [ , 0 ][1]));
                                        c = 1 + c, (4 > false && ~[ , 0 ][1]) < (c = c + 1, 
                                        null) - (-2 ^ 23..toString());
                                        break;

                                      case {}:
                                        break;
                                    }
                                    for (var brake133 = 5; ~(("" << 3) + (0 << "function") === (2 / "a" != "b" << 24..toString())) && brake133 > 0; --brake133) {
                                        var brake134 = 5;
                                        do {
                                            c = 1 + c, NaN_1 && (NaN_1.undefined = "foo" < 0 !== -38..toString() == ((key117 &= "bar" >= this) !== (null !== -2)));
                                        } while ((c = 1 + c, NaN_1 && (NaN_1[a++ + (void function let_1() {
                                        }() || 5).toString()[a++ + ([ , 0 ][1] in [ (c = 1 + c, 
                                        "object" >= null || [] ^ "" || ("object" || {}) / (NaN != true)) ])]] += (24..toString() + /[a2][^e]+$/ || "bar" - 24..toString()) >> ((false != null) >> (c = c + 1, 
                                        24..toString())))) && --brake134 > 0);
                                    }
                                    break;

                                  case ("c" + "c" != /[a2][^e]+$/ + ([ , 0 ].length === 2)) % ((1 ^ -0) >= -5 >>> false):
                                    c = c + 1;
                                    break;

                                  case b -= a:
                                    c = c + 1;
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        } while ([ --b + (a++ + --b || a || 3).toString(), --b + NaN_1, --b + {
            async: --b + typeof 22
        }.var ][a++ + +~(("object" || 5) < (-3 <= ([ , 0 ].length === 2)))] && --brake99 > 0);
    }
    if (--b + (b = a)) {
        var expr139 = /[abc4]/g.exec(((b %= a) || b || 5).toString());
        for (var key139 in expr139) {
            c = 1 + c;
            var NaN_1 = expr139[key139];
            {
                var expr140 = --b + (key139 && typeof key139.var == "function" && --_calls_ >= 0 && key139.var());
                for (var [ key140 ] in expr140) {
                    c = 1 + c;
                    var foo = expr140[key140];
                    {
                        var Infinity = function f13(c_2, NaN_1_2) {
                            {
                                var brake142 = 5;
                                while (a++ + (key139 && key139[--b + (typeof f6 == "function" && --_calls_ >= 0 && f6(22, (c = 1 + c, 
                                NaN_1 && (NaN_1[(c = c + 1) + (NaN_1_2 += ("object" ^ -2 && (NaN_1 = "c" - /[a2][^e]+$/)) != (24..toString() % this !== (c_2 && (c_2.get = "undefined" || "function"))))] = (NaN_1 && (NaN_1.async &= null != 38..toString())) % (([ , 0 ].length === 2) > "c") * (c = c + 1, 
                                25 && [ , 0 ].length === 2)))))]) && --brake142 > 0) {
                                    var c_1 = function f14() {
                                    }((c = 1 + c, ((25 > 24..toString()) << ("" >>> 22)) + (-4 / Infinity > (24..toString() >= /[a2][^e]+$/))));
                                }
                            }
                            L13323: for (var brake144 = 5; (c = c + 1) + ((NaN && 24..toString()) === (/[a2][^e]+$/ ^ 22) || "undefined" + 2 ^ "bar" >>> 4) && brake144 > 0; --brake144) {
                                var expr145 = typeof NaN_1 == "undefined";
                                for (var key145 in expr145) {
                                    c = 1 + c;
                                    var NaN_2 = expr145[key145];
                                    switch (c = 1 + c, NaN_1 = ("b" === 24..toString()) - (-2 >= 5) <= (-3 - "b") * (c_2 && (c_2.then %= -3 >> 24..toString()))) {
                                      case c = 1 + c, c = c + 1, (NaN_1 = -0 ^ "bar") >= (22 || []):
                                        ;
                                        break;

                                      case c = 1 + c, (this <= 2) >>> ("b" ^ Infinity) && (-3 ^ "") > (NaN || "object"):
                                        ;
                                        break;

                                      default:
                                        ;

                                      case c = 1 + c, (-4 / undefined != (-1 != 23..toString())) >= (4 << {} && ("bar" && undefined)):
                                        ;
                                        break;
                                    }
                                }
                            }
                            {
                                var brake147 = 5;
                                do {
                                    {
                                        var expr148 = [ (c = 1 + c, (3 ^ "function") + ("undefined" >= NaN) && -2 + 25 === (c_2 && ({
                                            a: c_2[c = 1 + c, key139 && (key139.undefined += (NaN_1 = /[a2][^e]+$/ && -3) === (1 == -2) && (-2 | -1) >>> ("undefined" && "a"))]
                                        } = {
                                            a: Infinity >>> {}
                                        }))) ];
                                        L13324: for (var key148 in expr148) {
                                        }
                                    }
                                } while (a++ + (("number" || NaN) / ("object" + 22) << "a" * "foo" - 4 % -0) && --brake147 > 0);
                            }
                        }(...[ b + 1 - .1 - .1 - .1, (!function() {
                        }() || a || 3).toString(), "bar", ++a, [ (c = 1 + c, Infinity && (Infinity.a = (key140 && ({
                            "-2": key140[a++ + ++a]
                        } = {
                            "-2": -2 << NaN << false * undefined
                        })) / (+"b" ^ (3 ^ -1)))) ][typeof Infinity == "function" && --_calls_ >= 0 && Infinity((c = 1 + c, 
                        NaN_1 && (NaN_1[/[abc4]/g.exec(((c = 1 + c, ("undefined" % 23..toString() | -4 !== null) - ((23..toString() !== "number") > ("bar" === -5))) || b || 5).toString())] = 1 >> "number" !== "number" >> -0) && (5 !== "b" || (NaN_1 += -5 < true))))] ]);
                    }
                }
            }
        }
    } else {
        {
            var brake151 = 5;
            do {
                {
                    var expr152 = (c = c + 1) + [ [ , 0 ][1] ].set;
                    L13325: for (var key152 in expr152) {
                        c = 1 + c;
                        var yield = expr152[key152];
                        try {
                            var arguments = a++ + {
                                async: (c = 1 + c, (c = c + 1, "bar") >>> ("b" ^ 5) !== "undefined" << 38..toString() << [ , 0 ][1] * NaN),
                                ...yield,
                                "-2": (c = 1 + c, {} + -4 != (-4 | ""), NaN_1 && ([ NaN_1.foo ] = [ 0 !== [ , 0 ][1] == (c = c + 1, 
                                -5) ])),
                                get: (c = 1 + c, (key152 && (key152[c = 1 + c, 38..toString() / true << -4 % "undefined" <= (arguments && (arguments.foo -= (25 && "b") < ([] & null)))] = 23..toString() / 24..toString())) / (1 <= true) / ((yield >>>= 0 && -0) === (false, 
                                "bar"))),
                                NaN: (c = 1 + c, ("bar" == "a") / ("b" ^ "number") <= +("a" >= 4))
                            }.undefined;
                        } catch (arguments_2) {
                            {
                                var Infinity_1 = function f15() {
                                }`${c = 1 + c, ("c" >> 5 ^ -5 == "b") << (undefined >>> 0 >= ("b" | null))}`;
                            }
                            {
                                var brake156 = 5;
                                do {
                                } while (new function() {
                                    this.value |= ("function", "bar");
                                    this.var = -2 || "bar";
                                }([ , 0 ][1], 38..toString(), null) && --brake156 > 0);
                            }
                            a++ + (Infinity in {
                                done: (c = 1 + c, (this == 22) << ("number" >> 2) > (("undefined" & true) >= (24..toString() != 5))),
                                get: (c = 1 + c, (-5 < "object" | "undefined" & Infinity) >= ("bar" !== "object" != NaN <= undefined)),
                                value: (c = 1 + c, (3 >>> /[a2][^e]+$/, "number" == /[a2][^e]+$/) ^ !(null <= [ , 0 ][1]))
                            });
                        }
                    }
                }
            } while ((c = c + 1) + "bar" && --brake151 > 0);
        }
    }
} finally {
}

console.log(null, a, b, c, Infinity, NaN, undefined);
```



Discussion / hints:
```js
// uglified code
// (beautified)
var _calls_ = 10, a = 100, b = 10, c = 0;

try {
    for (var brake2 = 5; a++ && 0 < --brake2; ) {
        var brake4 = 5;
        do {
            for (var brake5 = 5; a && 0 < brake5; --brake5) {
                var expr6 = /[abc4]/.test(([].null || b || 5).toString());
                for (a in expr6) {
                    var c = 1 + c, foo_2 = expr6[a];
                    switch (a++ + ("function" == typeof f1 && 0 <= --_calls_ && f1({
                        __proto__: (c = 1 + c, ({} === []) >> ("bar" < (2 === [ , 0 ].length)) != -6 || {})
                    }.a, Infinity))) {
                      case 0 ^ ("function" === 38..toString() || this - 2):
                        break;

                      case -(foo_2 && (foo_2["function" != typeof b] /= (c += 1, 
                        foo_2 && (foo_2[c = 1 + c, foo_2 += (foo_2 += -5) ^ 1 === [] === "c" % []] += 4)) < -3)):
                        switch (--b + /[abc4]/.test((c = 1 + c, (!0 / (foo_2 *= (2 === [ , 0 ].length) % !1) + (1 == 23..toString() || !1) || b || 5).toString()))) {
                          case [ (c = 1 + c, 23..toString(), foo_2 = !1, 0), , (c = 1 + c, 
                            -("bar" ^ 23..toString()) >>> (foo_2 += -3 <= 1 >> 38..toString())) ].c:
                            c = 1 + c, 24..toString();
                            break;

                          case foo_2 && "function" == typeof foo_2.null && 0 <= --_calls_ && foo_2.null(5):
                            break;

                          case (c += 1) + a++:
                            c = 1 + c;
                            break;

                          case a++ + a:
                            c = 1 + c, foo_2 && (foo_2.in += 4 * 24..toString()), 
                            c = 1 + c, -3 ^ 24..toString() && foo_2 && (foo_2[c = 1 + c, 
                            !1 - (23..toString() && "number") != ("c" & this ^ (-1 | 24..toString()))] = Infinity >> void 0), 
                            c = 1 + c, foo_2 = !1;
                        }

                      case a++ + ("function" == typeof f0 && 0 <= --_calls_ && f0()):
                        for (var brake14 = 5; c = 1 + c, foo_2 && (foo_2.next += (this + []) % 3), 
                        a++ + (b = a) && 0 < --brake14; ) {}
                        var yield_1 = void 0;
                    }
                }
            }
        } while (a && 0 < --brake4);
        var a_1, expr17 = a++ + (3 in []);
        for (a in expr17) {
            c = 1 + c;
            var a_2 = expr17[a];
            c += 1;
        }
        b + 1 - .1 - .1 - .1 && a++ + a ? a_1 = async function() {}() : c += 1;
        break;
    }
} catch (NaN_1) {
    var brake60, key27_2, brake64, expr63, key63, expr27 = ++a;
    for (let key27 in expr27) {
        switch (--a) {
          case a++ + ("function" == typeof f2 && 0 <= --_calls_ && f2(-2)):
            break;

          case --b + b:
            var async_2 = function(undefined_1, bar_2) {
                bar_2 = void (c = 1 + c, undefined_1 && (undefined_1[a++ + (key27 && "function" == typeof key27.static && 0 <= --_calls_ && (a++, 
                key27.static)((c = 1 + c, (void 0 < 38..toString() | (24..toString() && 5)) != (bar_2 = -4 >>> !1)), void 0))] = 0 < (38..toString() <= 1) / (23..toString() <= -3)), 
                24..toString());
                c = 1 + c, 38..toString(), c = 1 + c, 38..toString(), c = 1 + (c += 1), 
                38..toString(), 23..toString(), c = 1 + c, bar_2 && (bar_2[c = 1 + c, 
                !0] = NaN), 23..toString();
            }(Infinity, -5);
            --b, a++, async_2 && "function" == typeof async_2.undefined && 0 <= --_calls_ && (c += 1, 
            "function" == typeof f5 && 0 <= --_calls_ && f5(-0), async_2.undefined)((c += 1) + ("function" == typeof NaN_1 && 0 <= --_calls_ && NaN_1()), key27 && "function" == typeof key27.static && 0 <= --_calls_ && key27.static(5)), 
            c += 1;

          default:
            c += 1;
            var async_2_1 = void 0, Infinity_1 = function() {
                for (var brake39 = 5; c = 1 + (c = 1 + c), ({} >= 23..toString() | !0) << ((3 != 24..toString()) >>> 0) && 0 < --brake39; ) {}
            }();

          case a:
            switch (a++ + b++ ? --b + [].async : b >>= a) {
              case a++ + ("function" == typeof f6 && 0 <= --_calls_ && f6(--b + new function(async_2_1_1) {
                    this.undefined += (0 & (-2 | 2 === [ , 0 ].length)) != 5 << (3 == {});
                }(), 23..toString())):
                for (var brake43 = 5; b + 1 - .1 - .1 - .1 && 0 < brake43; --brake43) {
                    for (var brake44 = 5; a++ + (NaN_1 && NaN_1[(c += 1) + (b + 1 - .1 - .1 - .1)]) && 0 < --brake44; ) {
                        if (--b + (b += a)) {
                            for (var brake46 = 5; c = 1 + c, (NaN_1 = 4 !== Infinity && /[a2][^e]+$/ != 38..toString()) - 1 && 0 < --brake46; ) {
                                c = 1 + c, async_2 += -4 == 38..toString();
                            }
                        }
                    }
                }
                c = 1 + c, NaN_1 && (NaN_1.in = NaN);
                for (var await = void 24..toString(), brake50 = 5; NaN <= (Infinity_1 && (Infinity_1[b + 1 - .1 - .1 - .1] += 0 | 0 == [])) && 0 < --brake50; ) {}
                break;

              case --b + ("crap" != typeof undefined_2):
                switch (void function() {
                    c = 1 + c, c += 1, 23..toString();
                }()) {
                  case a++ ? --b + NaN_1 : (c = 1 + c, 38..toString(), !void (await && (await[!0 & [] & (c = (c = 1 + c) + 1 + 1, 
                    !0)] |= 1))):
                    for (var brake57 = 5; "function" == typeof f8 && 0 <= --_calls_ && f8`${c = 1 + c, 
                    0 ^ ("bar" === Infinity) <= 0}` && 0 < --brake57; ) {
                        for (var brake58 = 5; c = 1 + c, !1 !== (NaN_1 && (NaN_1.get >>= this <= "object")) != NaN % (Infinity_1 && (Infinity_1.c = NaN)) && 0 < --brake58; ) {
                            c = 1 + c, await && (await.undefined += (NaN_1 -= (-1 >> []) - ([] < !1)) && -1 == (c = c + 1 + 1, 
                            Infinity));
                        }
                    }
                    break;

                  case (c += 1) + b:
                    break;

                  case --b + (b || a || 3).toString():
                    switch (--b + {
                        1.5: (c = 1 + c, 0 == ((Infinity_1 && (Infinity_1.c += 27)) | 38..toString()))
                    }.get) {
                      case -2:
                        c = 1 + c, 0 - (22 < 23..toString()) && NaN_1 && (NaN_1[(c += 1) + "number"] += (c += 1, 
                        [] !== (async_2 >>= 4)));
                        break;

                      case a++ + a++:
                        c = 1 + c, async_2_1 && (async_2_1[{
                            then: (c = 1 + c, !(void 0 % (2 === [ , 0 ].length) * (2 === [ , 0 ].length === "b"))),
                            in: (c = 1 + c, !(("foo" == {}) < 0))
                        }.Infinity] -= !0 + (0 ^ 23..toString()));
                        break;

                      case a++ + b:
                        c = 1 + (c = 1 + c);
                        break;

                      case (c += 1) + Infinity:
                        c = 1 + c;
                    }
                }
                for (var brake72 = 5; NaN_1 && "function" == typeof NaN_1.Infinity && 0 <= --_calls_ && NaN_1.Infinity`\\${c = 1 + c, 
                null << (async_2_1 && (async_2_1.a = -4 == this)) | (Infinity_1 = 4, 
                !1)}` && 0 < brake72; --brake72) {
                    var key73, expr73 = a++ + {};
                    for (key73 in expr73) {
                        try {
                            for (var brake75 = 5; c = 1 + c, (Infinity_1 <<= (23..toString() - 1 & !1) + ((2 === [ , 0 ].length) >>> void 0 < !1)) && 0 < brake75; --brake75) {
                                c = 1 + c, await += (c += 1, 22 ^ (2 === [ , 0 ].length) / null), 
                                38..toString();
                            }
                        } catch (a_2) {
                            c = 1 + c, 23..toString(), key73 && (key73[c = 1 + c, 
                            (0 % (25 < ("b" <= 23..toString())) || a || 3).toString()] ^= -4), 
                            async_2 >>= Infinity / "" / NaN / !1, c = 1 + (c = 1 + c), 
                            key73 && (key73.null = !1);
                        } finally {
                            c = 1 + c, async_2 = !1;
                        }
                    }
                }
                for (var brake81 = 5; --b + (b = a) && 0 < brake81; --brake81) {
                    c = 1 + c, async_2 && ({
                        undefined: async_2.c
                    } = {
                        undefined: 2 * Infinity
                    }), Infinity_1 *= 0, key27 && ({
                        "-2": key27[c = 1 + c, (23..toString() && /[a2][^e]+$/) < 1 !== (key27 && (key27.c = !1 | 38..toString() >> 38..toString()))]
                    } = {
                        "-2": 24..toString() / "undefined"
                    }), c = 1 + c, async_2_1 && (async_2_1[(c += 1) + [ (c = 1 + c, 
                    "number" * this << !1 <= (key27 && (key27.Infinity += 0 | (Infinity_1 ^= !1)))), (c = 1 + c, 
                    c += 1, {} + Infinity - (2 === [ , 0 ].length && this)) ]] >>>= null | this), 
                    NaN_1 += !0, c = 1 + c, 0 ^ (async_2 && (async_2[c = 1 + c, 
                    (void 0 ^ Infinity | "function") <= (-3 !== [] != !1)] = {})) && (c += 1, 
                    38..toString()), c = 1 + c, 23..toString() % NaN || 38..toString(), 
                    c = 1 + c, 24..toString();
                }
                break;

              case b >>>= a:
                try {
                    async_2 = "b" - 23..toString(), c = 1 + c, 38..toString(), 24..toString();
                    var b_2 = void (c = 1 + c);
                } catch (a) {
                    for (var let_1 = void (c = 1 + c), brake87 = 5; c += 1, async_2_1 && "function" == typeof async_2_1.next && 0 <= --_calls_ && async_2_1.next((c = 1 + c, 
                    (1 <= 24..toString() ^ (async_2 && (async_2[c = 1 + c, void 0 + "function" | (23..toString(), 
                    !1)] <<= 0))) % (!0 >> (0 <= {}))), -1, (c = 1 + c, -2 | this || key27 && ({
                        next: key27[a++ + (async_2 = (24..toString() <= "bar" < NaN) << ((b_2 && (b_2[c = 1 + c, 
                        NaN] = -4)) ^ 2 * 23..toString()))]
                    } = {
                        next: 0 + (NaN_1 /= "b" ^ 2 === [ , 0 ].length)
                    }))) && 0 < --brake87; ) {}
                }
                switch (38..toString() in {
                    in: a--,
                    "": await && "function" == typeof await.async && 0 <= --_calls_ && (c = 1 + c, 
                    c += 1, 23..toString(), await.async)(..."" + async_2_1)
                }) {
                  case key27 && key27.value:
                  case -(0 != +(async_2 && (async_2[c = 1 + c, await += ((-0 | []) == (-0 ^ [])) >> -5] += 0))):
                  case (c += 1) + (b_2 && "function" == typeof b_2.in && 0 <= --_calls_ && b_2.in(0, Infinity)):
                    break;

                  default:
                    for (var brake91 = 5; ~((3 >> {} & (async_2 && (async_2.then -= 0))) << !1) && 0 < --brake91; ) {}
                    for (var brake94 = 5; c = 1 + c, (-2 << 23..toString() && {} == []) >>> (-4 == this ^ null) && 0 < brake94; --brake94) {
                        c = 1 + c, 38..toString();
                    }
                    for (var brake96 = 5; --b + --a && 0 < --brake96; ) {
                        var expr97 = [ (b_2 = "" >> (2 != {})) == (-2 | (c = (c = 1 + c) + 1 + 1, 
                        "b")), ,  ];
                        for (const key97 of expr97) {
                            c = 1 + c;
                            var async = expr97[key97];
                            c = 1 + c, 24..toString();
                        }
                    }
                }
                break;

              case --b + --b:
            }
        }
    }
    var brake99 = 5;
    do {
        var key100, expr100 = /[abc4]/g.exec((typeof (NaN_1 && "function" == typeof NaN_1.c && 0 <= --_calls_ && NaN_1.c(a++ + /[abc4]/g.exec(((c += 1) + (c += 1, 
        24..toString() + 0 >= ("number" & 38..toString())) || b || 5).toString()))) || b || 5).toString());
        for (key100 in expr100) {
            try {
                for (var brake102 = 5; --b + void function() {
                    for (var brake103 = 5; delete b && 0 < --brake103; ) {
                        "function" == typeof NaN_1 && 0 <= --_calls_ && NaN_1() ? (c = 1 + c, 
                        23..toString(), NaN_1 && (NaN_1[(c += 1) + {
                            3: (c = 1 + c, !0),
                            set 3(NaN) {
                                this.Infinity += -4 - Infinity;
                            },
                            c: key100 = (0 != {}) >> !(22 >>> []),
                            1.5: (this >>> null == 0) < 1,
                            value: (c = 1 + (c = 1 + (c = 1 + c)), ((key100 && (key100.a += !1)) | (key100 && (key100[c = 1 + c, 
                            ~({} >> 0 ^ "b" ^ {})] >>>= this >>> 5))) == (1 != (NaN_1 |= !1)))
                        }] = !0)) : c += 1;
                    }
                    c = 1 + c, bar_2 && (bar_2[--b + void 0] += (c += 1, "a" - (!1 !== (2 === [ , 0 ].length && []))));
                    var key111, b, expr111 = "function" == typeof (bar_2 = void (c = 1 + c)) && 0 <= --_calls_ && bar_2();
                    for ([ key111 ] in expr111) {
                        c = 1 + c;
                        const bar_2 = expr111[key111];
                        var bar_2;
                    }
                }() && 0 < brake102; --brake102) {
                    for (var brake115 = 5; key100 && "function" == typeof key100.var && 0 <= --_calls_ && key100.var(22) && 0 < brake115; --brake115) {
                        a++, c += 1, --b;
                    }
                }
            } finally {
                var key117, expr117 = a++;
                for (key117 in expr117) {
                    switch ((c += 1) + -b) {
                      case key100:
                        try {
                            switch (c = 1 + c, ((key100 = 5) >> !0) + (NaN < NaN)) {
                              case c = 1 + (c += 1), NaN & (key117 && (key117[c = 1 + c, 
                                0 !== (!1 === (null ^ 24..toString()))] = [] / "function")) <= 0:
                              case c = 1 + c, (key117 && (key117[a] += !0)) - ((key117 && (key117.value ^= "a" & {})) - (c += 1, 
                                24..toString())):
                              case c = 1 + c, {} / 25 ^ -1 ^ -5 * 24..toString() <= 21:
                              case c = 1 + c, !0 >> (!1 < "a" * 38..toString()):
                            }
                        } catch (yield) {
                            c = 1 + c, yield && ([ yield[a++ + ++a] ] = [ !1 ]);
                        }
                        --b, --b;
                        break;

                      case a++ + ((key100 && (key100.next += 4 === (c += 1, "b"))) | (key117 && (key117.next -= "bar" === 38..toString())) <= 4 ? (c += 1) + new function(foo_1, a) {
                            this[c = 1 + c, (1 >>> (2 === [ , 0 ].length) << (c += 1, 
                            38..toString())) % !0] = {}, this.in >>>= this >> "number";
                        }() : "function" == typeof NaN_1 && 0 <= --_calls_ && NaN_1(5, -0)):
                        var key123, expr123 = (c += 1) + !0;
                        for (key123 in expr123) {
                            switch (c = 1 + c, (-4 | this) % (2 !== 38..toString() != 0)) {
                              default:
                              case c = 1 + c, c += 1, NaN_1 = (2 === [ , 0 ].length != (NaN_1 && (NaN_1.static = 2 <= 24..toString()))) >>> 5:
                                break;

                              case c = 1 + c, !1 & (key123 && (key123[[].null] &= (-0 & this) >>> 3)):
                              case c = (c = 1 + c) + 1 + 1, "foo":
                            }
                        }
                        switch (+(key100 && (key100.Infinity %= void 0 - ((NaN_1 && (NaN_1[c = 1 + c, 
                        (1 === Infinity) - "bar" | (key117 += 22 ^ 23..toString(), 
                        NaN)] += "c" * 38..toString())) + -2)))) {
                          default:
                            c = 1 + c, key117 && (key117[c = 1 + c, NaN] = 0), c = 1 + c, 
                            38..toString(), NaN_1 && (NaN_1[c = 1 + c, 4 & 38..toString() & "undefined" * [] & 0] = 12);

                          case c = 1 + c, (0 == 23..toString()) < (Infinity || 5) <= (-1 === (c += 1, 
                            !0)) ? (c = 1 + c, (4 ^ (key117 && (key117[c = 1 + c, 
                            (0 ^ NaN % this) / (key117 = ("object" == this) < NaN)] <<= 0))) != (NaN_1 = !0)) : (c = 1 + c, 
                            !1 | (key117 += (2 === [ , 0 ].length ^ -2) + !1)):
                            c = 1 + c, 38..toString(), 24..toString(), key100 && ({
                                length: key100.a
                            } = {
                                length: [] != {}
                            }), c = 1 + c, c += 1, NaN_1 = 0;
                            break;

                          case --b + ~(!1 ^ (key100 >>>= -0 < [] <= NaN)):
                            c = 1 + c, key117 && (key117[a++ + (key117 && key117.set)] = !0), 
                            c = 1 + c, 23..toString(), c = 1 + c, c += 1, 23..toString();
                            break;

                          case {}:
                        }
                        for (var brake133 = 5; ~(0 === (NaN != "b" << 24..toString())) && 0 < brake133; --brake133) {
                            for (var brake134 = 5; c = 1 + c, NaN_1 && (NaN_1.undefined = !1 !== -38..toString() == (!0 !== (key117 &= this <= "bar"))), 
                            c = 1 + c, NaN_1 && (NaN_1[a++ + 5..toString()[a++ + (0 in [ (c = 1 + c, 
                            "" ^ [] || NaN) ])]] += (24..toString() + /[a2][^e]+$/ || "bar" - 24..toString()) >> (!0 >> (c += 1, 
                            24..toString()))) && 0 < --brake134; ) {}
                        }
                        break;

                      case ("cc" != /[a2][^e]+$/ + (2 === [ , 0 ].length)) % !1:
                      case b -= a:
                        c += 1;
                    }
                }
            }
        }
    } while ([ --b + (a++ + --b || a || 3).toString(), --b + NaN_1, --b + {
        async: --b + "number"
    }.var ][a++ + ~("object" < (-3 <= (2 === [ , 0 ].length)))] && 0 < --brake99);
    if (--b + (b = a)) {
        var key139, expr139 = /[abc4]/g.exec(((b %= a) || 5).toString());
        for (key139 in expr139) {
            c = 1 + c;
            var key140, NaN_1 = expr139[key139], expr140 = --b + (key139 && "function" == typeof key139.var && 0 <= --_calls_ && key139.var());
            for ([ key140 ] in expr140) {
                c = 1 + c;
                var foo = expr140[key140], Infinity = function(c_2, NaN_1_2) {
                    for (var brake142 = 5; a++ + (key139 && key139[--b + ("function" == typeof f6 && 0 <= --_calls_ && f6(22, (c = 1 + c, 
                    NaN_1 && (NaN_1[(c += 1) + (NaN_1_2 += (NaN_1 = NaN) != (24..toString() % this !== (c_2 && (c_2.get = "undefined"))))] = (NaN_1 && (NaN_1.async &= null != 38..toString())) % ("c" < (2 === [ , 0 ].length)) * (c += 1, 
                    2 === [ , 0 ].length)))))]) && 0 < --brake142; ) {
                        c = 1 + c, 24..toString(), 24..toString();
                    }
                    for (var brake144 = 5; (c += 1) + 0 && 0 < brake144; --brake144) {
                        var key145, expr145 = void 0 === NaN_1;
                        for (key145 in expr145) {
                            c = 1 + c;
                            switch (c = 1 + c, NaN_1 = ("b" === 24..toString()) - !1 <= NaN * (c_2 && (c_2.then %= -3 >> 24..toString()))) {
                              case c = 1 + c, c += 1, 22 <= (NaN_1 = 0):
                              case c = 1 + c, (this <= 2) >>> ("b" ^ Infinity) && !1:
                                break;

                              default:
                              case c = 1 + c, (NaN != (-1 != 23..toString())) >= (4 << {} && void 0):
                            }
                        }
                    }
                    var brake147 = 5;
                    do {
                        c = 1 + c, c_2 && ({
                            a: c_2[c = 1 + c, key139 && (key139.undefined += !1 === (NaN_1 = -3))]
                        } = {
                            a: Infinity >>> {}
                        });
                    } while (0 + a++ && 0 < --brake147);
                }(b + 1 - .1 - .1 - .1, (!0).toString(), (++a, c = 1 + c, Infinity && (Infinity.a = (key140 && ({
                    "-2": key140[a++ + ++a]
                } = {
                    "-2": -2
                })) / -4), "function" == typeof Infinity && 0 <= --_calls_ && Infinity((c = 1 + c, 
                NaN_1 && (NaN_1[/[abc4]/g.exec((c = 1 + c, (("undefined" % 23..toString() | !0) - (!1 < ("number" !== 23..toString())) || b || 5).toString()))] = !0)))));
            }
        }
    } else {
        var brake151 = 5;
        do {
            var key152, expr152 = (c += 1) + [ 0 ].set;
            for (key152 in expr152) {
                c = 1 + c;
                var yield = expr152[key152];
                try {
                    var arguments = a++ + {
                        async: (c = 1 + c, c += 1, 0 != "undefined" << 38..toString() << NaN),
                        ...yield,
                        "-2": (c = 1 + c, NaN_1 && ([ NaN_1.foo ] = [ 0 == (c += 1, 
                        -5) ])),
                        get: (c = 1 + c, (key152 && (key152[c = 1 + c, 38..toString() / !0 << NaN <= (arguments && (arguments.foo -= "b" < (null & [])))] = 23..toString() / 24..toString())) / !0 / ("bar" === (yield >>>= 0))),
                        NaN: (c = 1 + c, !1)
                    }.undefined;
                } catch (arguments_2) {
                    for (var Infinity_1 = function() {}`${c = 1 + c, 0}`, brake156 = 5; new function() {
                        this.value |= "bar", this.var = -2;
                    }(38..toString()) && 0 < --brake156; ) {}
                    a++, c = 1 + c, 24..toString(), c = 1 + (c = 1 + c);
                }
            }
        } while (c += 1, 0 < --brake151);
    }
}

console.log(null, a, b, c, Infinity, NaN, void 0);
```
```
original result:
null 103 10 0 Infinity NaN undefined

uglified result:
SyntaxError: Identifier 'bar_2' has already been declared
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Object.<anonymous> ([stdin]-wrapper:6:22)
    at Module._compile (module.js:653:30)
    at evalScript (bootstrap_node.js:479:27)
    at Socket.<anonymous> (bootstrap_node.js:250:15)
    at emitNone (events.js:111:20)
    at Socket.emit (events.js:208:7)
    at endReadableNT (_stream_readable.js:1064:12)
    at _combinedTickCallback (internal/process/next_tick.js:139:11)
```
```js
// reduced test case (output will differ)

// (beautified)
(function() {
    var b_2 = function f12(bar_2) {
        bar_2[0];
    }();
    b_2 && b_2();
    {
        const bar_2 = 0;
        for (var brake112 = 5; 0; 0) {
            var b_2;
        }
    }
})();
// output: TypeError: Cannot read property '0' of undefined
// minify: SyntaxError: Identifier 'bar_2' has already been declared
// options: {
//   "mangle": false,
//   "module": false,
//   "output": {
//     "v8": true
//   },
//   "validate": true
// }
```
```
minify(options):
{
  "mangle": false,
  "module": false,
  "output": {
    "v8": true
  }
}

Suspicious compress options:
  collapse_vars
  dead_code
  evaluate
  inline
  loops
  merge_vars
  sequences
  unused
```


Fix patch:
diff --git a/lib/compress.js b/lib/compress.js
index f0d470fa70..831050c9ef 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -6791,7 +6791,7 @@ Compressor.prototype.compress = function(node) {
                         var id = node.definition().id;
                         var refs = references[id];
                         if (refs) {
-                            refs.push(node);
+                            push_ref(refs, node);
                         } else if (!(id in references)) {
                             declarations.add(id, node);
                         }
@@ -6936,6 +6936,13 @@ Compressor.prototype.compress = function(node) {
             segment = Object.getPrototypeOf(segment);
         }
 
+        function push_ref(refs, sym) {
+            refs.push(sym);
+            push_uniq(refs.scopes, sym.scope);
+            var scope = find_scope(tw);
+            if (scope !== sym.scope) push_uniq(refs.scopes, scope);
+        }
+
         function walk_destructured(symbol_type, mark, lhs) {
             var marker = new TreeWalker(function(node) {
                 if (node instanceof AST_Destructured) return;
@@ -6987,7 +6994,7 @@ Compressor.prototype.compress = function(node) {
                 var refs = references[def.id];
                 if (!refs) return;
                 if (refs.start.block !== seg.block) return references[def.id] = false;
-                push_ref(sym);
+                push_ref(refs, sym);
                 refs.end = seg;
                 if (def.id in prev) {
                     last[prev[def.id]] = null;
@@ -7002,7 +7009,7 @@ Compressor.prototype.compress = function(node) {
             } else {
                 var refs = declarations.get(def.id) || [];
                 refs.scopes = [];
-                push_ref(sym);
+                push_ref(refs, sym);
                 references[def.id] = refs;
                 if (!read) {
                     refs.start = seg;
@@ -7019,13 +7026,6 @@ Compressor.prototype.compress = function(node) {
                 index: index++,
                 definition: def,
             });
-
-            function push_ref(sym) {
-                refs.push(sym);
-                push_uniq(refs.scopes, sym.scope);
-                var scope = find_scope(tw);
-                if (scope !== sym.scope) push_uniq(refs.scopes, scope);
-            }
         }
 
         function insert(target) {


Test patch:
diff --git a/test/compress/const.js b/test/compress/const.js
index df948ac4d9..d991f1b4a8 100644
--- a/test/compress/const.js
+++ b/test/compress/const.js
@@ -2231,3 +2231,66 @@ issue_5787: {
     }
     expect_stdout: true
 }
+
+issue_5930_1: {
+    options = {
+        merge_vars: true,
+    }
+    input: {
+        console.log(function() {
+            var a;
+            (f = a) && f();
+            {
+                const a = 42;
+                var f;
+            }
+        }());
+    }
+    expect: {
+        console.log(function() {
+            var a;
+            (f = a) && f();
+            {
+                const a = 42;
+                var f;
+            }
+        }());
+    }
+    expect_stdout: true
+}
+
+issue_5930_2: {
+    options = {
+        collapse_vars: true,
+        inline: true,
+        merge_vars: true,
+        unused: true,
+    }
+    input: {
+        "use strict";
+        (function() {
+            f = function g(a) {
+                a.p;
+            }();
+            f && f();
+            {
+                const a = 42;
+                var b = false;
+                var f;
+            }
+        })();
+    }
+    expect: {
+        "use strict";
+        (function() {
+            var a;
+            (f = void a.p) && f();
+            {
+                const a = 42;
+                var f;
+            }
+        })();
+    }
+    expect_stdout: TypeError("Cannot read properties of undefined")
+    node_version: ">=4"
+}