Repository: mishoo/UglifyJS (JavaScript)

Issue:
ufuzz failure
```js
// original code
// (beautified)
var _calls_ = 10, a = 100, b = 10, c = 0;

async function f0(b_2, async) {
    {
        var brake1 = 5;
        while (a++ + [] && --brake1 > 0) {
            if (a++ + []) {} else {
                c = c + 1;
            }
        }
    }
    switch ((c = c + 1) + b_2) {
      default:
        {
            var a_2 = function f1() {
                {
                    L15439: {
                        c = 1 + c, ((0 !== {}) >= (b_2 && (b_2[c = 1 + c, (c = c + 1, Infinity <= 4) >>> (b_2 && (b_2[c = 1 + c, 
                        (/[a2][^e]+$/ | 24..toString() || 2 === null) | + -5 > ([ , 0 ].length === 2 === 3)] >>>= [ , 0 ][1] >>> 3)) * (-3 != /[a2][^e]+$/)] = false == {}))) + delete (5 % "");
                        c = 1 + c, 2 < undefined & (b_2 = undefined / "object") || (/[a2][^e]+$/ <= 5, "b" >= [ , 0 ][1]);
                        c = 1 + c, ({} | 2) >= (-1 == this) && (4 !== {}, c = c + 1, 25);
                        c = 1 + c, ({} >>> 3, [] ^ [ , 0 ].length === 2) >>> (-5 << -3) - undefined / 3;
                    }
                }
                switch (a++ + void (async && (async[(a++ + ((c = 1 + c, -4 != 4 == ("foo" ^ {}) ^ (c = c + 1, 
                "a" != NaN)) || 8).toString()[c = 1 + c, (async && (async[(c = c + 1) + (b_2 && typeof b_2.static == "function" && --_calls_ >= 0 && b_2.static())] += -2 / (23..toString() <= ([ , 0 ].length === 2)))) + (null !== 24..toString() ^ (b_2 && ({
                    next: b_2.in
                } = {
                    next: ("foo", "bar")
                })))] || a || 3).toString()] = (5 & []) <= ("bar" !== this) ^ (-1 | -0) << (1, -3)))) {
                  case b++:
                    {
                        var a_1 = function arguments() {
                        }((c = 1 + c, (1 || "object") + (23..toString() === [ , 0 ][1]) | !(([ , 0 ].length === 2) + true)));
                    }
                    {
                        return {}[c = 1 + c, (this >= "" || "number" & -1) !== (async && (async.c = this >> "foo" >= {} - this))];
                    }
                    break;

                  case void function foo_2() {}():
                    {
                        var arguments_2 = function f2(b_2) {
                        }((c = 1 + c, (-0 > [] && -3 < 2) ^ (this === "bar" | 1 - 5)), "object");
                    }
                    break;

                  case ((--b + {} || 8).toString()[typeof f4 == "function" && --_calls_ >= 0 && f4(-2)] || a || 3).toString():
                    switch ((c = c + 1) + void b) {
                      case typeof (c = 1 + c, (23..toString() >> "object", -1 > "b") >> ("c" >> "object" >> void 23..toString())):
                        c = 1 + c, arguments_2 >>= "" <= [ , 0 ][1] >= (a_1 && ({
                            set: a_1[c = 1 + c, [] <= NaN | (c = c + 1, "undefined") && [ , 0 ][1] > -0 <= (24..toString() & "foo")]
                        } = {
                            set: 3 == false
                        })), b_2 = 38..toString() + true ^ "undefined" == 1;
                        c = 1 + c, (23..toString() != [ , 0 ][1]) < (/[a2][^e]+$/ ^ [ , 0 ].length === 2) > ("bar" | "number") + (2 ^ "b");
                        break;

                      case --b + (typeof async == "function" && --_calls_ >= 0 && async()):
                        c = 1 + c, undefined >>> "c" >> (-4 >= 5) >>> +(undefined && 0);
                        break;

                      case (c = c + 1) + delete (([ , 0 ].length === 2 ^ 23..toString()) + (23..toString() !== /[a2][^e]+$/) + (!2 << (undefined | -4))):
                        break;

                      case /[abc4]/g.exec(((c = 1 + c, (async && ([ async[c = 1 + c, ("undefined" >>> -5 != (-1 != NaN)) / (([ , 0 ].length === 2) + "foo" > ("number" != 24..toString()))] ] = [ [] && this ])) >= (async && ([ async.then ] = [ "bar" ^ "foo" ])) & (~"number" ^ -5 - "number")) || b || 5).toString()):
                        c = 1 + c, (c = c + 1, "function") * ("foo" | "b") == ([ , 0 ].length === 2) % "" < (a_1 && ([ a_1[c = 1 + c, 
                        arguments_2 = (/[a2][^e]+$/ != this) + (undefined + this) <= !("function" ^ 3)] ] = [ 4 > false ]));
                        c = 1 + c, arguments_2 && (arguments_2.undefined = (("number", -0) - "" / undefined) / ((this & "number") < 1 << Infinity));
                        break;
                    }
                    c = c + 1;
                    break;

                  case typeof /[abc4]/g.exec((b_2 && b_2.a || b || 5).toString()):
                    {
                        var expr24 = a++ + b++;
                        L15440: for (var key24 in expr24) {
                            {
                                var brake25 = 5;
                                while ((c = 1 + c, ("bar" !== []) + (4 !== 24..toString()) >= (0 - -5 == "c" % true)) && --brake25 > 0) {
                                    c = 1 + c, a_1 && ([ a_1[(c = c + 1) + (typeof arguments_2 == "function" && --_calls_ >= 0 && arguments_2((c = 1 + c, 
                                    ((undefined | "foo") ^ "foo" == "c") >= ([] && 23..toString() || 22 && "foo")), (c = 1 + c, 
                                    key24 && (key24.NaN += -(c = c + 1, 4) | (key24 && (key24[c = 1 + c, !((NaN >>> 22) % ("" + -5))] += this % "")) / ("" ^ "function"))), [ , 0 ].length === 2))] ] = [ (a_1 = (arguments_2 && (arguments_2.NaN = -0 & "a")) - (1 === -5)) === ("foo" != -5) >> true / "a" ]);
                                }
                            }
                        }
                    }
                    break;
                }
            }();
        }
        try {
            switch (--b + ++b) {
              case --b + ((async && (async[async] = (c = c + 1, "bar") != 23..toString() < "object")) == ("undefined" >> 24..toString()) % ({} === "b")):
                break;

              case [ (c = c + 1) + (a++ + (--_calls_ >= 0 && f2("undefined")) || a || 3).toString() ][typeof async == "function" && --_calls_ >= 0 && async()]:
                break;

              case (c = c + 1) + (38..toString() in {
                    [async && typeof async.var == "function" && --_calls_ >= 0 && async.var(0, -4, -1)]: a++ + [ 0 === 1 ? a : b, , (-2 ^ [ , 0 ][1], 
                    5 ^ null) % ((c = c + 1, 1) ^ -1 < -5) ].done
                }):
                c = c + 1;
                break;

              case --b + (1 === 1 ? a : b):
                var let_2 = --b + (let_2 = --b + ((3 < -5 === 23..toString() << false) <= (3 >>> -3 & "c" / 38..toString()))), a_2 = (c = c + 1) + ((c = c + 1) + a++ || 5).toString()[await a--];
                break;
            }
        } catch (async) {
            try {
                L15441: {
                    {
                        var brake33 = 5;
                        do {
                            var b_2_1 = (c = 1 + c, ("function" < Infinity || 23..toString() >>> []) & ((NaN || NaN) && ([ , 0 ][1] && Infinity)));
                        } while (typeof async == "function" && --_calls_ >= 0 && async(1, 3, (c = 1 + c, 
                        ("undefined" && 25) * (5 === "b") << (0 <= {}) - ({} === ([ , 0 ].length === 2)))) && --brake33 > 0);
                    }
                    --b;
                    for (var brake36 = 5; a++ && brake36 > 0; --brake36) {}
                    {
                        var Infinity_2 = function f3() {
                        }((c = 1 + c, b_2_1 += ((a_2 += "bar" < 38..toString()) & (a_2 && (a_2[c = 1 + c, 
                        b_2 && (b_2[-5] = 38..toString() ^ 25 | undefined * 2) || -5 < 2 >= "" * [ , 0 ][1]] += 2 + "a"))) == ((null | "number") ^ 22 === ([ , 0 ].length === 2))), (c = 1 + c, 
                        [ , 0 ][1] > -0 ^ ([ , 0 ][1] ^ 24..toString()) && void 25 !== (b_2 && (b_2[c = 1 + c, 
                        async && (async.async = ("c" ^ /[a2][^e]+$/) !== "number" / "function" ^ [ , 0 ][1] * "foo" !== ("" != "foo"))] = undefined && true))), 4);
                    }
                }
            } finally {
                {
                    return await -1;
                }
                if (--b + {
                    next: (c = 1 + c, ("object" === NaN ^ "c" / "bar") * ((-2 && 22) < ("function" ^ [ , 0 ].length === 2))),
                    get: (c = 1 + c, ((c = c + 1, true) && ("c", 3)) ^ (-3 > -0 && 24..toString() + -1)),
                    c: (c = 1 + c, (1 - 5 >>> (a_2 >>>= 0 % "function")) % (25 <= "undefined", 25 == "a")),
                    var: (c = 1 + c, (4 && "number") >= true << "number" === 5 >>> 38..toString() << "undefined" / false)
                }[c = 1 + c, "object" <= true < delete 25 >= (0 === 3) + (24..toString() > 0)] ? --b + (0 === 1 ? a : b) : (c = c + 1) + /[abc4]/g.exec(((c = 1 + c, 
                a_2 && (a_2[--b + (typeof a_2 == "function" && --_calls_ >= 0 && a_2("function", (c = 1 + c, 
                (-0 != NaN ^ null & undefined) - (/[a2][^e]+$/ >> "object" || [ , 0 ].length === 2 == -0)), (c = 1 + c, 
                (false + this != 1 > -0) * (("c" || null) << (c = c + 1, false)))))] /= (Infinity & -5) - (c = c + 1, 
                -0) & ~("b" % Infinity))) || b || 5).toString())) {
                    switch ({
                        ...b_2,
                        undefined: (c = 1 + c, undefined >= "number" === (null && "function") == ({} !== "c") << (5 & "object")),
                        var: (c = 1 + c, a_2 && (a_2[-b] -= async && (async[typeof a_2_1 === "special"] = /[a2][^e]+$/ != -4 == (undefined ^ "c")) && (let_2 && (let_2[c = 1 + c, 
                        null >> 4 << ({} >= Infinity) > ((3, [ , 0 ].length === 2) <= "foo" % 23..toString())] *= NaN >> -4)) - (-1 == /[a2][^e]+$/))),
                        get: (c = 1 + c, (1 && null) ^ -5 >> "a" || 1 != 4 | (b_2 && (b_2[c = 1 + c, ((a_2 += 38..toString() ^ "undefined") & 4 > -4) == (("a", 
                        -1) || ([ , 0 ].length === 2) < "a")] = -3 ^ 38..toString()))),
                        c: (c = 1 + c, (2 != this && "number" / -2) % (-4 <= Infinity ^ /[a2][^e]+$/ << 25))
                    }) {
                      default:
                        c = 1 + c, ("function" / -0 <= 23..toString() / "object") >>> ([ , 0 ][1] ^ -4) % ("object" >> "b");
                        c = 1 + c, c = c + 1, "object" & 23..toString(), ("" && "a") - (22 && 0);

                      case a++ + "foo":
                        c = 1 + c, c = c + 1, this - 23..toString() && "number" <= 5;
                        break;

                      case a_2 && typeof a_2.undefined == "function" && --_calls_ >= 0 && a_2.undefined``:
                        c = 1 + c, (0 % -3, -3 !== "bar") * ((Infinity && false) != (a_2 && (a_2[c = 1 + c, 
                        (2 != "number" != (38..toString() === -0)) + (c = c + 1, "a") * ("bar" !== ([ , 0 ].length === 2))] = [ , 0 ][1] + 5)));
                        break;

                      case (c = c + 1) + typeof (c = 1 + c, (-3 < NaN == (4 == -4)) << (-1 > [] && ([ , 0 ].length === 2) / -5)):
                        break;
                    }
                } else {
                    var brake46 = 5;
                    while ((1 === 1 ? a : b) && --brake46 > 0) {
                        if (c = 1 + c, (22, -5) >= "object" << null & "c" + "object" >>> "object" / "b") {
                            c = 1 + c, undefined / undefined / (async = "bar" / true), 0 / Infinity === (1 & true);
                        } else {
                            c = 1 + c, !("c" % ([ , 0 ].length === 2)) + (-5 == 23..toString() !== "bar" >>> {});
                        }
                    }
                }
            }
            {
                var brake50 = 5;
                do {
                    if (--b + [ ..."" + async, (c = c + 1) + (typeof b_2 == "function" && --_calls_ >= 0 && b_2()), Infinity ][(c = c + 1) + [ (c = 1 + c, 
                    (/[a2][^e]+$/ + -1 >> (async && (async.NaN = "number" != "bar"))) - (({} | -5) & -2 == "bar")), (c = 1 + c, 
                    ((async && (async.async = [] - "c")) <= (a_2 && (a_2[c = 1 + c, (38..toString() + "function" || 1 < 22) << (Infinity !== "bar" !== (async && (async.foo = 23..toString() >> "")))] = ([ , 0 ].length === 2) - null))) + (this ^ 5) / (23..toString() ^ -2)), (c = 1 + c, 
                    (true < [ , 0 ][1]) / ("number" >> 1), 23..toString() >>> [] && "foo" == []) ][-1 in [ (c = 1 + c, 
                    ~(/[a2][^e]+$/ - -0) - -([] === "c")), (c = 1 + c, (c = c + 1, 38..toString()) == (c = c + 1, 
                    true) == (Infinity << Infinity ^ (async && (async[c = 1 + c, 22 / 4 + (-1 !== this) + ((c = c + 1, 
                    23..toString()) ^ -"")] += -5 - [ , 0 ][1])))), (c = 1 + c, async && (async.foo = (2 >= 38..toString() && 4 * "a") != "foo" + 22 + ("undefined" << /[a2][^e]+$/))) ]]]) {} else {
                        var undefined_1 = function* f4() {
                            c = 1 + c, async && (async.foo += (undefined || Infinity) - (4 >= null) || ("a" & Infinity) != (-3 ^ this));
                            c = 1 + c, ("foo" & undefined) > (b_2 && (b_2[c = 1 + c, a_2 >>>= (Infinity - "function" ^ {} - undefined) <= (c = c + 1, 
                            []) >> ("" && undefined)] /= 3 / -2)) !== (([ , 0 ].length === 2) >= Infinity & (b_2 = "object" - "a"));
                        }((c = 1 + c, (false > "bar" <= (this || 3)) >> (async && (async[typeof async == "function" && --_calls_ >= 0 && async()] %= void "object" !== (-3 || [ , 0 ].length === 2)))), (c = 1 + c, 
                        c = c + 1, (NaN || 25) >> ("object" >>> "")), (c = 1 + c, (4 / -1 & -0 >>> 4) - (/[a2][^e]+$/ >= -2 ^ "b" * "a"))).next();
                    }
                } while ((0 === 1 ? a : b) && --brake50 > 0);
            }
        } finally {
            try {
                {
                    var expr57 = a++ + (0 === 1 ? a : b);
                    for (var key57 in expr57) {
                        c = 1 + c;
                        var await_1 = expr57[key57];
                        L15442: {}
                    }
                }
            } catch (a_2_2) {
                (c = c + 1) + a--;
                a++ + --b;
            } finally {
                L15443: {}
                {
                    var NaN = function f5(arguments_1, a) {
                        const let_2 = 1 === 1 ? a : b, a_2 = a++ + (typeof async == "function" && --_calls_ >= 0 && async(22, 25));
                        let arguments = (-1 && 23..toString()) > (a_2 && ([ a_2.static ] = [ -3 ^ null ])) & (b_2 && (b_2.b = -Infinity > 24..toString() + "foo"));
                        c = 1 + c, (23..toString() && this) * ("b" && 1) !== (23..toString() !== ([ , 0 ].length === 2) !== ("foo" != this));
                        c = 1 + c, a = (-3 ^ 1) % ("undefined" && null) && 4 != "bar" & "b" + 23..toString();
                    }(/[a2][^e]+$/, 24..toString());
                }
            }
            ({
                static: (c = c + 1) + (let_2 = --b + (typeof alias0 != "undefined" && alias0)),
                NaN: --b + new function a_2_2(b_1, arguments) {}()
            });
        }

      case async && typeof async.NaN == "function" && --_calls_ >= 0 && async.NaN():
        switch ([ a++ + (typeof f7 == "function" && --_calls_ >= 0 && f7(...[], ...[ --b + (1 === 1 ? a : b) ], 25)), (c = c + 1) + [ ..."" + let_2, a++ + (1 === 1 ? a : b), --b + {
            0: (c = 1 + c, ("number" / 5 & (async && (async[c = 1 + c, ({} + 38..toString() <= null - null) + +(38..toString() + 5)] += -4 < 38..toString()))) >= (NaN != 4 && "number" == 22))
        } ].b, a++ + ("c" in []) ].done) {
          case ~((([ , 0 ].length === 2) * 23..toString() == ("foo" || "undefined")) > ((25 ^ -1) >= ("object" >= [ , 0 ][1]))):
            {
                var brake67 = 5;
                while ((c = c + 1, (c = c + 1, 23..toString()) * (-2 << Infinity)) && --brake67 > 0) {
                    continue;
                }
            }
            switch (!a) {
              default:
                if (--b + new function(a_2_2) {
                    this.done /= (void "a", -3 & null);
                    c = 1 + c, ("foo" << 4, "a" - this) && (a_2 && ([ a_2.next ] = [ 23..toString() >> "" || "bar" == "function" ]));
                }(22)) {
                    var brake72 = 5;
                    while (a_2 && a_2[c = 1 + c, (25 > "c" !== 24..toString() <= 38..toString()) << (-3 * -0 != (-5 || false))] && --brake72 > 0) {
                        if (c = 1 + c, ("b" === 25) << ("c" == 4), (-5, "b") ^ Infinity % "number") {
                            c = 1 + c, ((Infinity || [ , 0 ].length === 2) | (-4 && 23..toString())) !== (NaN !== []) <= (c = c + 1, 
                            "function");
                        } else {
                            c = 1 + c, (async && (async[a++ + (typeof a_2_1 != "undefined")] = ("foo" | -0) != 22 + 5)) >= (c = c + 1, 
                            "a") >>> (23..toString() | 22);
                        }
                    }
                }

              case --b + [ +(delete (38..toString() >= 4) <= (c = c + 1, this !== true)), b + 1 - .1 - .1 - .1, --b + -1, a++ + ((c = c + 1) + +(("b" == "number" !== "a" >> "foo") < (undefined ^ /[a2][^e]+$/ && false >>> 3)) || 0).toString()[--b + Infinity] ][(c = c + 1) + (--b + (!(((c = c + 1, 
                1) == "c" >= 22) < (-0 >= ([ , 0 ].length === 2)) - (Infinity <= 3)) ? --b + +function() {
                }() : --b + new function foo(a_2, arguments_2, NaN_2) {
                    this[c = 1 + c, (0 >= -0) >> (-5 ^ "a") << (23..toString() / "bar" & 24..toString() * 22)] += 22 >> [];
                    this.async += {} < -3;
                }()) ? +((-1 && "") + (c = c + 1, 25) === (/[a2][^e]+$/ >= -2) - -3 % [ , 0 ][1]) : typeof f4 == "function" && --_calls_ >= 0 && f4`${c = 1 + c, 
                -4 / Infinity >>> "bar" % 25 >= (a_2 += (undefined >> this) / (/[a2][^e]+$/ - -1))}${c = 1 + c, 
                ("b" > null != (false | -1)) - (22 << 5 << (0 != 0))}${c = 1 + c, (24..toString() < /[a2][^e]+$/ ^ (25 | "b")) === 38..toString() - 3 >> (1 >= 4)}$${c = 1 + c, 
                (/[a2][^e]+$/ ^ []) == ("a" ^ "number") != (23..toString() == "b" || let_2 && (let_2.undefined &= "bar" == 38..toString()))}${c = 1 + c, 
                ("foo" | 38..toString()) <= (-3 >= -4) < "number" - -1 + (/[a2][^e]+$/ < 4)}`)]:
                break;

              case a++ + [ (c = c + 1) + [ (c = 1 + c, ("" << {}) % ("c" / NaN), {} - "b" < ("a" <= 4)), (c = 1 + c, 
                (24..toString() < -0) * ("undefined" < this) >>> (1 - 23..toString() ^ 24..toString() <= "number")), (c = 1 + c, 
                delete (undefined ^ NaN && [ , 0 ][1] & [ , 0 ].length === 2)) ][typeof f6 == "function" && --_calls_ >= 0 && f6("undefined", (c = 1 + c, 
                (null == null === "" < this) * (("foo" && 0) <= [] >> ([ , 0 ].length === 2))))], ...[ (let_2 ^= 22 << "undefined" == (5 ^ NaN)) || -2 >> "a" >> (/[a2][^e]+$/, 
                4) ], --b + (b_2 && b_2.length), (c = c + 1) + (let_2 >>= --b + delete a), --b + let_2 ][a++ + (4 in [])]:
                break;

              case void function() {
                }():
                break;
            }

          default:
            {
                return --b + -a;
            }
            {}

          case [ let_2 && let_2[(c = c + 1) + /[abc4]/.test(((c = c + 1) + /[abc4]/g.exec(((c = c + 1) + undefined || b || 5).toString()) || b || 5).toString())], a++ + (2 in [ b_2 && b_2[--b], --b + [ (c = 1 + c, 
            ((a_2 += true == 1) ^ (-4 && "b")) < (c = c + 1, c = c + 1, 38..toString())), (c = 1 + c, 
            (b_2 && (b_2[++a] = 1 >>> 38..toString() || "function" >= {})) <= (/[a2][^e]+$/ << {}) - "b" * "c"), ...[ ...[ (c = 1 + c, 
            ((24..toString() || "bar") >= !/[a2][^e]+$/) - (-3 / "c" >>> /[a2][^e]+$/ % this)), (c = 1 + c, 
            false > "c" > -4 % 5 & (5 | undefined) === -4 << 25), (c = 1 + c, async && (async.get = ("b" || 38..toString()) != (5, 
            -1)), "a" <= 3 && (let_2 && (let_2[c = 1 + c, (c = c + 1, "a" >>> "number") << (("function" !== -2) >> (false ^ 5))] %= -3 ^ 24..toString()))), ,  ], (c = 1 + c, 
            (([ , 0 ].length === 2) >>> 4 ^ (38..toString() | 25)) + ((a_2 && (a_2.value = "" ^ "function")) === -0 / false)), (c = 1 + c, 
            ((true ^ "bar") & (-2 ^ 2)) + ((2 & null) == (-1 !== -2))) ] ].next, Infinity in {}, --b + --b ]) ].var:
            var b_2 = await (b_2 && typeof b_2.null == "function" && --_calls_ >= 0 && b_2.null`${--b + delete a}${(c = c + 1) + (0 === 1 ? a : b)}${a++ + b--}}$tmpl${{}.NaN}`);
            break;

          case --b + [][a++ + (2 in {
                b: /[abc4]/g.exec((--b + (a_2 && typeof a_2.c == "function" && --_calls_ >= 0 && a_2.c(false, [])) || b || 5).toString()),
                in: -(("b" === undefined | (c = c + 1, 4)) - (-3 & 38..toString() & "" - 1)),
                async: (c = c + 1) + +(3 >> 5 != "number" <= "bar" & (a_2 >>= (b_2 && ([ b_2[c = 1 + c, 
                "function" > -2 > (async = -0 < /[a2][^e]+$/) && "undefined" === 0 != (this != [])] ] = [ -4 || 25 ])) & ("c" ^ 1))),
                static: a++ + ~(-3 + true | (a_2 && (a_2.next = ("object", "a"))) && (/[a2][^e]+$/ != 0) >> Infinity + /[a2][^e]+$/)
            })]:
            switch (a++ + []) {
              case 1 === 1 ? a : b:
                L15444: {
                    if (c = 1 + c, ((23..toString(), 2) >> (-1 >= /[a2][^e]+$/)) - ((null || null) ^ [] + this)) {
                        c = 1 + c, "undefined" + Infinity ^ "bar" == -1 | (0 === "foo") > ("" && 23..toString());
                    } else {
                        c = 1 + c, ("c" > 22) - (b_2 && (b_2[c = 1 + c, 2 === -3 != ([ , 0 ].length === 2 !== true) & (22 || 0) >= ("foo" | -5)] /= 2 % -1)) != (-5 << 0 & "number" <= []);
                    }
                    c = c + 1;
                    try {
                        c = 1 + c, (NaN << 4 > null >>> {}) >>> (-4 <= 5 || a_2 && ([ a_2.get ] = [ "b" ^ /[a2][^e]+$/ ]));
                    } finally {
                    }
                    var b_2_2 = (c = 1 + c, -0 < "undefined" !== 4 - null | (NaN && /[a2][^e]+$/) <= (-0 >= "undefined")), arguments_1 = (c = 1 + c, 
                    "number" == "c" == (-5 || 38..toString()) ^ "b" + NaN << (let_2 += null / -0));
                }
                break;

              case (c = c + 1) + (typeof f2 == "function" && --_calls_ >= 0 && f2()):
                break;

              case b += a:
                var yield = (c = c + 1) + (a = --b + (a && a.c)), a = a++ + a++;
                break;

              default:
            }
            try {
                for (var brake92 = 5; -((23..toString() >= this && 25 % [ , 0 ][1]) <= (-3 >> 22) + "function" % "b") && brake92 > 0; --brake92) {
                    if (void function b_2_2() {
                        c = 1 + c, (24..toString() >> 3 ^ 25 + NaN) === ("undefined" & -3) <= +"undefined";
                    }()) {
                        var brake95 = 5;
                        while ((0 === 1 ? a : b) && --brake95 > 0) {
                            if (c = 1 + c, (5 * "object" >= (a_2 = -5 != 23..toString())) << (Infinity === null && 24..toString() > -1)) {
                                c = 1 + c, (24..toString() << "function") / (23..toString() >= 5) ^ -(a_2 && (a_2[c = 1 + c, 
                                (b_2 && (b_2[(c = c + 1) + a++] = -2 != "undefined" ^ -1 * "a")) == "a" * NaN >= (c = c + 1, 
                                "")] = "undefined" === null));
                            } else {
                                c = 1 + c, "object" % false - ("" >= 3), (true & true) << (a && (a.a = -4 + -5));
                            }
                        }
                    } else {
                        var brake99 = 5;
                        while ((b += a) && --brake99 > 0) {
                            try {
                                c = 1 + c, (3 | -4) > (-5 && "function") === [ , 0 ][1] % -2 <= (-3 > NaN);
                            } finally {
                            }
                        }
                    }
                }
            } finally {
                if ((c = c + 1) + ((yield && (yield[--b + b--] = ("function" == 5) % (b_2 && (b_2.foo = {} >= 23..toString())))) | (24..toString() && [ , 0 ].length === 2) >>> (yield && (yield.c += 3 >= "c")))) {
                    switch (a++ + (3 in {
                        ...async,
                        c: (c = 1 + c, (25 > 38..toString() | NaN ^ "object") >>> (null !== false || 1 == false))
                    })) {
                      default:
                        c = 1 + c, a_2 && (a_2[typeof f5 == "function" && --_calls_ >= 0 && f5()] = (NaN - 22 | -5 ^ "foo") >>> (3 < -2 || 4 - "foo"));

                      case -3:
                        c = 1 + c, (-4 < 1 == ([] ^ "bar")) << (-0 < /[a2][^e]+$/ || "bar" / "c");
                        c = 1 + c, async && (async[--b + (b_2 && typeof b_2.b == "function" && --_calls_ >= 0 && b_2.b("undefined", 23..toString()))] = (-1 >= Infinity !== (-0 !== [ , 0 ][1])) - (("a" << NaN) - (5 - -1)));
                        break;

                      case --b + (b_2 && (b_2.get = (this % "" && this & -1) >> (0 - 22 >= 0 / "foo"))):
                        break;

                      case (c = c + 1) + (b = a):
                        c = 1 + c, ([] & "foo") >> ("number" < "") >>> (("a" || {}) == 38..toString() <= "");
                        break;
                    }
                }
                switch ({
                    "": (c = 1 + c, "b" >>> [ , 0 ][1] === (4 & [ , 0 ].length === 2) & (c = c + 1, 
                    undefined > ""))
                }) {
                  case delete (((c = c + 1, this) && "c" >= "a") * (b_2 && (b_2[a++ + (typeof f4 == "function" && --_calls_ >= 0 && f4(22))] += ~-3 / (4 == "b")))):
                    var arguments = (c = 1 + c, c = c + 1, (NaN && [ , 0 ].length === 2) == {} * "a"), a_2_2 = (c = 1 + c, 
                    ((38..toString() ^ "object") & 24..toString() >> 25) * ((b_2 && (b_2.then = {} || /[a2][^e]+$/)) != 4 % "undefined"));
                    try {
                        c = 1 + c, (yield = 4 === -1) != (0 ^ []) ^ 5 >= "b" < (true, 3);
                    } catch (b_2) {
                    }
                    break;

                  case a++ + (typeof NaN !== "function"):
                    break;

                  case --b + {
                        ...a_2,
                        "": (c = 1 + c, a_2 && (a_2[--b + (typeof f4 == "function" && --_calls_ >= 0 && f4())] = ("c" << ([ , 0 ].length === 2) >>> ("undefined" & 24..toString())) * ((4 << "object") * ("bar" != "object"))))
                    }.value:
                    L15445: for (var brake112 = 5; (c = 1 + c, ((c = c + 1, 23..toString()) == ({} !== "bar")) >>> (5 >>> "bar" || Infinity / 1)) && brake112 > 0; --brake112) {
                        c = 1 + c, let_2 && (let_2.get >>>= (NaN << /[a2][^e]+$/) % (1 << -5) !== (-5 * /[a2][^e]+$/ ^ this !== "number"));
                    }
                    break;

                  case (c = c + 1) + (a++ + (this in [ (c = 1 + c, (c = c + 1, -2 % 2) % (-3 * 2 ^ [] + 3)), (c = 1 + c, 
                    (5 << 4) - (c = c + 1, true) !== (null % "function" === ([], NaN))), (c = 1 + c, 
                    (0 !== -4) * (Infinity >= 24..toString()), 1 / this >>> (22 && -0)), ...[ (c = 1 + c, 
                    (b_2 && (b_2.Infinity %= 2 >> "foo")) << (null === 0) > ((undefined || NaN) & (false | 5))), (c = 1 + c, 
                    yield += (null && 25) + (22 << []) - (arguments && (arguments[c = 1 + c, +(this * "function" >>> (b_2 >>>= -4 >> true))] >>>= "undefined" || 25), 
                    5 << false)), (c = 1 + c, (a_2_2 && (a_2_2[[ (c = 1 + c, void ((-4 ^ 25) === "number" / 0)), (c = 1 + c, 
                    -1 + "bar" <= ("number" == -2) === this << Infinity < "bar" >>> "object") ][c = 1 + c, 
                    (-4 && [ , 0 ].length === 2) >> false % 3 & ("a", {}) != (false & "number")]] = (-2 >>> false) / (-0, 
                    "number"))) >= (0 >>> "a") - "number" * [ , 0 ][1]), (c = 1 + c, (c = c + 1, 4 ^ "function") <= (4 ^ "number") >> void 5), (c = 1 + c, 
                    (22 >> 24..toString()) * (a_2 && ({
                        c: a_2[c = 1 + c, (4 ^ 22) * (38..toString() ^ 5) | (b_2 && (b_2[a++ + (b = a)] = false === {} == (23..toString() ^ "number")))]
                    } = {
                        c: -2 + 2
                    })) < ((a = ([ , 0 ].length === 2) % -4) < [ , 0 ][1] / "a")) ] ])):
                    break;
                }
            }
            break;
        }
        break;

      case (c = c + 1) + (--b + ("" in [ (c = c + 1) + {}, (c = c + 1) + {
            length: a++ + {
                undefined: typeof f5 == "function" && --_calls_ >= 0 && f5("b", (c = 1 + c, (1 == [ , 0 ][1]) << 0 % 25 & (-1 & "a") / (23..toString() % 1))),
                get: --b + [].get,
                b_2: b_2
            }.in,
            ...a_2
        }, --b + {
            undefined: b += a,
            undefined: function yield_1() {
                {
                    return c = 1 + c, ("c" / "b" != 3 << -1) > (-2 == [ , 0 ][1]) + ("number" || 2);
                }
            },
            b: a++ + (a_2 = --b + (let_2 /= "a" in [ ..."" + a_2, (c = 1 + c, (let_2 && ({
                static: let_2.var
            } = {
                static: (-2 ^ 24..toString()) % (undefined << 2)
            })) >>> ((23..toString() != -3) >> (24..toString() | 5))), (c = 1 + c, a && ([ a[yield] ] = [ (24..toString() / -5 & null * 22) === ([ , 0 ][1] != "number") <= ([], 
            "") ])) ])),
            length: (c = c + 1) + (a_2 *= typeof (NaN in [ (c = 1 + c, (23..toString() * -4 && -5 != 25) >>> (true !== {} | 1 >> -4)), (c = 1 + c, 
            (NaN < false || 38..toString() == "object") >> (Infinity == 0) * (25 >> "b")), (c = 1 + c, 
            (async && (async[((c = 1 + c, ~!-3 == (NaN * "a" ^ (c = c + 1, 0))) || a || 3).toString()] = (-5 & -1) < ("foo" != []))) / ((true && -2) < "number" >> 22)), (c = 1 + c, 
            let_2 *= -4 << 3 != [ , 0 ][1] << {} != (c = c + 1, c = c + 1, false)), (c = 1 + c, 
            "bar" * 24..toString() >> (5 == 4) && (a && (a.next = (undefined == Infinity) << 24..toString() / this))) ]))
        } ])):
      case a++ + [].get:
        {
            var brake115 = 5;
            while (/[abc4]/g.exec((typeof f4 == "function" && --_calls_ >= 0 && f4(-4, "b") || b || 5).toString()) && --brake115 > 0) {
                var a_1 = a++ + ~a, a = "object" in {
                    undefined: typeof let_2 == "function" && --_calls_ >= 0 && let_2``
                };
            }
        }
        for (var brake117 = 5; typeof a_2 == "function" && --_calls_ >= 0 && a_2({}, null) && brake117 > 0; --brake117) {
            var brake118 = 5;
            L15446: do {
                var a;
            } while (delete ((yield && (yield[--b + function() {
            }] = (true <= 24..toString()) >>> (a_1 = 3 << 5))) >> (4 + "object" > (38..toString() <= 38..toString()))) && --brake118 > 0);
        }
        break;
    }
}

export var c_1 = f0();

console.log(null, a, b, c, Infinity, NaN, undefined);
```
```js
// uglified code
// (beautified)
var _calls_ = 10, a = 100, b = 10, c = 0;

async function f0(b_2, async) {
    for (var brake1 = 5; a++ + [] && 0 < --brake1; ) {
        a++ + [] || (c += 1);
    }
    switch ((c += 1) + b_2) {
      default:
        var a_2 = function() {
            switch (c = 1 + c, b_2 && (b_2[c = 1 + c, c += 1, !1 >>> !0 * (b_2 && (b_2[c = 1 + c, 
            (/[a2][^e]+$/ | 24..toString() || !1) | (2 === [ , 0 ].length === 3) < -5] >>>= 0))] = 0 == {}), 
            b_2 = 0 / 0, c = 1 + (c = 1 + c), (-1 == this) <= (2 | {}) && (c += 1), c = 1 + c, 
            a++ + void (async && (async[(a++ + (c = 1 + c, (1 == ("foo" ^ {}) ^ (c += 1, "a" != NaN) || 8).toString()[c = 1 + c, 
            (async && (async[(c += 1) + (b_2 && "function" == typeof b_2.static && 0 <= --_calls_ && b_2.static())] += -2 / (23..toString() <= (2 === [ , 0 ].length)))) + (null !== 24..toString() ^ (b_2 && ({
                next: b_2.in
            } = {
                next: "bar"
            })))]) || a || 3).toString()] = (5 & []) <= ("bar" !== this) ^ -1 << -3))) {
              case b++:
                var a_1 = (c = 1 + c, void 23..toString());
                return {}[c = 1 + c, ("" <= this || 0) !== (async && (async.c = {} - this <= this >> "foo"))];

              case void 0:
                var arguments_2 = void (c = 1 + c);
                break;

              case ((--b + {} || 8).toString()["function" == typeof f4 && 0 <= --_calls_ && f4(-2)] || a || 3).toString():
                switch ((c += 1) + void 0) {
                  case c = 1 + c, 23..toString(), typeof (!1 >> (0 >> void 23..toString())):
                    c = 1 + c, arguments_2 >>= (a_1 && ({
                        set: a_1[c = 1 + c, [] <= NaN | (c += 1, "undefined") && !1 <= ("foo" & 24..toString())]
                    } = {
                        set: !1
                    })) <= !0, b_2 = 38..toString() + !0 ^ !1, c = 1 + c, 23..toString();
                    break;

                  case --b + ("function" == typeof async && 0 <= --_calls_ && async()):
                    c = 1 + c;
                    break;

                  case (c += 1) + (23..toString(), 23..toString(), !0):
                    break;

                  case /[abc4]/g.exec((c = 1 + c, ((async && ([ async[c = 1 + c, (0 != (-1 != NaN)) / ((2 === [ , 0 ].length) + "foo" > ("number" != 24..toString()))] ] = [ this ])) >= (async && ([ async.then ] = [ 0 ])) & -1 || b || 5).toString())):
                    c = 1 + c, c += 1, a_1 && ([ a_1[c = 1 + c, arguments_2 = (/[a2][^e]+$/ != this) + (void 0 + this) <= !1] ] = [ !0 ]), 
                    c = 1 + c, arguments_2 && (arguments_2.undefined = 0 / 0 / (("number" & this) < 1));
                }
                c += 1;
                break;

              case typeof /[abc4]/g.exec((b_2 && b_2.a || b || 5).toString()):
                for (var key24 in a++ + b++) {
                    for (var brake25 = 5; c = 1 + c, !1 <= ("bar" !== []) + (4 !== 24..toString()) && 0 < --brake25; ) {
                        c = 1 + c, a_1 && ([ a_1[(c += 1) + ("function" == typeof arguments_2 && 0 <= --_calls_ && arguments_2((c = 1 + c, 
                        (23..toString() || "foo") <= 0), (c = 1 + c, key24 && (key24.NaN += (c += 1, -4 | (key24 && (key24[c = 1 + c, 
                        !((NaN >>> 22) % "-5")] += this % "")) / 0))), 2 === [ , 0 ].length))] ] = [ 1 == (a_1 = (arguments_2 && (arguments_2.NaN = 0)) - !1) ]);
                    }
                }
            }
        }();
        try {
            switch (--b + ++b) {
              case --b + ((async && (async[async] = (c += 1, "bar" != 23..toString() < "object"))) == ("undefined" >> 24..toString()) % ("b" === {})):
              case [ (c += 1) + (a++ + (0 <= --_calls_ && f2("undefined")) || a || 3).toString() ]["function" == typeof async && 0 <= --_calls_ && async()]:
                break;

              case (c += 1) + (38..toString() in {
                    [async && "function" == typeof async.var && 0 <= --_calls_ && async.var(0, -4, -1)]: a++ + [ b, , 5 % (!1 ^ (c += 1, 
                    1)) ].done
                }):
                c += 1;
                break;

              case --b + a:
                var let_2 = --b + (let_2 = --b + ((!1 === 23..toString() << !1) <= (0 & "c" / 38..toString()))), a_2 = (c += 1) + ((c += 1) + a++ || 5).toString()[await a--];
            }
        } catch (async) {
            try {
                var brake33 = 5;
                do {
                    c = 1 + c, 23..toString();
                } while ("function" == typeof async && 0 <= --_calls_ && async(1, 3, (c = 1 + c, 
                0 << (0 <= {}) - ({} === (2 === [ , 0 ].length)))) && 0 < --brake33);
                --b;
                for (var brake36 = 5; a++ && 0 < brake36; --brake36) {}
                c = 1 + c, a_2 += "bar" < 38..toString(), a_2 && (a_2[c = 1 + c, b_2 && (b_2[-5] = 25 ^ 38..toString() | 0 / 0) || !0] += "2a"), 
                c = 1 + c, 0 ^ 24..toString() ^ !1 && b_2 && (b_2[c = 1 + c, async && (async.async = 0)] = void 0);
            } finally {
                return -1;
            }
            var brake50 = 5;
            do {} while (--b + [ ..."" + async, (c += 1) + ("function" == typeof b_2 && 0 <= --_calls_ && b_2()), 1 / 0 ][(c += 1) + [ (c = 1 + c, 
            (/[a2][^e]+$/ + -1 >> (async && (async.NaN = !0))) - (!1 & (-5 | {}))), (c = 1 + c, 
            ((async && (async.async = [] - "c")) <= (a_2 && (a_2[c = 1 + c, (38..toString() + "function" || !0) << (!0 !== (async && (async.foo = 23..toString() >> "")))] = (2 === [ , 0 ].length) - null))) + (5 ^ this) / (-2 ^ 23..toString())), (c = 1 + c, 
            23..toString() >>> [] && "foo" == []) ][-1 in [ -1 - -("c" === []), (c = 1 + (c = 1 + c), 
            c += 1, 38..toString() == (c += 1, !0) == (0 ^ (async && (async[c = 1 + c, 5.5 + (-1 !== this) + (-0 ^ (c += 1, 
            23..toString()))] += -5)))), (c = 1 + c, async && (async.foo = "foo220" != (38..toString() <= 2 && 0 / 0))) ]]] || function*() {
                c = 1 + c, async && (async.foo += 1 / 0), c = 1 + c, b_2 && (b_2[c = 1 + c, a_2 >>>= (0 / 0 ^ {} - void 0) <= (c += 1, 
                [] >> "")] /= -1.5), b_2 = 0 / 0;
            }((c = 1 + c, async && (async["function" == typeof async && 0 <= --_calls_ && async()] %= !0), 
            c = 1 + c, c = 1 + (c += 1))).next(), b && 0 < --brake50);
        } finally {
            try {
                var key57, expr57 = a++ + b;
                for (key57 in expr57) {
                    c = 1 + c;
                }
            } catch (a_2_2) {
                c += 1, a--, a++, --b;
            } finally {
                var NaN = function(arguments_1, a) {
                    const a_2 = a++ + ("function" == typeof async && 0 <= --_calls_ && async(22, 25));
                    let arguments = 23..toString() > (a_2 && ([ a_2.static ] = [ -3 ])) & (b_2 && (b_2.b = -1 / 0 > 24..toString() + "foo"));
                    c = 1 + c, 23..toString(), 23..toString(), c = 1 + c, a = 0 / 0;
                }(/[a2][^e]+$/, 24..toString());
            }
            c += 1, let_2 = --b + ("undefined" != typeof alias0 && alias0), --b;
        }

      case async && "function" == typeof async.NaN && 0 <= --_calls_ && async.NaN():
        switch ([ a++ + ("function" == typeof f7 && 0 <= --_calls_ && f7(--b + a, 25)), (c += 1) + [ ..."" + let_2, a++ + a, --b + {
            0: (c = 1 + c, (0 / 0 & (async && (async[c = 1 + c, ({} + 38..toString() <= 0) + +(38..toString() + 5)] += -4 < 38..toString()))) >= (4 != NaN && !1))
        } ].b, a++ + ("c" in []) ].done) {
          case ~(!1 < ((2 === [ , 0 ].length) * 23..toString() == "foo")):
            for (var brake67 = 5; c += 1, -2 * (c += 1, 23..toString()) && 0 < --brake67; ) {
                continue;
            }
            switch (!a) {
              default:
                if (--b + new function(a_2_2) {
                    this.done /= 0, c = 1 + c, "a" - this && a_2 && ([ a_2.next ] = [ 23..toString() >> "" || !1 ]);
                }()) {
                    for (var brake72 = 5; a_2 && a_2[c = 1 + c, (!1 != 24..toString() <= 38..toString()) << !0] && 0 < --brake72; ) {
                        c = 1 + (c = 1 + c), async && (async[a++ + ("undefined" != typeof a_2_1)] = !0), 
                        c += 1, 23..toString();
                    }
                }

              case --b + [ (38..toString(), +(!0 <= (c += 1, !0 !== this))), b + 1 - .1 - .1 - .1, --b - 1, a++ + ((c += 1) + 0 || 0).toString()[--b + 1 / 0] ][(c += 1) + (--b + ((0 == (c += 1, 
                1)) < ((2 === [ , 0 ].length) <= -0) - !1 ? --b + new function(a_2, arguments_2, NaN_2) {
                    this[c = 1 + c, 0 << (23..toString() / "bar" & 22 * 24..toString())] += 22 >> [], 
                    this.async += {} < -3;
                }() : --b + 0 / 0) ? +("" + (c += 1, 25) === 0 / 0) : "function" == typeof f4 && 0 <= --_calls_ && f4`${c = 1 + c, 
                (a_2 += (void 0 >> this) / (0 / 0)) <= 0}${c = 1 + c, -703}${c = 1 + c, (24..toString() < /[a2][^e]+$/ ^ 25) == 38..toString() - 3 >> !1}$${c = 1 + c, 
                0 == (/[a2][^e]+$/ ^ []) != ("b" == 23..toString() || let_2 && (let_2.undefined &= "bar" == 38..toString()))}${c = 1 + c, 
                ("foo" | 38..toString()) <= !0 < 0 / 0}`)]:
              case a++ + [ (c += 1) + [ {} - "b" < !1, (c = 1 + (c = 1 + c), (24..toString() < -0) * ("undefined" < this) >>> (1 - 23..toString() ^ 24..toString() <= "number")), (c = 1 + c, 
                !0) ]["function" == typeof f6 && 0 <= --_calls_ && f6("undefined", (c = 1 + c, (!0 == "" < this) * (0 <= [] >> (2 === [ , 0 ].length))))], (let_2 ^= 22 == (5 ^ NaN)) || -1, --b + (b_2 && b_2.length), (c += 1) + (let_2 >>= --b + delete a), --b + let_2 ][a++ + (4 in [])]:
              case void 0:
            }

          default:
            return --b - a;

          case [ let_2 && let_2[(c += 1) + /[abc4]/.test(((c += 1) + /[abc4]/g.exec(((c += 1) + void 0 || b || 5).toString()) || b || 5).toString())], a++ + (2 in [ b_2 && b_2[--b], --b + [ (c = 1 + c, 
            ("b" ^ (a_2 += !0)) < (c += 1, c += 1, 38..toString())), (c = 1 + c, (b_2 && (b_2[++a] = 1 >>> 38..toString() || {} <= "function")) <= (/[a2][^e]+$/ << {}) - 0 / 0), (c = 1 + c, 
            (!1 <= (24..toString() || "bar")) - (0 / 0 >>> /[a2][^e]+$/ % this)), 0, (c = 1 + (c = 1 + c), 
            async && (async.get = !0), !1), void 0, (c = 1 + c, ((2 === [ , 0 ].length) >>> 4 ^ (25 | 38..toString())) + ((a_2 && (a_2.value = 0)) === 0 / 0)), (c = 1 + c, 
            0) ].next, 1 / 0 in {}, --b + --b ]) ].var:
            b_2 = await (b_2 && "function" == typeof b_2.null && 0 <= --_calls_ && b_2.null`${--b + delete a}${(c += 1) + b}${a++ + b--}}$tmpl${{}.NaN}`);
            break;

          case --b + [][a++ + (2 in {
                b: /[abc4]/g.exec((--b + (a_2 && "function" == typeof a_2.c && 0 <= --_calls_ && a_2.c(!1, [])) || b || 5).toString()),
                in: -((!1 | (c += 1, 4)) - (-3 & 38..toString() & -1)),
                async: (c += 1) + +(!1 & (a_2 >>= 1 & (b_2 && ([ b_2[c = 1 + c, (async = !1) < !1] ] = [ -4 ])))),
                static: a++ + ~(-2 | (a_2 && (a_2.next = "a")) && 1)
            })]:
            switch (a++ + []) {
              case a:
                c = 1 + c, 23..toString(), 2 - (null ^ [] + this) ? c = 1 + c : (c = 1 + c, b_2 && (b_2[c = 1 + c, 
                0 != (2 === [ , 0 ].length != !0) & !0] /= 0));
                c = 1 + (c = 1 + (c = 1 + (c += 1))), let_2 += 0 / 0;
                break;

              case (c += 1) + ("function" == typeof f2 && 0 <= --_calls_ && f2()):
                break;

              case b += a:
                var yield = (c += 1) + (a = --b + (a && a.c)), a = a++ + a++;
            }
            try {
                for (var brake92 = 5; -((23..toString() >= this && 0 / 0) <= 0 / 0) && 0 < brake92; --brake92) {
                    c = 1 + c, 24..toString();
                    for (var brake99 = 5; (b += a) && 0 < --brake99; ) {
                        c = 1 + c;
                    }
                }
            } finally {
                if ((c += 1) + ((yield && (yield[--b + b--] = !1 % (b_2 && (b_2.foo = {} >= 23..toString())))) | (24..toString() && 2 === [ , 0 ].length) >>> (yield && (yield.c += !1)))) {
                    switch (a++ + (3 in {
                        ...async,
                        c: (c = 1 + c, (38..toString() < 25 | "object" ^ NaN) >>> !0)
                    })) {
                      default:
                        c = 1 + c, a_2 && (a_2["function" == typeof f5 && 0 <= --_calls_ && f5()] = (NaN - 22 | -5) >>> 0 / 0);

                      case -3:
                        c = 1 + (c = 1 + c), async && (async[--b + (b_2 && "function" == typeof b_2.b && 0 <= --_calls_ && b_2.b("undefined", 23..toString()))] = !1 - (("a" << NaN) - 6));
                        break;

                      case --b + (b_2 && (b_2.get = (this % "" && -1 & this) >> !1)):
                        break;

                      case (c += 1) + (b = a):
                        c = 1 + c, 38..toString();
                    }
                }
                switch ({
                    "": (c = 1 + c, 0 == (4 & 2 === [ , 0 ].length) & (c += 1, !1))
                }) {
                  case c += 1, b_2 && (b_2[a++ + ("function" == typeof f4 && 0 <= --_calls_ && f4(22))] += 1 / 0), 
                    !0:
                    var arguments = (c = 1 + c, c += 1, (NaN && 2 === [ , 0 ].length) == "a" * {}), a_2_2 = (c = 1 + c, 
                    (("object" ^ 38..toString()) & 24..toString() >> 25) * ((b_2 && (b_2.then = {})) != 0 / 0));
                    try {
                        c = 1 + c, yield = !1;
                    } catch (b_2) {}
                    break;

                  case a++ + ("function" != typeof NaN):
                    break;

                  case --b + {
                        ...a_2,
                        "": (c = 1 + c, a_2 && (a_2[--b + ("function" == typeof f4 && 0 <= --_calls_ && f4())] = 4 * ("c" << (2 === [ , 0 ].length) >>> ("undefined" & 24..toString()))))
                    }.value:
                    for (var brake112 = 5; c = 1 + c, c += 1, (23..toString() == ("bar" !== {})) >>> 5 && 0 < brake112; --brake112) {
                        c = 1 + c, let_2 && (let_2.get >>>= (NaN << /[a2][^e]+$/) % (1 << -5) != (0 / 0 ^ "number" !== this));
                    }
                    break;

                  case (c += 1) + (a++ + (this in [ (c = 1 + c, -0 % (-6 ^ [] + 3)), (c = 1 + (c += 1), 
                    80 - !0 !== (0 / 0 === NaN)), (c = 1 + (c += 1), 24..toString(), 1 / this >>> -0), (c = 1 + c, 
                    (b_2 && (b_2.Infinity %= 2)) << !1 > (5 & NaN)), (c = 1 + c, yield += null + (22 << []) - (arguments && (arguments[c = 1 + c, 
                    +("function" * this >>> (b_2 >>>= -2))] >>>= "undefined"), 5)), (c = 1 + c, (a_2_2 && (a_2_2[[ void (c = 1 + c), !1 == this << 1 / 0 < 0 ][c = 1 + (c = 1 + c), 
                    (2 === [ , 0 ].length) >> 0 & 0 != {}]] = 0 / 0)) >= 0 / 0), (c = 1 + c, !0), (c = 1 + (c += 1), 
                    (22 >> 24..toString()) * (a_2 && ({
                        c: a_2[c = 1 + c, 18 * (5 ^ 38..toString()) | (b_2 && (b_2[a++ + (b = a)] = !1 === {} == ("number" ^ 23..toString())))]
                    } = {
                        c: 0
                    })) < ((a = (2 === [ , 0 ].length) % -4) < 0 / 0)) ])):
                }
            }
        }
        break;

      case (c += 1) + (--b + ("" in [ (c += 1) + {}, (c += 1) + {
            length: a++ + {
                undefined: "function" == typeof f5 && 0 <= --_calls_ && f5("b", (c = 1 + c, 0 & 0 / (23..toString() % 1))),
                get: --b + [].get,
                b_2: b_2
            }.in,
            ...a_2
        }, --b + {
            undefined: (b += a, function() {
                return c = 1 + c, !1;
            }),
            b: a++ + (a_2 = --b + (let_2 /= "a" in [ ..."" + a_2, (c = 1 + c, (let_2 && ({
                static: let_2.var
            } = {
                static: (-2 ^ 24..toString()) % 0
            })) >>> ((-3 != 23..toString()) >> (5 | 24..toString()))), (c = 1 + c, a && ([ a[yield] ] = [ !1 === (24..toString() / -5 & 0) ])) ])),
            length: (c += 1) + (a_2 *= typeof (NaN in [ (c = 1 + c, (-4 * 23..toString() && !0) >>> (!0 !== {} | 0)), (c = 1 + c, 
            (NaN < !1 || "object" == 38..toString()) >> 0), (c = 1 + c, (async && (async[c = 1 + c, 
            (-1 == ("a" * NaN ^ (c += 1, 0)) || a || 3).toString()] = -5 < ("foo" != []))) / !0), (c = 1 + c, 
            let_2 *= -32 != 0 << {} != (c += 1, !1)), (c = 1 + (c += 1), "bar" * 24..toString() >> !1 && a && (a.next = !1 << 24..toString() / this)) ]))
        } ])):
      case a++ + [].get:
        for (var brake115 = 5; /[abc4]/g.exec(("function" == typeof f4 && 0 <= --_calls_ && f4(-4, "b") || b || 5).toString()) && 0 < --brake115; ) {
            a++;
            a = "object" in {
                undefined: "function" == typeof let_2 && 0 <= --_calls_ && let_2``
            };
        }
        for (var brake117 = 5; "function" == typeof a_2 && 0 <= --_calls_ && a_2({}, null) && 0 < brake117; --brake117) {
            var brake118 = 5;
            do {} while (yield && (yield[--b + function() {}] = (!0 <= 24..toString()) >>> 96), 
            38..toString(), 38..toString(), 0 < --brake118);
        }
    }
}

var c_1 = f0();

console.log(null, a, b, c, 1 / 0, NaN, void 0);

export {
    c_1
};
```
```
original result:
null 100 NaN 23 Infinity NaN undefined

uglified result:
null 100 NaN 26 Infinity NaN undefined
```
```js
// reduced test case (output will differ)

// (beautified)
async function f0() {
    try {
        0();
    } catch (async) {
        return await 0;
    } finally {
        console.log();
    }
}

export var c_1 = f0();

console.log(undefined);
// output: undefined
// 
// 
// minify: 
// undefined
// 
// options: {
//   "mangle": false,
//   "output": {
//     "v8": true
//   },
//   "validate": true
// }
```
```
minify(options):
{
  "mangle": false,
  "output": {
    "v8": true
  }
}

Suspicious compress options:
  awaits
  side_effects
```


