Skip to content

Commit

Permalink
fix(es/minifier): Don't drop assignments to unused top-level variables (
Browse files Browse the repository at this point in the history
#7581)

**Related issue:**

 - Closes #7568
  • Loading branch information
kdy1 committed Jun 27, 2023
1 parent d3b934f commit a685c88
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 1 deletion.
2 changes: 2 additions & 0 deletions crates/swc_ecma_minifier/src/compress/optimize/unused.rs
Original file line number Diff line number Diff line change
Expand Up @@ -711,6 +711,8 @@ impl Optimizer<'_> {
&& var.usage_count == 0
&& var.declared
&& (!var.declared_as_fn_param || !used_arguments || self.ctx.in_strict)
&& (self.options.top_level()
|| i.span.ctxt != self.marks.top_level_ctxt)
{
report_change!(
"unused: Dropping assignment to var '{}{:?}', which is never used",
Expand Down
1 change: 1 addition & 0 deletions crates/swc_ecma_minifier/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ pub fn optimize(
let _timer = timer!("minify");

let mut marks = Marks::new();
marks.top_level_ctxt = SyntaxContext::empty().apply_mark(extra.top_level_mark);
marks.unresolved_mark = extra.unresolved_mark;

debug_assert_valid(&n);
Expand Down
28 changes: 28 additions & 0 deletions crates/swc_ecma_minifier/tests/fixture/issues/7568/1/input.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
var specific_microfront;
(function () { // webpackBootstrap
"use strict";
var __webpack_modules__ = ({



});
function __webpack_require__(moduleId) {
var module = __webpack_module_cache__[moduleId] = {
id: moduleId,
loaded: false,
exports: {}

};

__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
module.loaded = true;
return module.exports;

}

var __webpack_exports__ = __webpack_require__("webpack/container/entry/specific_page");
specific_microfront = __webpack_exports__;


})()
;
13 changes: 13 additions & 0 deletions crates/swc_ecma_minifier/tests/fixture/issues/7568/1/output.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
var specific_microfront;
!function() {
"use strict";
var __webpack_modules__ = {};
specific_microfront = function __webpack_require__(moduleId) {
var module = __webpack_module_cache__[moduleId] = {
id: moduleId,
loaded: !1,
exports: {}
};
return __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__), module.loaded = !0, module.exports;
}("webpack/container/entry/specific_page");
}();
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"defaults": true,
"toplevel": false,
"passes": 0
}
5 changes: 4 additions & 1 deletion crates/swc_ecma_usage_analyzer/src/marks.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#![allow(dead_code)]

use swc_common::Mark;
use swc_common::{Mark, SyntaxContext};

#[derive(Debug, Clone, Copy)]
pub struct Marks {
Expand Down Expand Up @@ -47,6 +47,8 @@ pub struct Marks {
/// preserve the side effects.
pub fake_block: Mark,

pub top_level_ctxt: SyntaxContext,

pub unresolved_mark: Mark,
}

Expand All @@ -66,6 +68,7 @@ impl Marks {
noinline: m(),
pure: m(),
fake_block: m(),
top_level_ctxt: SyntaxContext::empty().apply_mark(m()),
unresolved_mark: m(),
}
}
Expand Down

1 comment on commit a685c88

@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: a685c88 Previous: c51eac6 Ratio
es/full/bugs-1 300702 ns/iter (± 8072) 307850 ns/iter (± 7005) 0.98
es/full/minify/libraries/antd 1530196337 ns/iter (± 39606913) 1499216627 ns/iter (± 13336075) 1.02
es/full/minify/libraries/d3 318782444 ns/iter (± 2503228) 326857856 ns/iter (± 5030623) 0.98
es/full/minify/libraries/echarts 1228113006 ns/iter (± 12381029) 1216721980 ns/iter (± 4134666) 1.01
es/full/minify/libraries/jquery 96786725 ns/iter (± 590829) 96103828 ns/iter (± 276720) 1.01
es/full/minify/libraries/lodash 114518606 ns/iter (± 630420) 113997037 ns/iter (± 310001) 1.00
es/full/minify/libraries/moment 56657606 ns/iter (± 116633) 56402850 ns/iter (± 147884) 1.00
es/full/minify/libraries/react 20296876 ns/iter (± 55812) 20179856 ns/iter (± 56978) 1.01
es/full/minify/libraries/terser 250535579 ns/iter (± 1795928) 249254724 ns/iter (± 1331291) 1.01
es/full/minify/libraries/three 449169366 ns/iter (± 6666408) 441591082 ns/iter (± 3187777) 1.02
es/full/minify/libraries/typescript 3052065120 ns/iter (± 29510280) 2984966561 ns/iter (± 23837648) 1.02
es/full/minify/libraries/victory 655212785 ns/iter (± 5814990) 646276508 ns/iter (± 6493880) 1.01
es/full/minify/libraries/vue 140222410 ns/iter (± 628938) 138505148 ns/iter (± 756395) 1.01
es/full/codegen/es3 38057 ns/iter (± 148) 36091 ns/iter (± 83) 1.05
es/full/codegen/es5 38104 ns/iter (± 387) 36201 ns/iter (± 451) 1.05
es/full/codegen/es2015 38066 ns/iter (± 104) 36203 ns/iter (± 92) 1.05
es/full/codegen/es2016 38098 ns/iter (± 84) 36232 ns/iter (± 69) 1.05
es/full/codegen/es2017 38092 ns/iter (± 266) 36285 ns/iter (± 115) 1.05
es/full/codegen/es2018 38021 ns/iter (± 121) 36240 ns/iter (± 74) 1.05
es/full/codegen/es2019 38038 ns/iter (± 66) 36202 ns/iter (± 49) 1.05
es/full/codegen/es2020 38208 ns/iter (± 115) 36163 ns/iter (± 69) 1.06
es/full/all/es3 178271750 ns/iter (± 812864) 180179692 ns/iter (± 1146607) 0.99
es/full/all/es5 169887196 ns/iter (± 628434) 172299694 ns/iter (± 1341532) 0.99
es/full/all/es2015 126779085 ns/iter (± 902045) 127958144 ns/iter (± 749759) 0.99
es/full/all/es2016 125819303 ns/iter (± 593737) 127256605 ns/iter (± 754680) 0.99
es/full/all/es2017 125055868 ns/iter (± 547228) 126685193 ns/iter (± 686860) 0.99
es/full/all/es2018 123010905 ns/iter (± 537055) 124808703 ns/iter (± 533041) 0.99
es/full/all/es2019 122490780 ns/iter (± 878266) 123819585 ns/iter (± 461679) 0.99
es/full/all/es2020 117852307 ns/iter (± 343535) 119133908 ns/iter (± 508611) 0.99
es/full/parser 510294 ns/iter (± 8552) 521528 ns/iter (± 5389) 0.98
es/full/base/fixer 19659 ns/iter (± 73) 18807 ns/iter (± 86) 1.05
es/full/base/resolver_and_hygiene 94089 ns/iter (± 141) 91939 ns/iter (± 354) 1.02
serialization of serde 309 ns/iter (± 5) 297 ns/iter (± 5) 1.04
css/minify/libraries/bootstrap 31020882 ns/iter (± 437350) 30758649 ns/iter (± 66670) 1.01
css/visitor/compare/clone 2007259 ns/iter (± 22672) 2158803 ns/iter (± 13971) 0.93
css/visitor/compare/visit_mut_span 2150211 ns/iter (± 23631) 2271270 ns/iter (± 7559) 0.95
css/visitor/compare/visit_mut_span_panic 2206453 ns/iter (± 35189) 2341710 ns/iter (± 17596) 0.94
css/visitor/compare/fold_span 2869947 ns/iter (± 18222) 3051582 ns/iter (± 8974) 0.94
css/visitor/compare/fold_span_panic 3116746 ns/iter (± 22477) 3261413 ns/iter (± 7919) 0.96
css/lexer/bootstrap_5_1_3 4777703 ns/iter (± 5218) 4756965 ns/iter (± 2832) 1.00
css/lexer/foundation_6_7_4 4030557 ns/iter (± 3285) 4016465 ns/iter (± 9187) 1.00
css/lexer/tailwind_3_1_1 765872 ns/iter (± 374) 763166 ns/iter (± 694) 1.00
css/parser/bootstrap_5_1_3 20547287 ns/iter (± 111827) 20544743 ns/iter (± 21424) 1.00
css/parser/foundation_6_7_4 16563419 ns/iter (± 75426) 16459485 ns/iter (± 11172) 1.01
css/parser/tailwind_3_1_1 3192170 ns/iter (± 3567) 3174752 ns/iter (± 2562) 1.01
es/codegen/colors 746003 ns/iter (± 405666) 724744 ns/iter (± 395130) 1.03
es/codegen/large 2983601 ns/iter (± 1560344) 2985413 ns/iter (± 1597633) 1.00
es/codegen/with-parser/colors 48211 ns/iter (± 212) 48760 ns/iter (± 180) 0.99
es/codegen/with-parser/large 514873 ns/iter (± 1469) 525228 ns/iter (± 1118) 0.98
es/minify/libraries/antd 1325979134 ns/iter (± 16206970) 1316674067 ns/iter (± 14069458) 1.01
es/minify/libraries/d3 281602137 ns/iter (± 3249203) 279933947 ns/iter (± 782392) 1.01
es/minify/libraries/echarts 1074196803 ns/iter (± 26813959) 1053742156 ns/iter (± 7064378) 1.02
es/minify/libraries/jquery 84191798 ns/iter (± 181218) 84291718 ns/iter (± 688777) 1.00
es/minify/libraries/lodash 103099452 ns/iter (± 226398) 102912315 ns/iter (± 341492) 1.00
es/minify/libraries/moment 49621633 ns/iter (± 159098) 49501940 ns/iter (± 94379) 1.00
es/minify/libraries/react 18034840 ns/iter (± 63836) 17941932 ns/iter (± 41266) 1.01
es/minify/libraries/terser 219824527 ns/iter (± 4320027) 214167460 ns/iter (± 913091) 1.03
es/minify/libraries/three 375602734 ns/iter (± 7853268) 371124968 ns/iter (± 1999769) 1.01
es/minify/libraries/typescript 2613548883 ns/iter (± 17019010) 2598460085 ns/iter (± 16564767) 1.01
es/minify/libraries/victory 581822503 ns/iter (± 16985063) 550462286 ns/iter (± 4858725) 1.06
es/minify/libraries/vue 124354603 ns/iter (± 556986) 124639547 ns/iter (± 1489054) 1.00
es/visitor/compare/clone 2049493 ns/iter (± 5958) 2081840 ns/iter (± 5350) 0.98
es/visitor/compare/visit_mut_span 2356426 ns/iter (± 10853) 2406792 ns/iter (± 6301) 0.98
es/visitor/compare/visit_mut_span_panic 2434454 ns/iter (± 13063) 2467371 ns/iter (± 3604) 0.99
es/visitor/compare/fold_span 3468974 ns/iter (± 5913) 3501037 ns/iter (± 6305) 0.99
es/visitor/compare/fold_span_panic 3602051 ns/iter (± 4743) 3623322 ns/iter (± 5289) 0.99
es/lexer/colors 13226 ns/iter (± 16) 13078 ns/iter (± 174) 1.01
es/lexer/angular 6256129 ns/iter (± 25227) 6166479 ns/iter (± 34715) 1.01
es/lexer/backbone 818320 ns/iter (± 1412) 801836 ns/iter (± 2129) 1.02
es/lexer/jquery 4625582 ns/iter (± 7431) 4548207 ns/iter (± 7626) 1.02
es/lexer/jquery mobile 7094991 ns/iter (± 7579) 6950472 ns/iter (± 4535) 1.02
es/lexer/mootools 3633958 ns/iter (± 4437) 3584082 ns/iter (± 10081) 1.01
es/lexer/underscore 684868 ns/iter (± 1422) 669117 ns/iter (± 937) 1.02
es/lexer/three 21574940 ns/iter (± 10498) 21285176 ns/iter (± 24274) 1.01
es/lexer/yui 4086774 ns/iter (± 4970) 4031540 ns/iter (± 4656) 1.01
es/parser/colors 29359 ns/iter (± 68) 29399 ns/iter (± 56) 1.00
es/parser/angular 14995343 ns/iter (± 285657) 14384268 ns/iter (± 71377) 1.04
es/parser/backbone 2149494 ns/iter (± 11679) 2154496 ns/iter (± 12257) 1.00
es/parser/jquery 11730011 ns/iter (± 51692) 11770536 ns/iter (± 73287) 1.00
es/parser/jquery mobile 17937253 ns/iter (± 111199) 17903218 ns/iter (± 136850) 1.00
es/parser/mootools 8961230 ns/iter (± 18993) 8935444 ns/iter (± 20906) 1.00
es/parser/underscore 1859743 ns/iter (± 9034) 1852752 ns/iter (± 10748) 1.00
es/parser/three 50950144 ns/iter (± 374973) 49972545 ns/iter (± 299521) 1.02
es/parser/yui 9019260 ns/iter (± 48751) 8960639 ns/iter (± 34909) 1.01
es/preset-env/usage/builtin_type 142274 ns/iter (± 33045) 141458 ns/iter (± 32314) 1.01
es/preset-env/usage/property 18402 ns/iter (± 70) 18357 ns/iter (± 47) 1.00
es/resolver/typescript 95613837 ns/iter (± 1582665) 96390274 ns/iter (± 710609) 0.99
es/fixer/typescript 67506786 ns/iter (± 1353675) 65842798 ns/iter (± 431499) 1.03
es/hygiene/typescript 147645506 ns/iter (± 2943625) 146307577 ns/iter (± 2169951) 1.01
es/resolver_with_hygiene/typescript 305987153 ns/iter (± 4182608) 302965297 ns/iter (± 2368803) 1.01
es/visitor/base-perf/module_clone 61273 ns/iter (± 225) 61249 ns/iter (± 260) 1.00
es/visitor/base-perf/fold_empty 64901 ns/iter (± 302) 64768 ns/iter (± 364) 1.00
es/visitor/base-perf/fold_noop_impl_all 65309 ns/iter (± 284) 64827 ns/iter (± 334) 1.01
es/visitor/base-perf/fold_noop_impl_vec 65418 ns/iter (± 277) 65243 ns/iter (± 255) 1.00
es/visitor/base-perf/boxing_boxed_clone 57 ns/iter (± 0) 56 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 40 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 113 ns/iter (± 0) 114 ns/iter (± 0) 0.99
es/visitor/base-perf/boxing_unboxed 80 ns/iter (± 0) 80 ns/iter (± 0) 1
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2642 ns/iter (± 16) 2582 ns/iter (± 3) 1.02
es/base/parallel/resolver/typescript 4533905625 ns/iter (± 216622800) 4475626325 ns/iter (± 279886099) 1.01
es/base/parallel/hygiene/typescript 1605815548 ns/iter (± 21258358) 1600949337 ns/iter (± 11090197) 1.00
misc/visitors/time-complexity/time 5 105 ns/iter (± 0) 106 ns/iter (± 1) 0.99
misc/visitors/time-complexity/time 10 311 ns/iter (± 0) 278 ns/iter (± 0) 1.12
misc/visitors/time-complexity/time 15 531 ns/iter (± 3) 531 ns/iter (± 0) 1
misc/visitors/time-complexity/time 20 1096 ns/iter (± 3) 1111 ns/iter (± 3) 0.99
misc/visitors/time-complexity/time 40 3727 ns/iter (± 9) 3822 ns/iter (± 15) 0.98
misc/visitors/time-complexity/time 60 7734 ns/iter (± 21) 7824 ns/iter (± 94) 0.99
es/full-target/es2016 238816 ns/iter (± 1108) 241321 ns/iter (± 1103) 0.99
es/full-target/es2017 229267 ns/iter (± 1079) 228575 ns/iter (± 530) 1.00
es/full-target/es2018 215547 ns/iter (± 961) 216696 ns/iter (± 747) 0.99
es2020_nullish_coalescing 72725 ns/iter (± 314) 73137 ns/iter (± 386) 0.99
es2020_optional_chaining 84058 ns/iter (± 299) 85155 ns/iter (± 320) 0.99
es2022_class_properties 121082 ns/iter (± 332) 122631 ns/iter (± 979) 0.99
es2018_object_rest_spread 76662 ns/iter (± 223) 77799 ns/iter (± 163) 0.99
es2019_optional_catch_binding 66271 ns/iter (± 183) 66730 ns/iter (± 234) 0.99
es2017_async_to_generator 64746 ns/iter (± 189) 65142 ns/iter (± 330) 0.99
es2016_exponentiation 69971 ns/iter (± 216) 71612 ns/iter (± 293) 0.98
es2015_arrow 73335 ns/iter (± 320) 75241 ns/iter (± 257) 0.97
es2015_block_scoped_fn 69868 ns/iter (± 220) 71663 ns/iter (± 222) 0.97
es2015_block_scoping 132302 ns/iter (± 538) 135655 ns/iter (± 388) 0.98

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

Please sign in to comment.