Currently minifier ignores side effects in the catch block if expressions in try block seem not to throw exceptions (e.g. identifier lookup). But we can deceive this logic with referencing variable in TDZ which can make ReferenceError.
Input code
let x;
try {
c;
} catch (e) {
x = "SUCCESS";
}
const c = 2;
console.log(x);
Describe the bug
Currently minifier ignores side effects in the catch block if expressions in try block seem not to throw exceptions (e.g. identifier lookup). But we can deceive this logic with referencing variable in TDZ which can make
ReferenceError
.Input code
Config
Playground link (or link to the minimal reproduction)
https://play.swc.rs/?version=1.7.18&code=H4sIAAAAAAAAA8tJLVGosOYqKapUqOZSAIJka65aheTEkuQMBY1UTahghYKtglJwqLOza3CwElABV3J%2BXnGJQjJQ2MgazMnPSdXLyU%2FXqNC0BgCpMQs%2BUwAAAA%3D%3D&config=H4sIAAAAAAAAA32UO3LjMAyG%2B5zCozrFjostcoDtcgYOLYIyvSShIUDHmozvvtDDj40hdRI%2B%2FAAJgPh%2B2%2B2aE7XNx%2B5bPuWnt4Wg3P%2FFQkNmexFLA22y1JbQc%2FN%2BoycakbeRYDJdZ9KwLR3wpKL9r%2F1%2BUTQRkeCmWGwp5OCH55wtpr4A0ZNNrBKyJshM%2F%2BsXVvBrBFzqs%2F2AGMHmDWIsmZAZOiha4BZjtD2BOduiRBlPaksg1FKMsDI40xfsVZ5d4IBZcr5SB9aZFh0oKBRoOZxBk0kukWWS6yn3mbCDQ%2B26qc8%2F1HC2sVpWcsJlaomcVol6xEBsfM1aCWe4UoMZLsX9qQzeFOBa8qvuhCGv9OQvgFQgWqJsE2hxJw8v87Sm9pvKkL2MLA8Kl%2FnWbpmhk6KaELxS2bEyUDho3SzgagtjZVvtOAteKR8FBwa8l1lRQtNX4PaoJeWhB%2FQKkP5ar03VDMz9Fa7w8UFs4D9yS9YHbPFIlo%2FrlIZ0wLiRIAEf0W04SCsY13GRLXHp13nNDmQ0wKkulSbwugTkATCaOO3Ll9mQ5yERTRfx8FgTi8P1voeTzd3jvc%2Br%2BG1xaBK6OsFlyY%2F9nVfz7%2BbhdNvC94M3gT5vyjns9R%2F7ntJqMQYAAA%3D%3D
SWC Info output
No response
Expected behavior
Ignoring side effects in catch block should not happen when referencing variables in TDZ.
Actual behavior
No response
Version
1.7.18
Additional context
No response