-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
minify: self-reference in class with external superclass not detected as dead code #11730
Copy link
Copy link
Open
Description
Describe the bug
Found another interesting dead code elimination bug in the minifier.
Replacing Dead.x with Dead -> no repro
Remove extends Unknown -> no repro
Various other expression types, e.g. new Dead() will also trigger the behavior.
Input code
someFunction(function f() {
class Dead extends Unknown {
m() { Dead.x; }
}
return 0;
})Config
{
"jsc": {
"parser": {
"syntax": "ecmascript",
"jsx": false
},
"target": "es2024",
"loose": false,
"minify": {
"compress": {
"arguments": false,
"arrows": true,
"booleans": true,
"booleans_as_integers": false,
"collapse_vars": true,
"comparisons": true,
"computed_props": true,
"conditionals": true,
"dead_code": true,
"directives": true,
"drop_console": false,
"drop_debugger": true,
"evaluate": true,
"expression": false,
"hoist_funs": false,
"hoist_props": true,
"hoist_vars": false,
"if_return": true,
"join_vars": true,
"keep_classnames": false,
"keep_fargs": true,
"keep_fnames": false,
"keep_infinity": false,
"loops": true,
"negate_iife": true,
"properties": true,
"reduce_funcs": false,
"reduce_vars": false,
"side_effects": true,
"switches": true,
"typeofs": true,
"unsafe": false,
"unsafe_arrows": false,
"unsafe_comps": false,
"unsafe_Function": false,
"unsafe_math": false,
"unsafe_symbols": false,
"unsafe_methods": false,
"unsafe_proto": false,
"unsafe_regexp": false,
"unsafe_undefined": false,
"unused": true,
"const_to_let": true,
"pristine_globals": true,
"passes": 0
},
"mangle": false
}
},
"module": {
"type": "es6"
},
"minify": false,
"isModule": true
}Link to the code that reproduces this issue
SWC Info output
No response
Expected behavior
The class Dead expression should be eliminated in its entirety, leaving at most return Unknown, 0.
Actual behavior
The entire class Dead definition is retained.
Version
1.15.21
Additional context
No response
Reactions are currently unavailable