Skip to content

Commit

Permalink
fix(es/minifier): Fix code for dropping unreachable statements (#6429)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #6405.
  • Loading branch information
kdy1 committed Nov 15, 2022
1 parent e117bc4 commit bb544ba
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 9 deletions.
10 changes: 1 addition & 9 deletions crates/swc_ecma_minifier/src/compress/pure/dead_code.rs
Expand Up @@ -269,15 +269,7 @@ impl Pure<'_> {
);
}

match stmts[idx].as_stmt() {
Some(Stmt::Return(ReturnStmt { arg: None, .. })) => {
// Exclude return
new_stmts.extend(stmts.drain(..idx));
}
_ => {
new_stmts.extend(stmts.drain(..=idx));
}
}
new_stmts.extend(stmts.drain(..=idx));

new_stmts.extend(hoisted_fns);

Expand Down
14 changes: 14 additions & 0 deletions crates/swc_ecma_minifier/tests/pass-1/issue-6405/1/input.js
@@ -0,0 +1,14 @@
export const fn = () => {
let val;

if (!val) {
return undefined;
// works as expected if comment out below line
throw new Error('first');
}

if (val.a?.b !== true) { // Uncaught TypeError: Cannot read properties of undefined (reading 'a')
throw new Error('second');
}
return val;
}
7 changes: 7 additions & 0 deletions crates/swc_ecma_minifier/tests/pass-1/issue-6405/1/output.js
@@ -0,0 +1,7 @@
export const fn = ()=>{
let val;
if (!!val) {
if (val.a?.b !== !0) throw Error('second');
return val;
}
};

2 comments on commit bb544ba

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: bb544ba Previous: 9600308 Ratio
es/full/bugs-1 367751 ns/iter (± 203364) 358728 ns/iter (± 20211) 1.03
es/full/minify/libraries/antd 12738437892 ns/iter (± 2721999605) 1970753614 ns/iter (± 83209994) 6.46
es/full/minify/libraries/d3 2243799199 ns/iter (± 495758453) 436403414 ns/iter (± 15106176) 5.14
es/full/minify/libraries/echarts 9137695707 ns/iter (± 627387443) 1649793064 ns/iter (± 61295639) 5.54
es/full/minify/libraries/jquery 688761246 ns/iter (± 144412401) 120893988 ns/iter (± 7793123) 5.70
es/full/minify/libraries/lodash 696059032 ns/iter (± 225730691) 139829224 ns/iter (± 7717097) 4.98
es/full/minify/libraries/moment 280589590 ns/iter (± 130493563) 67507421 ns/iter (± 2083928) 4.16
es/full/minify/libraries/react 54290508 ns/iter (± 10038943) 22202854 ns/iter (± 1072765) 2.45
es/full/minify/libraries/terser 2407548044 ns/iter (± 238808274) 359007216 ns/iter (± 8807000) 6.71
es/full/minify/libraries/three 4214102218 ns/iter (± 348135165) 616147879 ns/iter (± 12528583) 6.84
es/full/minify/libraries/typescript 23813881571 ns/iter (± 543816685) 3581732217 ns/iter (± 45334056) 6.65
es/full/minify/libraries/victory 5954681550 ns/iter (± 438502100) 881184048 ns/iter (± 19875891) 6.76
es/full/minify/libraries/vue 1017633454 ns/iter (± 213860154) 179471415 ns/iter (± 4730819) 5.67
es/full/codegen/es3 35635 ns/iter (± 4891) 34424 ns/iter (± 3250) 1.04
es/full/codegen/es5 35582 ns/iter (± 5846) 33917 ns/iter (± 3412) 1.05
es/full/codegen/es2015 36014 ns/iter (± 9531) 34112 ns/iter (± 1702) 1.06
es/full/codegen/es2016 35165 ns/iter (± 2406) 34087 ns/iter (± 5975) 1.03
es/full/codegen/es2017 35357 ns/iter (± 4231) 33948 ns/iter (± 4008) 1.04
es/full/codegen/es2018 35639 ns/iter (± 3679) 34556 ns/iter (± 3726) 1.03
es/full/codegen/es2019 35685 ns/iter (± 5038) 35521 ns/iter (± 4079) 1.00
es/full/codegen/es2020 35407 ns/iter (± 5120) 34688 ns/iter (± 3803) 1.02
es/full/all/es3 327846481 ns/iter (± 187578606) 212352806 ns/iter (± 12823051) 1.54
es/full/all/es5 225360514 ns/iter (± 183396960) 198628693 ns/iter (± 10760155) 1.13
es/full/all/es2015 192773879 ns/iter (± 162767019) 145676177 ns/iter (± 5143401) 1.32
es/full/all/es2016 239316360 ns/iter (± 122950047) 149710787 ns/iter (± 13111995) 1.60
es/full/all/es2017 276547865 ns/iter (± 160674054) 150991913 ns/iter (± 6325256) 1.83
es/full/all/es2018 248456241 ns/iter (± 168108418) 156666514 ns/iter (± 14027559) 1.59
es/full/all/es2019 176506771 ns/iter (± 114913441) 151802647 ns/iter (± 9561704) 1.16
es/full/all/es2020 187976892 ns/iter (± 65886548) 145116045 ns/iter (± 8847937) 1.30
es/full/parser 1034504 ns/iter (± 330922) 729070 ns/iter (± 64347) 1.42
es/full/base/fixer 27362 ns/iter (± 3639) 27598 ns/iter (± 2217) 0.99
es/full/base/resolver_and_hygiene 95006 ns/iter (± 10461) 91640 ns/iter (± 7732) 1.04
serialization of ast node 232 ns/iter (± 19) 223 ns/iter (± 24) 1.04
serialization of serde 230 ns/iter (± 17) 228 ns/iter (± 24) 1.01

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 2.

Benchmark suite Current: bb544ba Previous: 9600308 Ratio
es/full/minify/libraries/antd 12738437892 ns/iter (± 2721999605) 1970753614 ns/iter (± 83209994) 6.46
es/full/minify/libraries/d3 2243799199 ns/iter (± 495758453) 436403414 ns/iter (± 15106176) 5.14
es/full/minify/libraries/echarts 9137695707 ns/iter (± 627387443) 1649793064 ns/iter (± 61295639) 5.54
es/full/minify/libraries/jquery 688761246 ns/iter (± 144412401) 120893988 ns/iter (± 7793123) 5.70
es/full/minify/libraries/lodash 696059032 ns/iter (± 225730691) 139829224 ns/iter (± 7717097) 4.98
es/full/minify/libraries/moment 280589590 ns/iter (± 130493563) 67507421 ns/iter (± 2083928) 4.16
es/full/minify/libraries/react 54290508 ns/iter (± 10038943) 22202854 ns/iter (± 1072765) 2.45
es/full/minify/libraries/terser 2407548044 ns/iter (± 238808274) 359007216 ns/iter (± 8807000) 6.71
es/full/minify/libraries/three 4214102218 ns/iter (± 348135165) 616147879 ns/iter (± 12528583) 6.84
es/full/minify/libraries/typescript 23813881571 ns/iter (± 543816685) 3581732217 ns/iter (± 45334056) 6.65
es/full/minify/libraries/victory 5954681550 ns/iter (± 438502100) 881184048 ns/iter (± 19875891) 6.76
es/full/minify/libraries/vue 1017633454 ns/iter (± 213860154) 179471415 ns/iter (± 4730819) 5.67

This comment was automatically generated by workflow using github-action-benchmark.

CC: @kdy1

Please sign in to comment.