Skip to content

minify: Construction of class with side-effect free constructor is not treated as dead code #11320

@dmichon-msft

Description

@dmichon-msft

Describe the bug

Invoking a constructor for a class that only delegates to Object() is a side-effect free operation and should be able to be discarded.

Input code

new class {}

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
      },
      "mangle": false
    }
  },
  "module": {
    "type": "commonjs"
  },
  "minify": false,
  "isModule": true
}

Link to the code that reproduces this issue

https://play.swc.rs/?version=1.15.2&code=H4sIAAAAAAAAA8tLLVdIzkksLlaorgUARnxBwQwAAAA%3D&config=H4sIAAAAAAAAA32US47bMAyG93OKwOsuikFXc4DuegZBsShHqSQaIpWJMcjdS8vOoxM6O5sff1IiKX697XbdkfruY%2Fcln%2FIz2kJQbv9ioSmzPYulgz5Z6ksYuftxpUeakbeRoJkuC%2BnYlgG4qej95%2FuvVdFFRIKrYrWlkIOfHnP2mMYCRA82sUrImiAz%2Fa9fWcHPGXCpj%2FY9YgSbXxBjyYTMMEDRAvcYox0JzMkWJcp8UlsCoZZihpXBmbHgqPLsAgfMkvOZOrDO9OhAQaFAz%2BEEmkxyiSyTXE%2B5T8MO9nUYWp%2B%2FqeFkY7Ws5IRza4mcVol6wEBsfM1aCRe4UYMFrsX9rgzeFOBa8rPuiCFv9OQvgFQgWqJsE2hxm4eXedpS%2B5fKkL2MLE8Kl%2FnWbplhkKKaELxS2bkyUDho3Szgag9zZXvtOCveKB8FBwa8l1lRQtNn4P6gJeVpBPQKkP5ar03VAsztFW7w%2BUG8wL%2FllqwP2OqRLB%2B2KU1pj%2FFFggR8QPfCQVrBuI2LbInzuM1rdiCjAU51qdTA8xKQB8BoYtuXT7Mhz0MimiHi%2Fr4mVofLbQ8nm4f7e19W8dvq0CV0tcF1yc%2F9nVeztCNhPlJ397yu4tvpu0B%2FrvKW%2BfIP0%2BWeLDUGAAA%3D

SWC Info output

No response

Expected behavior

new class {} gets removed from the output

Actual behavior

new class {} remains in the output

Version

1.15.2

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions