fix corner case in `unused` (#4277)
authorAlex Lam S.L <alexlamsl@gmail.com>
Mon, 16 Nov 2020 18:06:00 +0000 (18:06 +0000)
committerGitHub <noreply@github.com>
Mon, 16 Nov 2020 18:06:00 +0000 (02:06 +0800)
fixes #4276

lib/compress.js
test/compress/let.js

index 97252f7..9eb4a9e 100644 (file)
@@ -5032,7 +5032,7 @@ merge(Compressor.prototype, {
                             }
                         }
                         var old_def, var_defs = var_defs_by_id.get(sym.id);
-                        if (!def.value) {
+                        if (!def.value && !(node instanceof AST_Let)) {
                             if (var_defs.length > 1) {
                                 AST_Node.info("Dropping declaration of variable {name} [{file}:{line},{col}]", template(def.name));
                                 remove(var_defs, def);
@@ -5071,13 +5071,18 @@ merge(Compressor.prototype, {
                                 duplicated++;
                             }
                             if (side_effects.length > 0) {
-                                if (tail.length > 0) {
-                                    side_effects.push(def.value);
-                                    def.value = make_sequence(def.value, side_effects);
-                                } else {
+                                if (tail.length == 0) {
                                     body.push(make_node(AST_SimpleStatement, node, {
                                         body: make_sequence(node, side_effects)
                                     }));
+                                } else if (def.value) {
+                                    side_effects.push(def.value);
+                                    def.value = make_sequence(def.value, side_effects);
+                                } else {
+                                    def.value = make_node(AST_UnaryPrefix, def, {
+                                        operator: "void",
+                                        expression: make_sequence(def, side_effects)
+                                    });
                                 }
                                 side_effects = [];
                             }
index 728e40b..20bec4d 100644 (file)
@@ -1006,3 +1006,61 @@ issue_4274_2: {
     expect_stdout: "PASS"
     node_version: ">=4"
 }
+
+issue_4276_1: {
+    options = {
+        unused: true,
+    }
+    input: {
+        "use strict";
+        try {
+            let a = b, b;
+            console.log("FAIL");
+        } catch (e) {
+            console.log("PASS");
+        }
+    }
+    expect: {
+        "use strict";
+        try {
+            let a = b, b;
+            console.log("FAIL");
+        } catch (e) {
+            console.log("PASS");
+        }
+    }
+    expect_stdout: "PASS"
+    node_version: ">=4"
+}
+
+issue_4276_2: {
+    options = {
+        unused: true,
+    }
+    input: {
+        "use strict";
+        try {
+            let a = f(), b;
+            console.log("FAIL");
+            function f() {
+                return b;
+            }
+        } catch (e) {
+            console.log("PASS");
+        }
+    }
+    expect: {
+        "use strict";
+        try {
+            let a = f(), b;
+            console.log("FAIL");
+            function f() {
+                return b;
+            }
+        } catch (e) {
+            console.log("PASS");
+        }
+    }
+    expect_stdout: "PASS"
+    node_version: ">=4"
+}