diff --git a/lib/compress.js b/lib/compress.js index 22f4736a..0f9f0795 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -6574,12 +6574,10 @@ merge(Compressor.prototype, { return all(def.references, function(ref) { var scope = ref.scope; if (scope.find_variable(name) !== sym) return false; - if (forbidden) { + if (forbidden) do { scope = scope.resolve(); - do { - if (forbidden(scope)) return false; - } while ((scope = scope.parent_scope.resolve()) && scope !== fn); - } + if (forbidden(scope)) return false; + } while (scope !== fn && (scope = scope.parent_scope)); return true; }) && def; } diff --git a/test/compress/functions.js b/test/compress/functions.js index b3a6011f..e4766cd5 100644 --- a/test/compress/functions.js +++ b/test/compress/functions.js @@ -6258,3 +6258,28 @@ issue_5025: { } expect_stdout: "object" } + +issue_5036: { + options = { + functions: true, + reduce_vars: true, + unused: true, + } + input: { + console.log(typeof function() { + var await = function f() { + return f; + }; + return await() === await; + }() ? "PASS" : "FAIL"); + } + expect: { + console.log(typeof function() { + function await() { + return await; + } + return await() === await; + }() ? "PASS" : "FAIL"); + } + expect_stdout: "PASS" +}