Reviewers: Vitaly, Dmitry Titov, Erik Corry,

Message:
I think this change should fix the problem with this test on OS X. (The problem also happens to surface on other platforms in the isolates branch, which is why
I'm particularly interested in seeing the issue settled.)

Thanks
  Luke

Description:
Make the apply.js unit test more resilient to differing stack positions.

More information is at http://code.google.com/p/v8/issues/detail?id=742


Please review this at http://codereview.chromium.org/2835014/show

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
  M     test/mjsunit/apply.js


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 = 0;
+
 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(0, stack_corner_case_failure);
+      stack_corner_case_failure = 1;
+      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,


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to