summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/ion/lexical-check-6.js
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);