From 6d3dcaa59e5b7a6e3bef2de1daf4edd66a7bf274 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Sun, 26 Jul 2020 02:27:54 +0100 Subject: [PATCH] fix corner case in `unused` (#4026) fixes #4025 --- lib/compress.js | 17 +++++++++++------ test/compress/drop-unused.js | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index 3405253d..c8f5b267 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -4457,13 +4457,18 @@ merge(Compressor.prototype, { var sym = def.name.definition(); if (!drop_vars || sym.id in in_use_ids) { if (def.value && indexOf_assign(sym, def) < 0) { + var write_only = def.value.write_only; var value = def.value.drop_side_effect_free(compressor); - if (def.value !== value) def.value = value && make_sequence(def.value, [ - value, - make_node(AST_Number, def.value, { - value: 0 - }), - ]); + if (def.value !== value) { + def.value = value && make_sequence(def.value, [ + value, + make_node(AST_Number, def.value, { + value: 0 + }), + ]); + } else if (def.value.write_only !== write_only) { + def.value.write_only = write_only; + } } var old_def, var_defs = var_defs_by_id.get(sym.id); if (!def.value) { diff --git a/test/compress/drop-unused.js b/test/compress/drop-unused.js index ee06199d..6ab4fe3b 100644 --- a/test/compress/drop-unused.js +++ b/test/compress/drop-unused.js @@ -2813,3 +2813,38 @@ issue_4017: { } expect_stdout: "undefined" } + +issue_4025: { + options = { + collapse_vars: true, + evaluate: true, + passes: 2, + reduce_vars: true, + toplevel: true, + unused: true, + } + input: { + var a = 0, b = 0, c = 0, d = a++; + try { + var e = console.log(c), f = b; + } finally { + var d = b = 1, d = c + 1; + c = 0; + } + console.log(a, b, d); + } + expect: { + var d, c = 0; + try { + console.log(c); + } finally { + d = c + 1; + c = 0; + } + console.log(1, 1, d); + } + expect_stdout: [ + "0", + "1 1 1", + ] +} -- 2.34.1