diff --git a/lib/compress.js b/lib/compress.js index 275d2980..c4aee690 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -7596,11 +7596,22 @@ merge(Compressor.prototype, { node.body = body; } } else if (body instanceof AST_Sequence) { - var tail = body.tail_node(); - if (tail instanceof AST_Await && is_primitive(compressor, tail.expression)) { - tail = tail.expression.drop_side_effect_free(compressor); - body.expressions.pop(); - if (tail) body.expressions.push(tail); + var exprs = body.expressions; + for (var i = exprs.length; --i >= 0;) { + var tail = exprs[i]; + if (!(tail instanceof AST_Await)) break; + if (!is_primitive(compressor, tail.expression)) break; + if (exprs[i] = tail.expression.drop_side_effect_free(compressor)) break; + } + switch (i) { + case -1: + return make_node(AST_EmptyStatement, node); + case 0: + node.body = exprs[0]; + break; + default: + exprs.length = i + 1; + break; } } return node; diff --git a/test/compress/awaits.js b/test/compress/awaits.js index 28558bd2..f27fb599 100644 --- a/test/compress/awaits.js +++ b/test/compress/awaits.js @@ -1758,3 +1758,25 @@ issue_4987: { ] node_version: ">=8" } + +issue_5001: { + options = { + awaits: true, + inline: true, + side_effects: true, + } + input: { + var a = 0; + (async function() { + a++ | await 42; + })(); + console.log(a ? "PASS" : "FAIL"); + } + expect: { + var a = 0; + void a++; + console.log(a ? "PASS" : "FAIL"); + } + expect_stdout: "PASS" + node_version: ">=8" +}