diff --git a/lib/compress.js b/lib/compress.js index 972341bb9b..03ed9e8a08 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -3624,8 +3624,9 @@ merge(Compressor.prototype, { var sym = node.name, def, value; if (sym.scope === self && (def = sym.definition()).escaped != 1 - && !def.single_use + && !def.assignments && !def.direct_access + && !def.single_use && !top_retain(def) && (value = sym.fixed_value()) === node.value && value instanceof AST_Object) { diff --git a/test/compress/hoist_props.js b/test/compress/hoist_props.js index 26887af229..90a7f1d847 100644 --- a/test/compress/hoist_props.js +++ b/test/compress/hoist_props.js @@ -686,3 +686,33 @@ undefined_key: { } expect_stdout: "3" } + +issue_3021: { + options = { + hoist_props: true, + reduce_vars: true, + } + input: { + var a = 1, b = 2; + (function() { + b = a; + if (a++ + b--) + return 1; + return; + var b = {}; + })(); + console.log(a, b); + } + expect: { + var a = 1, b = 2; + (function() { + b = a; + if (a++ + b--) + return 1; + return; + var b = {}; + })(); + console.log(a, b); + } + expect_stdout: "2 2" +}