Skip to content

[Bug]: optimization to remove intermediate variable leads to runtime behavior change #7093

@jkieboom

Description

@jkieboom

Reproduction link or steps

https://repl.rolldown.rs/#eNptUEFqwzAQ/MqiSxIwfoBC+oWWnn0x9rqoyCsjrZIUo793ZVm40NxmtJqZnV3VpPSqDI34bDlkTEofvFGDUIsM4zTCDShae+2oo8FRYFi8m03APMAHfBR2PnsMzt6xAY/fOPAFbm+wdgS7yQahijVESZsM4diUQZVXlj0yTpKcLlu8GLVH+I6usi4qzT5iapR31o7uQa2sOpmvP+1eTEpPMy/OM/DPgrDC5/7tfWEjbSHBJDlwqvLTcYdipP9J9q6Glsgain07I/ft9iQNUzbB55YrV+ijrW4dqSQ17vn+PWNglX4BhDWVkQ==

What is expected?

The intermediate variable should not be removed since assigning dfd.promise relies on the fact that the promise initialization was run first. rollup does not erase the variable.

rollup repl:

https://rollupjs.org/repl/?version=4.53.2&shareable=eyJleGFtcGxlIjpudWxsLCJtb2R1bGVzIjpbeyJjb2RlIjoibGV0IGRmZCA9IG51bGw7XG5cbmNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIGRmZCA9IHtcbiAgICBwcm9taXNlOiB1bmRlZmluZWQsXG4gICAgICByZXNvbHZlLFxuICAgICByZWplY3RcbiAgfTtcbn0pO1xuXG5kZmQucHJvbWlzZSA9IHByb21pc2U7IiwiaXNFbnRyeSI6dHJ1ZSwibmFtZSI6Im1haW4uanMifSx7ImNvZGUiOiJleHBvcnQgY29uc3QgcXV4ID0gJ1FVWCc7IiwiaXNFbnRyeSI6ZmFsc2UsIm5hbWUiOiJxdXguanMifV0sIm9wdGlvbnMiOnt9fQ==now

swc repl:

https://play.swc.rs/?version=1.15.2&code=H4sIAAAAAAAAA0WNQQqAIAAE775ijwXRA5J6Q3%2FIDQrTUKtD9Pe0jG6zC7OrGaBGhRZm01oKMVjjA1Znl8kz1TzQv6koHL3VOys4zhxCibbDKZAXEuFTG2xGcZwMVfX0n5tD8iNeUlxlvI0L9X%2BaSd4hvf81ngAAAA%3D%3D&config=H4sIAAAAAAAAA1WPSw7DIAwF9zkF8rrbdtE79BAWdSIifrKJVBTl7iUE0maH3xsz8jooBbNoeKq1PMsQkYX4nEsi2Sf8lARIOxTNJia49XaWvRrRCtVoOxpIyBOluiX3hoMNQajjLXPGmzH%2FC3VwkUnkCu4o%2BsnSVTc0JbjwXmrZDkk50qF%2FwA%2FqsvNjMPLqm4kXGrYvhlQioBQBAAA%3D

What is actually happening?

rolldown erases the intermediate variable causing a runtime exception (cannot assign to null)

System Info

System:
    OS: macOS 15.7.1
    CPU: (12) arm64 Apple M2 Pro
    Memory: 1.67 GB / 32.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 24.11.0 - /Users/jess7953/.nvm/versions/node/v24.11.0/bin/node
    npm: 11.6.1 - /Users/jess7953/.nvm/versions/node/v24.11.0/bin/npm
  npmPackages:
    rolldown: ^1.0.0-beta.50 => 1.0.0-beta.50

Any additional comments?

I know this is a contrived example and it's a bit dubious, but I think optimization should not change runtime behavior.

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions