[JSC] AI should not propagate AbstractValue relying on constant folding phase
[WebKit-https.git] / JSTests / stress / heap-allocator-allocates-incorrect-size-for-activation.js
1
2 // Consider the following scenario:
3 // - On OS X, WTF::pageSize() is 4*1024 bytes.
4 // - JSEnvironmentRecord::allocationSizeForScopeSize(6621) == 53000
5 // - sizeof(MarkedBlock) == 248
6 // - (248 + 53000) is a multiple of 4*1024.
7 // - (248 + 53000)/(4*1024) == 13
8
9 // We will allocate a chunk of memory of size 53248 bytes that looks like this:
10 // 0            248       256                       53248       53256
11 // [Marked Block | 8 bytes |  payload     ......      ]  8 bytes  |
12 //                         ^                                      ^
13 //                    Our Environment record starts here.         ^
14 //                                                                ^
15 //                                                        Our last JSValue in the environment record will go from byte 53248 to 53256. But, we don't own this memory.
16
17 var numberOfCapturedVariables = 6621;
18 function use() { }
19 function makeFunction() { 
20     var varName;
21     var outerFunction = "";
22     var innerFunction = "";
23
24     for (var i = 0; i < numberOfCapturedVariables; i++) {
25         varName = "_" + i;
26         outerFunction += "var " + varName + ";";
27         innerFunction += "use(" + varName + ");";
28     }
29     outerFunction += "function foo() {" + innerFunction + "}";
30     var functionString = "(function() { " + outerFunction + "})";
31     var result = eval(functionString);
32     return result;
33 }
34
35 var arr = [];
36 for (var i = 0; i < 50; i++) {
37     var f = makeFunction();
38     f();
39     fullGC();
40 }
41