Repository: mishoo/UglifyJS (JavaScript)

Issue:
ufuzz failure
```js
// original code
// (beautified)
var _calls_ = 10, a = 100, b = 10, c = 0;

function f0(a_2 = false, foo) {
    try {
        switch (typeof f1 == "function" && --_calls_ >= 0 && f1(--b + void function a_1() {
            L23281: for (var brake3 = 5; {} && brake3 > 0; --brake3) {
                c = c + 1;
            }
        }(), (c = c + 1) + (typeof foo.c == "function" && --_calls_ >= 0 && foo.c()), ...[ void function() {
            (c = c + 1) + !b;
            if (--b + {
                c: (c = 1 + c, (4 && true) << (38..toString() >= "c") & (-2 ^ "bar") >> ("number" <= "number")),
                Infinity: (c = 1 + c, c = c + 1, (3 !== 3) << ("number" == "function")),
                1.5: (c = 1 + c, ("function" || -1) & "foo" === false ^ "foo" < "" != +Infinity)
            }[c = 1 + c, ("bar" !== [ , 0 ][1]) < "" << 3 ^ (-4 << 24..toString() || -3 >> -5)]) {
                switch (c = 1 + c, a_2 && (a_2.Infinity = (foo.foo += (24..toString() + []) / ("bar" ^ [ , 0 ][1])) <= ("function" > 4) << ("number", 
                null))) {
                  case c = 1 + c, ((0 || "object") | -0 < [ , 0 ][1]) <= "bar" + /[a2][^e]+$/ >> (-5 <= -4):
                    ;
                    break;

                  case c = 1 + c, (-0 >= -5 && this === []) >= (0 > -3 ^ (a_2 -= -5 + undefined)):
                    ;
                    break;

                  case c = 1 + c, (a_2 && (a_2["undefined" in [ (c = 1 + c, a_2 && (a_2.c = (foo = "undefined" >= 3) + (Infinity || /[a2][^e]+$/) <= (/[a2][^e]+$/ === "bar", 
                    38..toString() << ""))), (c = 1 + c, (false * 25 ^ "b" == {}) < ("" >> "b" && "a" - -4)), (c = 1 + c, 
                    ("bar" % [] || "c" - null) + ((a_2[c = 1 + c, (foo && (foo.foo += "object" === true)) <= (a_2 && ({
                        var: a_2[c = 1 + c, (c = c + 1, 3 | true) !== this % 3 < (22 <= false)]
                    } = {
                        var: /[a2][^e]+$/ === "foo"
                    })) & (this, null) >= (-4 == 24..toString())] += [] ^ false) & "" >>> 3)), (c = 1 + c, 
                    ("function" || "foo") / (23..toString() | Infinity) >= ("undefined" >> NaN && 38..toString() ^ 1)) ]] = 1 !== -4 != "" - "foo")) >>> (-4 < 3 != (4 === this)):
                    ;
                    break;

                  case c = 1 + c, {} <= "b" >= ([ , 0 ].length === 2) - 0 > (5 <= "") % (this > 22):
                    ;
                    break;
                }
            }
        }(), (c = c + 1) + (foo && typeof foo.Infinity == "function" && --_calls_ >= 0 && foo.Infinity()) ])) {
          default:
            {
                var brake8 = 5;
                do {
                    {
                        var brake9 = 5;
                        L23282: while ((c = c + 1) + --b && --brake9 > 0) {
                            try {
                                L23283: for (var brake11 = 5; Infinity in [ (c = 1 + c, (a_2 = (23..toString() ^ [ , 0 ].length === 2) !== (c = c + 1, 
                                false)) + (25 << NaN ^ 2 << this)), (c = 1 + c, (/[a2][^e]+$/ && 22) % ([] !== "foo") !== (a_2 <<= 22 !== "foo") < -1 * "object"), (c = 1 + c, 
                                ((this && 22) ^ (24..toString(), /[a2][^e]+$/)) >>> (-2 === -1) % ("b" === "number")) ] && brake11 > 0; --brake11) {
                                    (c = 1 + c, (5 && -0) % ("a" !== -4) * (([ , 0 ][1] > 1) * (-4 >> -1))) ? (c = 1 + c, 
                                    foo[(--b + (typeof foo == "function" && --_calls_ >= 0 && foo((c = 1 + c, (Infinity >> -4) / (true - "c") ^ (foo += -3 >= 38..toString()) == 0 >= /[a2][^e]+$/), "foo")) || a || 3).toString()] %= (foo && (foo.a = [ , 0 ][1] + 2 === ("" == 22))) >> ("undefined" > "foo") / (1 << 4)) : (c = 1 + c, 
                                    (-3 >> 4 && (foo |= 0 << undefined)) & (foo && (foo[--b + void a] = (22 < "c") >>> "c" - "foo")));
                                }
                            } catch (undefined_2) {
                                {
                                    var expr13 = (c = c + 1) + /[a2][^e]+$/;
                                    for (var key13 in expr13) {
                                        L23284: {
                                        }
                                    }
                                }
                                L23285: for (var brake15 = 5; a++ + b++ && brake15 > 0; --brake15) {
                                    try {
                                        c = 1 + c, !(true != 23..toString() == -3 >>> "object");
                                    } catch (bar_1) {
                                    } finally {
                                    }
                                }
                            }
                        }
                    }
                } while (a++ && --brake8 > 0);
            }

          case +function() {
                {
                    --b + 1;
                }
                {
                    var brake20 = 5;
                    do {
                        if (b = a) {
                            var foo_1 = function f1(Math_1) {
                                c = 1 + c, ~(a_2.undefined >>= "a" && []) !== ("number" < -0 && false / 25);
                                c = 1 + c, ((-3 === this) + ("b" ^ NaN)) * ((-1 ^ "foo") !== (2 | "b"));
                            }((c = 1 + c, undefined != this != "c" >> this | ("number" ^ /[a2][^e]+$/) % (5 & 24..toString())));
                        }
                    } while (--b + /[abc4]/.test(((c = c + 1) + (a++ + /[abc4]/.test((a++ + a-- || b || 5).toString())) || b || 5).toString()) && --brake20 > 0);
                }
                if (a_2 && typeof a_2.b == "function" && --_calls_ >= 0 && a_2.b(a_2 && a_2.undefined)) {
                    var brake26 = 5;
                    L23286: while ([ typeof f3 == "function" && --_calls_ >= 0 && f3(), b %= a ] && --brake26 > 0) {
                        foo_1;
                    }
                } else {
                    return (c = c + 1) + (b %= a);
                }
                {
                    var brake29 = 5;
                    L23287: do {
                        {
                            var brake30 = 5;
                            do {
                            } while (typeof f3 == "function" && --_calls_ >= 0 && f3() && --brake30 > 0);
                        }
                    } while ((c = c + 1) + (a_2 && a_2.length) && --brake29 > 0);
                }
            }():
            c = c + 1;
            try {
                if (++a) {
                    var a = function f2(Infinity_2) {
                        {
                            var brake36 = 5;
                            while ((c = 1 + c, (foo && (foo[Infinity_2 && Infinity_2.var] = (-3, 5) | NaN << -5)) - (a_2 && (a_2.in = ([ , 0 ].length === 2) << 3 != [] >> 1))) && --brake36 > 0) {
                                c = 1 + c, !(({} << "number") * (23..toString() && NaN));
                            }
                        }
                        c = c + 1;
                    }(a_2, "undefined");
                }
            } finally {
                {
                    var brake39 = 5;
                    L23288: while (false && --brake39 > 0) {
                        var expr40 = a++ + (typeof a_2 !== "number");
                        for (var key40 in expr40) {
                            c = 1 + c;
                            var b_2 = expr40[key40];
                            c = c + 1;
                        }
                    }
                }
                {
                    var brake42 = 5;
                    while (22 && --brake42 > 0) {}
                }
            }
            break;

          case --b + +b:
            L23289: {}
            break;

          case a++ + ((b_2, [ parseInt_1, NaN_1, arguments ]) => {
                {
                    var brake51 = 5;
                    do {
                        "" in {
                            [(c = c + 1) + function() {
                            }()]: "foo" in [ (c = 1 + c, -0 - 24..toString() >>> void 4 ^ ("c" & true || "number" != "object")), (c = 1 + c, 
                            (([ , 0 ].length === 2 != "foo") < "a" >>> true) + ((-1 & 5) <= false % 1)), (c = 1 + c, 
                            arguments && (arguments.null += (22 + "undefined" & (a.in ^= "number" == /[a2][^e]+$/)) == ((c = c + 1, 
                            24..toString()) !== 5 < ([ , 0 ].length === 2)))) ],
                            Infinity: typeof foo == "function" && --_calls_ >= 0 && foo({}, undefined, (c = 1 + c, 
                            ((c = c + 1, true) !== (4 && this)) + (this !== 22 === ([ , 0 ][1] || 24..toString())))),
                            [0 === 1 ? a : b]: --b + arguments[c = 1 + c, arguments >>= (foo && (foo[a++ + (b |= a)] = !NaN >= (24..toString() == 5))) | 4 >> "object" ^ 38..toString() + 2],
                            in: [ (c = 1 + c, NaN_1 && (NaN_1.in = ("foo" >= -2 && -3 / "object") != (null >= -4, 
                            true + NaN))) ],
                            var: a++ + /[abc4]/.test(((c = 1 + c, ("b" % 3 & this < Infinity) !== (22 == 4 || [ , 0 ][1] >> NaN)) || b || 5).toString())
                        };
                    } while (b-- && --brake51 > 0);
                }
                return;
                try {
                    {
                        var brake55 = 5;
                        while (a++ + void function a_1() {
                            c = 1 + c, a && (a.b += ([ , 0 ][1] >= NaN === this * []) >= (1 != -5 && (0, -5)));
                            c = 1 + c, [ , 0 ][1] / "" >> void 3, /[a2][^e]+$/ * 5 * (-2 != "object");
                        }() && --brake55 > 0) {
                            var a_2 = function f3(bar_1) {
                            }();
                        }
                    }
                } catch (Math_2) {
                    return b_2 && b_2[typeof f4 == "function" && --_calls_ >= 0 && f4(null, 23..toString())];
                    L23291: {
                        {
                            return c = 1 + c, ((this && undefined) ^ {} === 22) < void (/[a2][^e]+$/ > 2);
                        }
                        {
                            var expr62 = (c = 1 + c, a = (-4 & 4) >= [ , 0 ][1] * "c" || -(-2 === 22));
                            for (const key62 in expr62) {
                                c = 1 + c;
                                var b_2 = expr62[key62];
                                c = 1 + c, (0 == 3) >> (24..toString() & -0) >> !true + false * 25;
                            }
                        }
                    }
                }
                {
                    var brake64 = 5;
                    while (typeof a_1 == "undefined" && --brake64 > 0) {
                        delete (delete (23..toString() % "function") / (c = c + 1, "object" == -1));
                    }
                }
            })(--b + a++, [ "b" ], {
                in: a++ + b--,
                b: !function() {
                    L23290: {
                        c = 1 + c, (([ , 0 ].length === 2) >> "c") / (undefined << 4) * ((foo && (foo.var = (/[a2][^e]+$/, 
                        24..toString()))) - (0 && 38..toString()));
                        c = 1 + c, a_2 += (5 | 0) > (3 ^ 38..toString()) > (c = c + 1, !{});
                        c = 1 + c, -4 >= /[a2][^e]+$/ <= NaN * 25 ^ ((24..toString(), 38..toString()) | Infinity ^ "c");
                        c = 1 + c, ("undefined" != 25, -5 == 2) !== (undefined / 25 !== (foo[c = 1 + c, 
                        (a_2 <<= undefined >> -1) != "foo" << "foo" != (0 && 4) <= -3 >>> "foo"] = "number" ^ 22));
                    }
                    {
                        return [ (c = 1 + c, ((a_2 && (a_2.b = -4 | -2)) < 4 / "undefined") * ("undefined" + 24..toString() >> (a_2 && (a_2.b *= false == 22)))), (c = 1 + c, 
                        ("bar" === "function", - -1) * ("foo" << "number" >> (undefined == null))), ..."" + a_2, (c = 1 + c, 
                        5 === "a" ^ -2 != 2 && (a && (a.foo += -0 - "bar")) <= {} - "c") ][c = 1 + c, foo && (foo.undefined = (23..toString() ^ 24..toString()) == (5 !== -3) == ((undefined | 22) ^ (a_2 && (a_2.Infinity += ([ , 0 ].length === 2) <= true))))];
                    }
                }()
            }[--b + (foo && typeof foo.Infinity == "function" && --_calls_ >= 0 && foo.Infinity(+b, a++ + {
                [[].Infinity]: (c = c + 1) + (((a_2 += "b" % -3) ^ 24..toString() % 3) != Infinity / 23..toString() <= /[a2][^e]+$/ % this),
                [(c = c + 1) + a--]: --b + +function a_2_2() {
                }()
            }[null in {
                b: (c = 1 + c, ([ , 0 ][1] ^ "b") * ([] <= 25) >>> +(2 * "a"))
            }]))]):
            break;
        }
    } catch (a_2) {
        if (a++ + foo) {
            var a = {
                null: 25 in {
                    NaN: --b + new function foo_2() {
                        this.foo += 4 != "undefined";
                        this.foo = 5 >= 2;
                    }((c = 1 + c, a_2 && (a_2[--b + /[abc4]/g.exec(((c = c + 1) + (typeof f1 == "function" && --_calls_ >= 0 && f1(4, 2, 5)) || b || 5).toString())] <<= (a && (a.Infinity += 4 >= -1)) + ("b" | false) && (this & NaN) === ("foo" !== NaN)))),
                    b: a++ + !function() {
                    }(),
                    NaN: b = a,
                    [--b + (a && typeof a.b == "function" && --_calls_ >= 0 && a.b([], "undefined", 1))]: a = (c = 1 + c, 
                    void ([ , 0 ].length === 2 !== "function") >> ((0 ^ "") === ("bar" == "function"))),
                    3: (c = c + 1) + (b -= (c = 1 + c, ("a" === "undefined") - (38..toString() > /[a2][^e]+$/) ^ (a && (a.c = -3 === -1 != (-5 ^ 25)))))
                },
                undefined: ~((true > -2 | -5 / true) < (a_2 = -2 + ([ , 0 ].length === 2) < (1 < 5))),
                [a++ + (b += a_2 && typeof a_2.a == "function" && --_calls_ >= 0 && a_2.a((c = 1 + c, 
                (-1 ^ NaN) >= -2 / -4 ^ -0 << -0 < ("c" > -2)), -3, "c"))]: b && typeof b.a == "function" && --_calls_ >= 0 && b.a(..."" + a, 24..toString()),
                b: a++ + (("undefined" * true <= "c" / "object") >> (-4 << 22 < (true, 3))),
                a: b++
            }, b = a++ + (typeof bar_2 != "string");
        } else {
            return (c = c + 1) + (/[abc4]/g.exec((a++ + (24..toString() < -5 >= !false) % (null & -2, 
            Infinity !== "object") || b || 5).toString()) || a || 3).toString();
        }
        for (var brake69 = 5; void (b && (b[--b + [ , 0 ][1]] /= ("function" & "foo") !== 22 / "" === ("b" != null ^ 5 >> 4))) && brake69 > 0; --brake69) {
            var brake70 = 5;
            do {
                {
                    var brake71 = 5;
                    L23292: while (2 in [ a++ + b++ ] && --brake71 > 0) {}
                }
            } while (b-- && --brake70 > 0);
        }
    }
}

var NaN_2 = f0(null, -3);

console.log(null, a, b, c, Infinity, NaN, undefined);
```
```js
// uglified code
// (beautified)
var _calls_ = 10, a = 100, b = 10, c = 0;

function f0(a_2 = !1, foo) {
    try {
        switch ("function" == typeof f1 && 0 <= --_calls_ && f1(--b + void function() {
            for (var brake3 = 5; 0 < brake3; --brake3) {
                c += 1;
            }
        }(), (c += 1) + ("function" == typeof foo.c && 0 <= --_calls_ && foo.c()), void function() {
            if (--b + {
                c: (c = 1 + (c += 1), !0 << ("c" <= 38..toString()) & -1),
                Infinity: (c = 1 + c, 0),
                1.5: 1
            }[c = 1 + (c = 1 + (c += 1)), !1 ^ (-4 << 24..toString() || -1)]) {
                switch (c = 1 + c, a_2 && (a_2.Infinity = (foo.foo += (24..toString() + []) / 0) <= 0)) {
                  case c = 1 + c, !0:
                  case c = 1 + c, (this === []) >= (!0 ^ (a_2 -= NaN)):
                  case c = 1 + c, (a_2 && (a_2["undefined" in [ (c = 1 + c, a_2 && (a_2.c = (foo = !1) + 1 / 0 <= 38..toString() << "")), (c = 1 + c, 
                    (0 ^ "b" == {}) < 0), (c = 1 + c, ("bar" % [] || NaN) + (0 & (a_2[c = 1 + c, (foo && (foo.foo += !1)) <= (a_2 && ({
                        var: a_2[c = 1 + c, c += 1, 3 !== this % 3 < !1]
                    } = {
                        var: !1
                    })) & (-4 == 24..toString()) <= null] += !1 ^ []))), (c = 1 + c, 0 <= "function" / (23..toString() | 1 / 0)) ]] = !0)) >>> (1 != (4 === this)):
                  case c = 1 + c, !1 % (22 < this) < (+(2 === [ , 0 ].length) <= ({} <= "b")):
                }
            }
        }(), (c += 1) + (foo && "function" == typeof foo.Infinity && 0 <= --_calls_ && foo.Infinity()))) {
          default:
            var brake8 = 5;
            do {
                for (var brake9 = 5; (c += 1) + --b && 0 < --brake9; ) {
                    try {
                        for (var brake11 = 5; 1 / 0 in [ (c = 1 + c, (a_2 = (23..toString() ^ 2 === [ , 0 ].length) !== !1) + (25 ^ 2 << this)), 22 % ("foo" !== []) !== (a_2 <<= !0) < NaN, (c = 1 + (c = 1 + (c += 1)), 
                        ((this && 22) ^ (24..toString(), /[a2][^e]+$/)) >>> NaN) ] && 0 < brake11; --brake11) {
                            c = 1 + (c = 1 + c), (foo |= 0) && (foo[--b + void 0] = 0);
                        }
                    } catch (undefined_2) {
                        c += 1;
                        for (var brake15 = 5; a++ + b++ && 0 < brake15; --brake15) {
                            try {
                                c = 1 + c, 23..toString();
                            } catch (bar_1) {}
                        }
                    }
                }
            } while (a++ && 0 < --brake8);

          case +function() {
                --b;
                var brake20 = 5;
                do {} while ((b = a) && (c = 1 + c, 24..toString(), c = 1 + c, a_2.undefined >>= [], 
                c = 1 + c), --b + /[abc4]/.test(((c += 1) + (a++ + /[abc4]/.test((a++ + a-- || b || 5).toString())) || b || 5).toString()) && 0 < --brake20);
                if (!(a_2 && "function" == typeof a_2.b && 0 <= --_calls_ && a_2.b(a_2 && a_2.undefined))) {
                    return (c += 1) + (b %= a);
                }
                for (var brake26 = 5; "function" == typeof f3 && 0 <= --_calls_ && f3(), b %= a, 
                0 < --brake26; ) {}
                var brake29 = 5;
                do {
                    for (var brake30 = 5; "function" == typeof f3 && 0 <= --_calls_ && f3() && 0 < --brake30; ) {}
                } while ((c += 1) + (a_2 && a_2.length) && 0 < --brake29);
            }():
            c += 1;
            try {
                ++a && (a = function(Infinity_2) {
                    for (var brake36 = 5; c = 1 + c, (foo && (foo[Infinity_2 && Infinity_2.var] = 5)) - (a_2 && (a_2.in = (2 === [ , 0 ].length) << 3 != [] >> 1)) && 0 < --brake36; ) {
                        c = 1 + c, 23..toString();
                    }
                    c += 1;
                }(a_2));
            } finally {
                for (var brake42 = 5; 0 < --brake42; ) {}
            }
            break;

          case --b + +b:
          case a++ + (([ , NaN_1, arguments ]) => {
                for (var brake51 = 5; c = 1 + (c += 1), 24..toString(), c = 1 + (c = 1 + c), arguments && (arguments.null += ("22undefined" & (a.in ^= !1)) == (c += 1, 
                24..toString() !== 5 < (2 === [ , 0 ].length))), "function" == typeof foo && 0 <= --_calls_ && foo({}, void 0, (c = 1 + c, 
                c += 1, (!0 !== this) + (22 !== this === 24..toString()))), --b, c = 1 + c, arguments >>= (foo && (foo[a++ + (b |= a)] = (5 == 24..toString()) <= !0)) | 4 ^ 38..toString() + 2, 
                c = 1 + c, NaN_1 && (NaN_1.in = !0), a++, /[abc4]/.test((c = 1 + c, (0 != (NaN & this < 1 / 0) || b || 5).toString())), 
                b-- && 0 < --brake51; ) {}
                return;
            })((--b, a++, [ "b" ]), (a++, b--, c = 1 + c, foo && (foo.var = 24..toString()), 
            c = 1 + c, a_2 += !1 < ((3 ^ 38..toString()) < 5), c = 1 + (c + 1), 24..toString(), 
            38..toString(), foo[c = 1 + (1 + c), 0 != (a_2 <<= 0) != 1] = 22, c = 1 + c, a_2 && (a_2.b = -2), 
            24..toString(), a_2 && (a_2.b *= !1), c = 1 + (c = 1 + c), a && (a.foo += NaN), 
            c = 1 + c, foo && (foo.undefined = 1 == (23..toString() ^ 24..toString()) == (22 ^ (a_2 && (a_2.Infinity += (2 === [ , 0 ].length) <= !0)))), 
            --b, foo && "function" == typeof foo.Infinity && 0 <= --_calls_ && foo.Infinity(+b, a++ + {
                [[].Infinity]: (c += 1) + (((a_2 += NaN) ^ 24..toString() % 3) != 1 / 0 / 23..toString() <= /[a2][^e]+$/ % this),
                [(c += 1) + a--]: --b + NaN
            }[null in {
                b: (c = 1 + c, 0 * ([] <= 25) >>> NaN)
            }]))):
        }
    } catch (a_2) {
        if (!(a++ + foo)) {
            return (c += 1) + (/[abc4]/g.exec((a++ + (!0 <= (24..toString() < -5)) % !0 || b || 5).toString()) || a || 3).toString();
        }
        var a = {
            null: 25 in {
                NaN: --b + new function() {
                    this.foo += !0, this.foo = !0;
                }((c = 1 + c, a_2 && (a_2[--b + /[abc4]/g.exec(((c += 1) + ("function" == typeof f1 && 0 <= --_calls_ && f1(4, 2, 5)) || b || 5).toString())] <<= (a && (a.Infinity += !0)) + 0 && !0 === (NaN & this)))),
                b: a++ + !0,
                NaN: b = a,
                [--b + (a && "function" == typeof a.b && 0 <= --_calls_ && a.b([], "undefined", 1))]: (c = 1 + c, 
                a = 0),
                3: (c += 1) + (b -= (c = 1 + c, !1 - (38..toString() > /[a2][^e]+$/) ^ (a && (a.c = !0))))
            },
            undefined: ~(-5 < (a_2 = -2 + (2 === [ , 0 ].length) < !0)),
            [a++ + (b += a_2 && "function" == typeof a_2.a && 0 <= --_calls_ && a_2.a((c = 1 + c, 
            0), -3, "c"))]: b && "function" == typeof b.a && 0 <= --_calls_ && b.a(..."" + a, 24..toString()),
            b: 0 + a++,
            a: b++
        }, b = a++ + ("string" != typeof bar_2);
        b && (b[--b] /= !1);
    }
}

var NaN_2 = f0(null, -3);

console.log(null, a, b, c, 1 / 0, NaN, void 0);
```
```
original result:
null 100 10 18 Infinity NaN undefined

uglified result:
null 100 10 41 Infinity NaN undefined
```
```js
// reduced test case (output will differ)

// (beautified)
var a = 0;

((b_2, [ parseInt_1, NaN_1, arguments ]) => {
    arguments[0];
})(a, "b");
// output: TypeError: Cannot read property '0' of undefined
// minify: 
// options: {
//   "mangle": false,
//   "output": {
//     "v8": true
//   },
//   "validate": true
// }
```
```
minify(options):
{
  "mangle": false,
  "output": {
    "v8": true
  }
}

Suspicious compress options:
  pure_getters
  side_effects
```


