Repository: mishoo/UglifyJS (JavaScript)

Issue:
ufuzz failure
```js
// original code
// (beautified)
var _calls_ = 10, a = 100, b = 10, c = 0;

function f0() {
    function f1(Math_2, bar_1, b) {
        return {
            length: (c = 1 + c, (("function" & "b") << (b && ([ b.null ] = [ true && true ]))) % (25 & -2 ^ ({} && -2))),
            "": (c = 1 + c, ~(24..toString() % true) === (/[a2][^e]+$/ && "bar") % ("b" >= 38..toString())),
            c: (c = 1 + c, ~("b" > /[a2][^e]+$/) - (-Infinity == -4 > "b"))
        } ? typeof f2 == "function" && --_calls_ >= 0 && f2() : Math_2;
        switch (a++) {
          case b++:
            c = c + 1;
            {
                var brake4 = 5;
                L52715: do {
                    var b = (c = 1 + c, ((5 ^ null) & 3 << []) >>> (c = c + 1, "number" === "a"));
                } while ((c = 1 + c, bar_1 && (bar_1.var = delete (Math_2 && (Math_2[c = 1 + c, 
                (c = c + 1, 2) >> void "undefined" & (b && (b[a++ + (typeof bar_1 == "function" && --_calls_ >= 0 && bar_1())] <<= ("c" && [ , 0 ].length === 2) % delete [ , 0 ][1]))] += 22 >= "")) << (c = c + 1, 
                delete "a"))) && --brake4 > 0);
            }
            break;

          case b = {}:
            try {
                c = c + 1;
            } catch (b_2) {
                c = 1 + c, (c = c + 1, "function", "undefined") * ((Infinity & "function") >> (22 != []));
                c = 1 + c, b && (b.c *= b && (b[c = 1 + c, (null >= 4) / ("bar" * 23..toString()) > ((-0 ^ -1) >= ([ , 0 ][1] === ([ , 0 ].length === 2)))] += null && 0) && (c = c + 1, 
                {})), b && (b[b_2 && b_2.c] = (-5 | 3) >> null + /[a2][^e]+$/);
            } finally {
                c = 1 + c, b %= ("number" >= "function") >> (4 !== 2) != 22 * ([ , 0 ].length === 2) <= ("c" & "bar");
                c = 1 + c, (bar_1 && (bar_1.a += "function" == 22)) != 1 >> "undefined", 23..toString() > "b" === (Math_2 && (Math_2[c = 1 + c, 
                b += (bar_1 && (bar_1.undefined = "" != -2 | (Math_2 /= "bar" / []))) - (1 * 0 && null >= Infinity)] += 2 >= null));
            }
            switch (void function() {
            }()) {
              case --b + a++:
                c = 1 + c, b && (b[a++ + b] = (b && (b[c = 1 + c, Math_2 && (Math_2[a++ + /[abc4]/.test((false in [ (c = 1 + c, 
                b && (b[typeof f1 == "function" && --_calls_ >= 0 && f1((c = 1 + c, (0 === "number" && ("undefined" && undefined)) ^ (b && ({
                    "\t": b[true]
                } = {
                    "\t": (b /= 4 !== "") & {} == null
                }))), 3, "bar")] = (Math_2 && (Math_2.NaN *= /[a2][^e]+$/ ^ 24..toString() ^ -4 - 23..toString())) - ((-5 >>> {}) - (38..toString() >= -2)))) ] || b || 5).toString())] -= (b && (b[{}] = !"function" === (this ^ -2))) % ((b += 25 < 1) ^ "undefined" >>> 23..toString()))] <<= -1 != "foo")) - (24..toString() <= -2) << (b = void 1 !== (NaN ^ "undefined")));
                c = 1 + c, (([ , 0 ].length === 2, [ , 0 ][1]) < ("function" != [ , 0 ][1])) >>> delete 38..toString() + (24..toString() > -3);
                break;

              case {
                    a: (c = 1 + c, -(-5 > NaN) ^ (c = c + 1, 0) - (c = c + 1, true)),
                    var: (c = 1 + c, b += (("object", -5) >= (undefined & 3)) / (0 + 38..toString() == ("undefined" | -3))),
                    ...b,
                    [(c = 1 + c, (5 - 5 !== (-5 === true)) > ({} ^ undefined) >> (2 << null))]: (c = 1 + c, 
                    25 - 25 && 1 & -5 || "object" === 22 == (22 ^ "a")),
                    b: b
                }:
                c = 1 + c, (c = c + 1, -1) != "b" << this !== null < "b" < "function" << "bar";
                c = 1 + c, (25 == null ^ /[a2][^e]+$/ >> 0) != (-3 === "c" || 4 > "foo");

              case /[abc4]/g.exec(((c = 1 + c, (Infinity === 24..toString()) - (2 << 38..toString()) >= (3 >> {} == (Math_2 && (Math_2[c = 1 + c, 
                (("function" && "undefined") !== (23..toString() && "a")) << (-4 % 38..toString() > Infinity << "b")] |= -0 <= -2)))) || b || 5).toString()):
                c = 1 + c, ("c", 4) % ("function" !== null) != 22 % 0 * (bar_1 && (bar_1[c = 1 + c, 
                (-1 && 0) >>> (c = c + 1, /[a2][^e]+$/) === (4 <= undefined & /[a2][^e]+$/ / "a")] *= -4 !== [ , 0 ][1]));
                break;

              default:
                c = 1 + c, (b += ("bar" ^ "a") % ("c" * 22)) & "b" << 0 <= ~{};
            }
            break;

          case --b + -(((-3 ^ [ , 0 ][1]) != false <= "foo") < (-0 > "undefined" == -5 >= false)):
            break;

          case --b + ((-5 <= "foo") % ([ , 0 ][1] << 4) ^ ([ , 0 ].length === 2) <= "function" <= ("b" === true) || a || 3).toString():
            break;
        }
    }
    var foo = f1();
    function f2(arguments_1) {
        {
            var async_2 = function undefined(Infinity_1) {
                {
                    var brake21 = 5;
                    L52716: do {
                        c = 1 + c, +(-2 != "bar") | (22 ^ null) !== (arguments_1 = "foo" % []);
                    } while ((c = 1 + c, (c = c + 1, foo = -0 * 0) + (c = c + 1, Infinity_1 && (Infinity_1.foo += this ^ "function"))) && --brake21 > 0);
                }
                {
                }
            }(--b + (c = c + 1, arguments_1 && (arguments_1[(c = c + 1) + (arguments_1 && typeof arguments_1.Infinity == "function" && --_calls_ >= 0 && arguments_1.Infinity({}, 3, (c = 1 + c, 
            (async_2 && (async_2.foo = [ , 0 ].length === 2 === 4 ^ 1 >>> [ , 0 ][1])) >= ((true !== "undefined") < ("object" || this)))))] = (false | "foo") == NaN << undefined)), undefined);
        }
    }
    function f3() {
        function f4(Math_2) {
            async function f5(b_2 = (c = 1 + c, /[a2][^e]+$/ >= Infinity != "bar" + -5 === ((Math_2 && (Math_2[c = 1 + c, 
            (true | {}) < (Math_2 && (Math_2.NaN = {} >>> -4)), foo && ([ foo[a++ + --b] ] = [ 23..toString() > "number" != (Math_2 && (Math_2[c = 1 + c, 
            "foo" == "function" === ("foo" || undefined) === 2 <= "object" > ("" ^ undefined)] += "c" >> "bar")) ])] = "a" ^ "number")) === 24..toString() >> ([ , 0 ].length === 2)))) {
            }
            var bar_1 = f5((c = 1 + c, ("" === "function") < (NaN ^ "number") || foo && (foo.a += (-1 | /[a2][^e]+$/) >= -2 / -2)), (c = 1 + c, 
            ((true > true) >> (-1 || true)) * void (Math_2 && (Math_2.b = false ^ 5))));
            function f6(b_1, c_1) {
            }
            var Infinity = f6((c = 1 + c, ("object" || null) * ("" | 2) - (("number" | "function") & !NaN)), (c = 1 + c, 
            (null < undefined ^ NaN % -0) & (38..toString() === "object") % (Infinity & "b")));
            function f7() {
            }
            var await = f7((c = 1 + c, (-1 >= "object" ^ 0 >>> -1) + (Infinity && (Infinity[(c = c + 1) + typeof (c = 1 + c, 
            (2 * 38..toString() > -2 >> {}) << (("function" === this) >> (true > {})))] *= [] ^ [ , 0 ].length === 2 | (foo && (foo.NaN = 22 > 5))))));
            function f8(foo_2, bar_1) {
            }
            var Infinity_2 = f8((c = 1 + c, (foo && ([ foo.in ] = [ [ , 0 ].length === 2 ^ -0 ])) > (await && (await.c += 38..toString() / 5)) ^ (c = c + 1, 
            3) % (foo *= "object" === 22)), "", (c = 1 + c, (-2 >>> []) / (NaN >> 22) > (3 ^ "foo") % (false | /[a2][^e]+$/)));
            function f9(foo) {
            }
            var foo_2 = f9(5, undefined, /[a2][^e]+$/);
        }
        var c_2 = f4(Infinity, null);
    }
    var a = f3(a++ + (0 === 1 ? a : b), "number", [ , 0 ].length === 2);
    function f10(foo_2) {
        switch (foo_2 && (foo_2[0 === 1 ? a : b] += (+2 < Infinity >> {}) / ((this != -0) + (25 & null)))) {
          case a++ + a++:
            try {
                {
                    var expr26 = (c = 1 + c, ([ , 0 ].length === 2 !== 23..toString() & Infinity - this) > ((foo &= "" != 3) === ("undefined" != "number")));
                    L52717: for (foo in expr26) {
                        c = 1 + c;
                        var foo = expr26[foo];
                        c = 1 + c, ((24..toString() & "function") == ([] != undefined)) - ((NaN ^ "a") <= (foo && (foo.a = 23..toString() !== -2)));
                    }
                }
            } finally {
                c = 1 + c, ((38..toString() ^ false) === (foo && (foo.c = 4 + this))) << ((undefined == "c") < (-5 ^ "foo"));
                c = 1 + c, foo && (foo.a ^= null / [ , 0 ][1] ^ ([ , 0 ].length === 2, "undefined")) && (foo_2 = 0 === this) * (25 === null);
            }
            break;

          case (c = c + 1) + (foo && foo[--b]):
            break;

          default:
            {}

          case !function await() {}():
            break;
        }
        {
            var expr31 = /[abc4]/.test((--b + (a && typeof a.length == "function" && --_calls_ >= 0 && a.length()) || b || 5).toString());
            L52718: for (var key31 in expr31) {
                c = 1 + c;
                var arguments_1 = expr31[key31];
                var foo_1 = --b + new function(bar_1, foo_1, NaN_1) {
                    this.undefined = (undefined <= 25) % (38..toString() > NaN);
                    this.foo = (-4 ^ /[a2][^e]+$/) * (-2 - -0);
                    c = 1 + c, foo && (foo[b = a] ^= (c = c + 1, "undefined" && null) != (22 != 1 ^ null === [ , 0 ][1]));
                    c = 1 + c, (5 === -1) - ("number" === "number") >= (25 <= 3 < ([] < "number"));
                    c = 1 + c, (4 !== 22) - ("foo" >>> "foo") ^ 5 >> 5 > (NaN_1 && (NaN_1[c = 1 + c, 
                    (23..toString() ^ 24..toString()) != (1 | -2) === null % NaN >= ("b" | 1)] += "function" != "object"));
                }((c = 1 + c, ([ , 0 ][1] !== 23..toString()) >> ~5 === /[a2][^e]+$/ >> 3 << ([ , 0 ].length === 2 ^ "a")));
            }
        }
    }
    var bar = f10("function", --b + foo);
    function f11(foo) {
        function f12(await_1) {
            {
                var expr38 = (c = 1 + c, (("b", -1) && (c = c + 1, 24..toString())) == (bar = "c" !== 22 === -4 <= undefined));
                L52719: for (bar in expr38) {
                    c = 1 + c, (-4 << "object" | ~this) ^ "c" + true >= (Infinity ^ {});
                }
            }
        }
        var Infinity_1 = f12(--b + (b = a), undefined, a && a.var);
        function f13(Math_2) {
            c = c + 1;
            for (var brake42 = 5; (c = 1 + c, foo && (foo.a = ("c" << [ , 0 ][1] <= ([] && "bar"), 
            -0 * this < [] - "c"))) && brake42 > 0; --brake42) {
                c = 1 + c, ((Math_2 && (Math_2[c = 1 + c, ((5 !== /[a2][^e]+$/) < (23..toString() > "foo")) << ((foo && (foo[c = 1 + c, 
                (-3 < -3) % ("foo" << -1) + (("number" <= Infinity) - -0 * 1)] /= "a" ^ 2)) >>> (this << 23..toString()))] = (NaN, 
                "a"))) | (foo && (foo[c = 1 + c, (foo && (foo.a += "object" == "number" | "undefined" ^ "number")) == ({} == false, 
                "a" && -1)] = -0 <= 23..toString()))) >> ((23..toString() !== undefined) >> (2 !== 2));
            }
        }
        var foo_2 = f13(new function(foo, b_1) {
            this.a = (24..toString() > 1) - (5 & []);
            this[--b + /[abc4]/.test(((c = 1 + c, c = c + 1, foo && (foo.Infinity = bar && (bar.foo += -3 * 3) && 1 * undefined)) || b || 5).toString())] = [ , 0 ].length === 2 !== null ^ true == 5;
        }());
        function f14(bar = 23..toString(), foo) {
            function f15(foo_1) {
            }
            var c_1 = f15("foo");
            function f16() {
            }
            var bar = f16(NaN, (c = 1 + c, (bar && (bar.undefined = 24..toString() == null && true * null)) % ((3 >> [ , 0 ][1]) + ("a" << "foo"))), (c = 1 + c, 
            (c = c + 1, -3 << 3) || [] <= this === "" >> "foo"));
            function f17(c_2, a_2, parseInt_1) {
            }
            var a_1 = f17((c = 1 + c, ("function" >= null & this << 38..toString()) >>> ("bar" - 4) % (null >> "")));
            function f18(b_2, a_1, Infinity_1_2) {
            }
            var Math_2 = f18((c = 1 + c, ("bar" > /[a2][^e]+$/ | -4 & this) > (22 === "" != (false && 0))), 25);
            function f19(undefined_2) {
            }
            var bar = f19(this);
        }
        var Infinity_1 = f14();
    }
    var a = f11("number", a++ + [ a++ + !a, --b + (bar && bar[--b + {
        3: (c = 1 + c, (NaN & "function") / (2 >>> null), (38..toString() || NaN) * (-1 || false))
    }[(c = c + 1) + (0 === 1 ? a : b)]]), void function() {
        {
        }
        c = c + 1;
    }(), --b + [ , 0 ][1], a++ + (a && typeof a.b == "function" && --_calls_ >= 0 && a.b(false, /[abc4]/g.exec(((c = 1 + c, 
    void ("b" ^ "bar", this / Infinity)) || b || 5).toString()), 23..toString())) ][[ foo && foo.var ? --b + delete ("foo" - undefined == {} > -0 && (bar = 1 >= -3) === 3 >>> 0) : +function() {
    }(), b += a, a++ ][((c = c + 1) + ([ (c = 1 + c, c = c + 1, +(25 << 2)) ] || a || 3).toString() || 2).toString()[a++ + [ (c = 1 + c, 
    (foo && (foo[(c = c + 1) + (a /= (c = 1 + c, ((null || "a") ^ "foo" === -2) >= (("foo" ^ 4) !== (5 === 25))))] = ("" ^ [ , 0 ][1]) - (null - "b"))) * (25 % "object" == {} << "function")), (c = 1 + c, 
    ([] > -2 != {} <= "bar") + ((22 || 23..toString()) << ([ , 0 ].length === 2) + ([ , 0 ].length === 2))), (c = 1 + c, 
    (/[a2][^e]+$/ < "undefined") >> (foo && (foo[c = 1 + c, (-0 | Infinity) * ("object" / this) | (bar && (bar.null = 2 << 22)) < - -5] ^= 1 || true)), 
    ("c" <= 2) / (c = c + 1, 24..toString())) ].b]]]);
}

console.log(null, a, b, c, Infinity, NaN, undefined);
```
```
// uglified code
// !!! beautify failed !!!
SyntaxError: Invalid use of await in function argument
    at JS_Parse_Error.get (eval at <anonymous> (D:\a\UglifyJS\UglifyJS\tools\node.js:18:1), <anonymous>:71:23)
    at writeln (D:\a\UglifyJS\UglifyJS\test\ufuzz\index.js:1545:57)
    at errorln (D:\a\UglifyJS\UglifyJS\test\ufuzz\index.js:1555:5)
    at try_beautify (D:\a\UglifyJS\UglifyJS\test\ufuzz\index.js:1562:9)
    at log (D:\a\UglifyJS\UglifyJS\test\ufuzz\index.js:1665:9)
    at D:\a\UglifyJS\UglifyJS\test\ufuzz\index.js:1874:80
    at Array.forEach (<anonymous>)
    at Object.<anonymous> (D:\a\UglifyJS\UglifyJS\test\ufuzz\index.js:1831:20)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Function.Module.runMain (module.js:694:10)
    at startup (bootstrap_node.js:204:16)
    at bootstrap_node.js:625:3
//
var _calls_=10,a=100,b=10,c=0;function f0(){var foo=function(b){return c=1+c,b&&([b.null]=[!0]),c=1+c,24..toString(),38..toString(),c=1+c,0<=--_calls_&&f2()}();function f2(arguments_1){var async_2=function(Infinity_1){for(var brake21=5;c=1+c,arguments_1="foo"%[],c=1+c,c+=1,(foo=-0)+(c+=1,Infinity_1&&(Infinity_1.foo+="function"^this))&&0<--brake21;);}(--b+(c+=1,arguments_1&&(arguments_1[(c+=1)+(arguments_1&&"function"==typeof arguments_1.Infinity&&0<=--_calls_&&arguments_1.Infinity({},3,(c=1+c,!1<=(async_2&&(async_2.foo=2===[,0].length===4^1)))))]=!0)))}var a=(a++,void function(await){(async function(b_2=(c=1+c,await&&(await[c=1+c,await&&(await.NaN={}>>>-4),foo&&([foo[a+++--b]]=["number"<23..toString()!=(await&&(await[c=1+c,!0]+=0))])]=0),24..toString())){})((c=1+c,foo&&(foo.a+=!1)),(c=1+c,await&&(await.b=5))),c=1+(c=1+c),await=void 38..toString(),c=1+c,await=void(await&&(await[(c+=1)+(c=1+c,typeof((2*38..toString()>-2>>{})<<(("function"===this)>>({}<!0))))]*=[]^2===[,0].length|(foo&&(foo.NaN=!0)))),c=1+c,foo&&([foo.in]=[2===[,0].length^-0]),await&&(await.c+=38..toString()/5),foo*=!1,c=1+(c+=1)}(1/0));var bar=function(foo_2){switch(foo_2&&(foo_2[b]+=(2<1/0>>{})/(-0!=this))){case a+++a++:try{var expr26=(c=1+c,(2===[,0].length!==23..toString()&1/0-this)>(!0===(foo&=!0)));for(foo in expr26){var foo=expr26[foo];c=1+(c=1+c),24..toString(),foo&&(foo.a=-2!==23..toString())}}finally{c=1+c,38..toString(),foo&&(foo.c=4+this),c=1+c,foo&&(foo.a^=0)&&(foo_2=0===this)}break;case(c+=1)+(foo&&foo[--b]):}var key31,expr31=/[abc4]/.test((--b+(a&&"function"==typeof a.length&&0<=--_calls_&&a.length())||b||5).toString());for(key31 in expr31){c=1+c;expr31[key31],--b,new function(bar_1,foo_1,NaN_1){this.undefined=!1%(NaN<38..toString()),this.foo=8,c=1+c,foo&&(foo[b=a]^=1!=(c+=1,null)),c=1+(c=1+c)}((c=1+c,23..toString()))}}("function",--b);a=function(foo){!function(){for(bar in c=1+c,c+=1,24..toString()==(bar=!1))c=1+c}((--b,(b=a)&&a.var)),function(Math_2){c+=1;for(var brake42=5;c=1+c,foo&&(foo.a=-0*this<[]-"c")&&0<brake42;--brake42)c=1+c,Math_2&&(Math_2[c=1+c,(!0<("foo"<23..toString()))<<((foo&&(foo[c=1+c,NaN]/=2))>>>(this<<23..toString()))]="a"),foo&&(foo[c=1+c,-1==(foo&&(foo.a+=0))]=-0<=23..toString()),23..toString()}(new function(foo,b_1){this.a=(1<24..toString())-(5&[]),this[--b+/[abc4]/.test((c=1+c,c+=1,(b||5).toString()))]=2===[,0].length!==null^!1}),function(bar=23..toString()){c=1+c,bar&&(bar.undefined=null==24..toString()&&0),c=1+c,bar=void(c+=1),c=1+c,38..toString(),c=1+c,bar=void 0}()}("number",(a++,a++,--b,bar&&bar[--b+{3:(c=1+c,-1*(38..toString()||NaN))}[(c+=1)+b]],c+=1,--b,++a&&"function"==typeof a.b&&0<=--_calls_&&a.b(!1,/[abc4]/g.exec((c=1+c,(b||5).toString())),23..toString()),foo&&foo.var&&(--b,NaN==-0<{}&&(bar=!0)),b+=a,a++,((c+=1)+[(c=1+c,c+=1,100)].toString()||2).toString()[a+++[(c=1+c,(foo&&(foo[(c+=1)+(a/=(c=1+c,!1))]=NaN))*(NaN=={}<<"function")),(-2<[]!={}<="bar")+(22<<(2===[,0].length)+(2===[,0].length)),(c=1+(c=1+c),foo&&(foo[c=1+c,"object"/this*0|(bar&&(bar.null=2<<22))<5]^=1),!1/(c+=1,24..toString()))].b]))}console.log(null,a,b,c,1/0,NaN,void 0);
```
```
original result:
null 100 10 0 Infinity NaN undefined

uglified result:
evalmachine.<anonymous>:1
var _calls_=10,a=100,b=10,c=0;function f0(){var foo=function(b){return c=1+c,b&&([b.null]=[!0]),c=1+c,24..toString(),38..toString(),c=1+c,0<=--_calls_&&f2()}();function f2(arguments_1){var async_2=function(Infinity_1){for(var brake21=5;c=1+c,arguments_1="foo"%[],c=1+c,c+=1,(foo=-0)+(c+=1,Infinity_1&&(Infinity_1.foo+="function"^this))&&0<--brake21;);}(--b+(c+=1,arguments_1&&(arguments_1[(c+=1)+(arguments_1&&"function"==typeof arguments_1.Infinity&&0<=--_calls_&&arguments_1.Infinity({},3,(c=1+c,!1<=(async_2&&(async_2.foo=2===[,0].length===4^1)))))]=!0)))}var a=(a++,void function(await){(async function(b_2=(c=1+c,await&&(await[c=1+c,await&&(await.NaN={}>>>-4),foo&&([foo[a+++--b]]=["number"<23..toString()!=(await&&(await[c=1+c,!0]+=0))])]=0),24..toString())){})((c=1+c,foo&&(foo.a+=!1)),(c=1+c,await&&(await.b=5))),c=1+(c=1+c),await=void 38..toString(),c=1+c,await=void(await&&(await[(c+=1)+(c=1+c,typeof((2*38..toString()>-2>>{})<<(("function"===this)>>({}<!0))))]*=[]^2===[,0].length|(foo

SyntaxError: Unexpected token &&
    at createScript (vm.js:80:10)
    at Object.runInContext (vm.js:119:10)
    at Object.exports.run_code (D:\a\UglifyJS\UglifyJS\test\sandbox.js:75:12)
    at D:\a\UglifyJS\UglifyJS\test\ufuzz\index.js:1839:37
    at Array.forEach (<anonymous>)
    at Object.<anonymous> (D:\a\UglifyJS\UglifyJS\test\ufuzz\index.js:1831:20)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
```
```js
// reduced test case (output will differ)

// (beautified)
function f4(Math_2) {
    async function f5(b_2 = 0(Math_2)) {}
    f5();
    var await = 0();
    console(await);
}
// output: 
// minify: SyntaxError: Unexpected token )
// options: {
//   "mangle": false,
//   "output": {
//     "v8": true
//   },
//   "validate": true
// }
```
```
minify(options):
{
  "mangle": false,
  "output": {
    "v8": true
  }
}

Suspicious compress options:
  merge_vars
  reduce_vars
  unused
```


