Index: test/mjsunit/apply.js |
=================================================================== |
--- test/mjsunit/apply.js (revision 4909) |
+++ test/mjsunit/apply.js (working copy) |
@@ -112,12 +112,25 @@ |
return arguments.length + arguments[arguments.length - 1]; |
} |
+var stack_corner_case_failure = false; |
+ |
for (var j = 1; j < 0x40000000; j <<= 1) { |
try { |
var a = new Array(j); |
a[j - 1] = 42; |
assertEquals(42 + j, al.apply(345, a)); |
} catch (e) { |
+ if (e.toString().indexOf("Maximum call stack size exceeded") != -1) { |
+ // For some combinations of build settings, it may be the case that the |
+ // stack here is just tall enough to contain the array whose size is |
+ // specified by j but is not tall enough to contain the activation |
+ // record for the apply call. Allow one such corner case through, |
+ // checking that the length check will do the right thing for an array |
+ // the next size up. |
+ assertEquals(false, stack_corner_case_failure); |
+ stack_corner_case_failure = true; |
+ continue; |
+ } |
assertTrue(e.toString().indexOf("Function.prototype.apply") != -1, |
"exception does not contain Function.prototype.apply: " + |
e.toString()); |
@@ -127,7 +140,7 @@ |
a = new Array(j); |
a[j - 1] = 42; |
al.apply(345, a); |
- assertUnreachable("Apply of arrray with length " + a.length + |
+ assertUnreachable("Apply of array with length " + a.length + |
" should have thrown"); |
} catch (e) { |
assertTrue(e.toString().indexOf("Function.prototype.apply") != -1, |