Discussion:

Patch:
diff --git a/lib/compress.js b/lib/compress.js
index 29cd26b6ded..2c1f87d18ea 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -358,6 +358,7 @@ merge(Compressor.prototype, {
 
     function is_arguments(def) {
         if (def.name != "arguments") return false;
+        if (!def.scope.uses_arguments) return false;
         var orig = def.orig;
         return orig.length == 1 && orig[0] instanceof AST_SymbolFunarg;
     }


Test patch:
diff --git a/test/compress/arrows.js b/test/compress/arrows.js
index cc5aec5fafd..990090b2f5b 100644
--- a/test/compress/arrows.js
+++ b/test/compress/arrows.js
@@ -587,3 +587,32 @@ issue_4401: {
     ]
     node_version: ">=4"
 }
+
+issue_4448: {
+    options = {
+        pure_getters: "strict",
+        side_effects: true,
+    }
+    input: {
+        var A;
+        try {
+            (arguments => {
+                arguments[0];
+            })(A);
+        } catch (e) {
+            console.log("PASS");
+        }
+    }
+    expect: {
+        var A;
+        try {
+            (arguments => {
+                arguments[0];
+            })(A);
+        } catch (e) {
+            console.log("PASS");
+        }
+    }
+    expect_stdout: "PASS"
+    node_version: ">=4"
+}