blob: 5af7686aeec9efea469f4701feefd13e1cc9a0c1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
// 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);
|