Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tree-shaking mistakenly removes IF statement as a dead code (regression since 3.19.0) #5152

Closed
Pr05p3ro opened this issue Sep 22, 2023 · 2 comments · Fixed by #5153
Closed
Assignees

Comments

@Pr05p3ro
Copy link

Pr05p3ro commented Sep 22, 2023

Rollup Version

3.29.2

Operating System (or Browser)

MacOS 13.5.2

Node Version (if applicable)

v18.16.0

Link To Reproduction

https://rollupjs.org/repl/?version=3.29.2&shareable=JTdCJTIyZXhhbXBsZSUyMiUzQW51bGwlMkMlMjJtb2R1bGVzJTIyJTNBJTVCJTdCJTIybmFtZSUyMiUzQSUyMm1haW4uanMlMjIlMkMlMjJjb2RlJTIyJTNBJTIyJTJGKiUyMFRSRUUtU0hBS0lORyUyMColMkYlNUNuaW1wb3J0JTIwJy4lMkZtYXRocy5qcyclM0IlMjIlN0QlMkMlN0IlMjJuYW1lJTIyJTNBJTIybWF0aHMuanMlMjIlMkMlMjJjb2RlJTIyJTNBJTIyZnVuY3Rpb24lMjBjcmVhdGVDYWxsYmFjayhib3gpJTIwJTdCJTVDbiUyMCUyMHJldHVybiUyMChuZXdWYWx1ZSklMjAlM0QlM0UlMjAlN0IlNUNuJTIwJTIwJTIwJTIwYm94JTVCMCU1RCUyMCUzRCUyMG5ld1ZhbHVlJTNCJTVDbiU1Q24lMjAlMjAlMjAlMjByZXR1cm4lMjBib3glNUIwJTVEJTNCJTIwJTJGJTJGJTIwQ29tbWVudCUyMHRoaXMlMjBsaW5lJTIwdG8lMjBnZXQlMjBjb3JyZWN0JTIwb3V0cHV0JTVDbiUyMCUyMCU3RCUzQiU1Q24lN0QlNUNuJTVDbmZ1bmN0aW9uJTIwdGVzdCh2YWx1ZSklMjAlN0IlNUNuJTIwJTIwY29uc3QlMjBib3glMjAlM0QlMjAlNUJudWxsJTVEJTNCJTVDbiUyMCUyMGNvbnN0JTIwY2FsbGJhY2slMjAlM0QlMjBjcmVhdGVDYWxsYmFjayhib3gpJTNCJTVDbiU1Q24lMjAlMjAlMkYlMkYlMjBDYWxsYmFjayUyMGlzJTIwcGFzc2VkJTIwdG8lMjBleHRlcm5hbCUyMGxpYnJhcnklMjB0aGF0JTIwaW5kaXJlY3RseSUyMGNoYW5nZXMlMjBib3glNUIwJTVEJTIwdmFsdWUuJTVDbiUyMCUyMHdpbmRvdy5kb1NvbWV0aGluZyhjYWxsYmFjayUyQyUyMHZhbHVlKSUzQiU1Q24lNUNuJTIwJTIwJTJGJTJGJTIwc2ltcGxpZmljYXRpb24lMjB0byUyMCU2MHJldHVybiUyMGJveCU1QjAlNUQlMjAhJTNEJTIwbnVsbCUzQiU2MCUyMHdpbGwlMjBiZSUyMHByZXNlcnZlZCU1Q24lMjAlMjAlMkYlMkYlMjBob3dldmVyJTIwJTYwaWYlNjAlMjBpcyUyMHdyb25nbHklMjBkZXRlY3RlZCUyMGFzJTIwZGVhZCUyMGNvZGUlNUNuJTIwJTIwaWYlMjAoYm94JTVCMCU1RCUyMCElM0QlMjBudWxsKSUyMCU3QiU1Q24lMjAlMjAlMjAlMjByZXR1cm4lMjB0cnVlJTNCJTVDbiUyMCUyMCU3RCU1Q24lNUNuJTIwJTIwcmV0dXJuJTIwZmFsc2UlM0IlNUNuJTdEJTVDbiU1Q250ZXN0KDEpJTNCJTIyJTdEJTVEJTJDJTIyb3B0aW9ucyUyMiUzQSU3QiUyMm91dHB1dCUyMiUzQSU3QiUyMmZvcm1hdCUyMiUzQSUyMmVzJTIyJTdEJTJDJTIydHJlZXNoYWtlJTIyJTNBdHJ1ZSU3RCU3RA==

Expected Behaviour

if (box[0] != null) { ... } statement should be preserved, since box[0] is modified in runtime. Correct behaviour in 3.18.0 version: 3.18.0 REPL

Actual Behaviour

Up to version 3.18.0 in the following example (part of the code in REPL) if (box[0] != null) { ... } statement was preserved when tree-shaking is enabled.
Starting from version 3.19.0 if statement is removed as dead code even if "safest" tree-shaking preset is used.
Reproduced in version 3.29.2 and the only way to get correct output at the moment is to disable tree-shaking entirely.

function test(value) {
  const box = [null];
  const callback = createCallback(box);

  window.doSomething(callback, value);

  if (box[0] != null) {
    return true;
  }

  return false;
}
@lukastaegert
Copy link
Member

Thanks for spotting! Your analysis was spot on and very helpful, fix at #5153.

@rollup-bot
Copy link
Collaborator

This issue has been resolved via #5153 as part of rollup@3.29.3. You can test it via npm install rollup.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants