Skip to content

treeshake bug: __proto__ side effects in object literals ignored #4094

@kzc

Description

@kzc
  • Rollup Version: rollup v2.50.0
  • Operating System (or Browser): n/a
  • Node Version (if applicable): v16.1.0

Repro

$ cat proto.js 
let getter_effect = "FAIL";
let setter_effect = "FAIL";
let proto = {
    get foo() {
        getter_effect = "PASS";
    },
    set bar(value) {
        setter_effect = "PASS";
    }
};
let obj1 = {
    __proto__: proto
};
let obj2 = {
    __proto__: proto
};
let unused = obj1.foo;
obj2.bar = 0;
console.log(getter_effect, setter_effect);

Expected Behavior

$ cat proto.js | node
PASS PASS

Actual Behavior

$ cat proto.js | rollup --silent | node
FAIL FAIL
$ cat proto.js | rollup --silent
let getter_effect = "FAIL";
let setter_effect = "FAIL";
console.log(getter_effect, setter_effect);

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions