prepack
prepack copied to clipboard
Multiple returns under abstract conditions cause incorrect output
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;
})();