1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/basic/testCompileScript.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,40 @@ 1.4 +// |jit-test| slow 1.5 + 1.6 +var nlocals = 50; 1.7 +var localstr = ""; 1.8 +for (var i = 0; i < nlocals; ++i) 1.9 + localstr += "var x" + i + "; "; 1.10 + 1.11 +/* 1.12 + * Attempt to test, in a stack-parameter-independent manner, ComileFunction 1.13 + * hitting a stack-commit boundary (which is not an OOM, but requires checking 1.14 + * and updating the stack limit). 1.15 + */ 1.16 +var arr = [function() {return 0}, function() {return 1}, function() {return 2}]; 1.17 +var arg = "x"; 1.18 +var body = localstr + 1.19 + "if (x == 0) return; " + 1.20 + "arr[3] = (new Function(arg, body));" + 1.21 + "for (var i = 0; i < 4; ++i) arr[i](x-1);"; 1.22 + 1.23 +// XXX interpreter bailouts during recursion below can cause us to hit the limit quickly. 1.24 +try { (new Function(arg, body))(1000); } catch (e) {} 1.25 + 1.26 +/* 1.27 + * Also check for OOM in CompileFunction. To avoid taking 5 seconds, use a 1.28 + * monster apply to chew up most the stack. 1.29 + */ 1.30 +var gotIn = false; 1.31 +var threwOut = false; 1.32 +try { 1.33 + (function() { 1.34 + gotIn = true; 1.35 + (new Function(arg, body))(10000000); 1.36 + }).apply(null, new Array(getMaxArgs())); 1.37 +} catch(e) { 1.38 + assertEq(""+e, "InternalError: too much recursion"); 1.39 + threwOut = true; 1.40 +} 1.41 +assertEq(threwOut, true); 1.42 +/* If tweaking some stack parameter makes this fail, shrink monster apply. */ 1.43 +assertEq(gotIn, true);