Discussion:

Patch:
diff --git a/lib/compress.js b/lib/compress.js
index 225fc744303..d68a045e8ba 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -10334,7 +10334,7 @@ merge(Compressor.prototype, {
                     do {
                         node = parent;
                         parent = compressor.parent(level++);
-                        if (parent instanceof AST_Try && member(node, parent.body)) {
+                        if (parent instanceof AST_Try && (parent.bfinally || parent.bcatch) !== node) {
                             drop = false;
                             break;
                         }


Test patch:
diff --git a/test/compress/awaits.js b/test/compress/awaits.js
index a3b55b12552..466abc3e6c8 100644
--- a/test/compress/awaits.js
+++ b/test/compress/awaits.js
@@ -2143,3 +2143,72 @@ issue_5157_promise: {
     expect_stdout: "PASS"
     node_version: ">=8"
 }
+
+issue_5159_1: {
+    options = {
+        awaits: true,
+        side_effects: true,
+    }
+    input: {
+        (async function() {
+            try {
+                throw "foo";
+            } catch (e) {
+                return await "bar";
+            } finally {
+                console.log("baz");
+            }
+        })().catch(console.log).then(console.log);
+        console.log("moo");
+    }
+    expect: {
+        (async function() {
+            try {
+                throw "foo";
+            } catch (e) {
+                return await "bar";
+            } finally {
+                console.log("baz");
+            }
+        })().catch(console.log).then(console.log);
+        console.log("moo");
+    }
+    expect_stdout: [
+        "moo",
+        "baz",
+        "bar",
+    ]
+    node_version: ">=8"
+}
+
+issue_5159_2: {
+    options = {
+        awaits: true,
+        side_effects: true,
+    }
+    input: {
+        (async function() {
+            try {
+                throw "foo";
+            } catch (e) {
+                return await "bar";
+            }
+        })().catch(console.log).then(console.log);
+        console.log("baz");
+    }
+    expect: {
+        (async function() {
+            try {
+                throw "foo";
+            } catch (e) {
+                return "bar";
+            }
+        })().catch(console.log).then(console.log);
+        console.log("baz");
+    }
+    expect_stdout: [
+        "baz",
+        "bar",
+    ]
+    node_version: ">=8"
+}