prepack icon indicating copy to clipboard operation
prepack copied to clipboard

Multiple returns under abstract conditions cause incorrect output

Open calebmer opened this issue 5 years ago • 0 comments

Prepack outputs invalid code without a diagnostic. Multiple returns under abstract conditions seem to cause incorrect output.

main(false, false, false);

// Expected: false
//   Actual: true

Input

(function() {
  "use strict";

  function main(a1, a2, a3) {
    if (a1) {
      if (a2) {
        return false;
      }
    }

    if (!a3) {
      return false;
    }

    return true;
  }

  if (global.__optimize) __optimize(main);
  module.exports = main;
})();

Output

(function() {
  "use strict";

  var _2 = function(a1, a2, a3) {
    return a1 ? (a2 ? false : a3) : true;
  };

  module.exports = _2;
})();

calebmer avatar Aug 01 '18 23:08 calebmer