Discussion:

Patch:
diff --git a/lib/compress.js b/lib/compress.js
index 33aa5b915fd..0718e5c70a7 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -5187,7 +5187,7 @@ merge(Compressor.prototype, {
             } else if ((ldef = self.variables.get(def.name)) !== def) {
                 if (ldef && root === segment) references[ldef.id] = false;
                 return references[def.id] = false;
-            } else if (compressor.exposed(def) || sym.name == "arguments") {
+            } else if (compressor.exposed(def) || sym.name == "arguments" || sym.name == "await") {
                 return references[def.id] = false;
             } else {
                 var refs = declarations.get(def.id) || [];


Test patch:
diff --git a/test/compress/async.js b/test/compress/async.js
index bf4d55c8109..19b90f519da 100644
--- a/test/compress/async.js
+++ b/test/compress/async.js
@@ -640,3 +640,59 @@ issue_4417: {
     expect_stdout: "undefined"
     node_version: ">=8"
 }
+
+issue_4454_1: {
+    rename = false
+    options = {
+        merge_vars: true,
+    }
+    input: {
+        function f(a) {
+            (async function(b = console.log(a)) {})();
+            var await = 42..toString();
+            console.log(await);
+        }
+        f("PASS");
+    }
+    expect: {
+        function f(a) {
+            (async function(b = console.log(a)) {})();
+            var await = 42..toString();
+            console.log(await);
+        }
+        f("PASS");
+    }
+    expect_stdout: [
+        "PASS",
+        "42",
+    ]
+    node_version: ">=8"
+}
+
+issue_4454_2: {
+    rename = true
+    options = {
+        merge_vars: true,
+    }
+    input: {
+        function f(a) {
+            (async function(b = console.log(a)) {})();
+            var await = 42..toString();
+            console.log(await);
+        }
+        f("PASS");
+    }
+    expect: {
+        function f(b) {
+            (async function(c = console.log(b)) {})();
+            var b = 42..toString();
+            console.log(b);
+        }
+        f("PASS");
+    }
+    expect_stdout: [
+        "PASS",
+        "42",
+    ]
+    node_version: ">=8"
+}