Source code
Revision control
Copy as Markdown
Other Tools
// This function uses UCE to test when the if branch is removed by
// IonMonkey. Some optimization such as Scalar Replacement are able to remove
// the scope chain, which can cause issues when the scope chain properties are
// not initialized properly.
var uceFault = function (i) {
if (i % 1500 == 0) {
uceFault = function (i) { return i % 1500 == 0; };
}
return false;
};
function f(i) {
if (uceFault(i) || uceFault(i))
g();
const x = 42;
function g() {
return x;
}
return g;
}
function loop() {
for (; i < 4000; i++)
assertEq(f(i)(), 42);
}
var caught = 0;
var i = 1;
while (i < 4000) {
try {
loop();
} catch(e) {
assertEq(e instanceof ReferenceError, true);
assertEq(i == 1500 || i == 3000, true);
caught += 1;
i++;
}
}
assertEq(caught, 2);