Skip to content

var use before defined incorrect, let/const TDZ errors masked by tree shaking #4101

@kzc

Description

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

Repro

$ cat misc.js
(function bug1() {
    var first = state();
    var on = true;
    var obj = { state: state };
    console.log(first, obj.state());
    function state() {
        return on ? "ON" : "OFF";
    }
})();
(function bug2() {
    var a = "PASS";
    for (var b = 2; --b >= 0; ) {
        (function() {
            var c = function() {
                return 1;
            }(c && (a = "FAIL"));
        })();
    }
    console.log(a);
})();

Expected Behavior

$ cat misc.js | node
OFF ON
PASS

Actual Behavior

$ cat misc.js | rollup --silent | node
ON ON
FAIL
$ cat misc.js | rollup --silent
(function bug1() {
    var first = state();
    var obj = { state: state };
    console.log(first, obj.state());
    function state() {
        return "ON" ;
    }
})();
(function bug2() {
    var a = "PASS";
    for (var b = 2; --b >= 0; ) {
        (function() {
            (function() {
                return 1;
            })((a = "FAIL"));
        })();
    }
    console.log(a);
})();

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