[JSC] AI should not propagate AbstractValue relying on constant folding phase
[WebKit-https.git] / JSTests / stress / ftl-call-varargs-exception.js
1 function foo(f, p) {
2     var x = 100;
3     var result = 101;
4     try {
5         x = 102;
6         p = 103;
7         result = f();
8         f = 104;
9         p = 105;
10         x = 106;
11     } catch (e) {
12         return {outcome: "exception", values: [f, p, x, result]};
13     }
14     return {outcome: "return", values: [f, p, x, result]};
15 }
16
17 noInline(foo);
18
19 function bar() {
20     return 107;
21 }
22
23 noInline(bar);
24
25 // Warm up foo().
26 for (var i = 0; i < 100000; ++i) {
27     var result = foo(bar);
28     if (result.outcome !== "return")
29         throw "Error in loop: bad outcome: " + result.outcome;
30     if (result.values.length !== 4)
31         throw "Error in loop: bad number of values: " + result.values.length;
32     if (result.values[0] !== 104)
33         throw "Error in loop: bad values[0]: " + result.values[0];
34     if (result.values[1] !== 105)
35         throw "Error in loop: bad values[1]: " + result.values[1];
36     if (result.values[2] !== 106)
37         throw "Error in loop: bad values[2]: " + result.values[2];
38     if (result.values[3] !== 107)
39         throw "Error in loop: bad values[3]: " + result.values[3];
40 }
41
42 // Now throw an exception.
43 bar = function() {
44     throw "Error42";
45 }
46 var result = foo(bar, 108);
47 if (result.outcome !== "exception")
48     throw "Error at end: bad outcome: " + result.outcome;
49 if (result.values.length !== 4)
50     throw "Error at end: bad number of values: " + result.values.length;
51 if (result.values[0] !== bar)
52     throw "Error at end: bad values[0]: " + result.values[0];
53 if (result.values[1] !== 103)
54     throw "Error at end: bad values[1]: " + result.values[1];
55 if (result.values[2] !== 102)
56     throw "Error at end: bad values[2]: " + result.values[2];
57 if (result.values[3] !== 101)
58     throw "Error at end: bad values[3]: " + result.values[3];
59