From b106cd94769790ac2913a9828f045b596080cf55 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Thu, 3 Feb 2022 23:13:23 +0000 Subject: [PATCH] fix corner case in `unused` (#5339) fixes #5338 --- lib/compress.js | 15 +++++++++------ test/compress/const.js | 13 +++++++++++++ test/compress/let.js | 17 +++++++++++++++++ 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index d8baa603..70f0fdb8 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -6943,13 +6943,16 @@ Compressor.prototype.compress = function(node) { if (!drop_sym || !drop_vars || sym.id in in_use_ids) { var index; if (value && ((index = indexOf_assign(sym, def)) < 0 || self_assign(value.tail_node()))) { - value = value.drop_side_effect_free(compressor); - if (value) { - AST_Node.warn("Side effects in definition of variable {name} [{file}:{line},{col}]", template(def.name)); - side_effects.push(value); - } def = def.clone(); - def.value = value = null; + value = value.drop_side_effect_free(compressor); + if (value) AST_Node.warn("Side effects in definition of variable {name} [{file}:{line},{col}]", template(def.name)); + if (node instanceof AST_Const) { + def.value = value || make_node(AST_Number, def, { value: 0 }); + } else { + def.value = null; + if (value) side_effects.push(value); + } + value = null; if (index >= 0) assign_in_use[sym.id][index] = def; } var old_def, fn; diff --git a/test/compress/const.js b/test/compress/const.js index 55263da8..d79c8033 100644 --- a/test/compress/const.js +++ b/test/compress/const.js @@ -1843,3 +1843,16 @@ issue_5319: { } expect_stdout: true } + +issue_5338: { + options = { + unused: true, + } + input: { + const a = a; + } + expect: { + const a = a; + } + expect_stdout: true +} diff --git a/test/compress/let.js b/test/compress/let.js index 81940a92..b7caedf0 100644 --- a/test/compress/let.js +++ b/test/compress/let.js @@ -2006,3 +2006,20 @@ issue_5319: { expect_stdout: "PASS" node_version: ">=4" } + +issue_5338: { + options = { + unused: true, + } + input: { + "use strict"; + let a = a; + } + expect: { + "use strict"; + a; + let a; + } + expect_stdout: ReferenceError("a is not defined") + node_version: ">=4" +}