Make the apply.js unit test more resilient to differing stack positions.
authorlukezarko <lukezarko@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 22 Jun 2010 22:20:58 +0000 (22:20 +0000)
committerlukezarko <lukezarko@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 22 Jun 2010 22:20:58 +0000 (22:20 +0000)
More information is at http://code.google.com/p/v8/issues/detail?id=742

Review URL: http://codereview.chromium.org/2835014

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4918 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

test/mjsunit/apply.js
test/mjsunit/mjsunit.status

index a4b0fd7..cab7eb8 100644 (file)
@@ -112,12 +112,25 @@ function al() {
   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 @@ for (var j = 1; j < 0x40000000; j <<= 1) {
         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,
index 514d345..ceb5e62 100644 (file)
@@ -34,9 +34,6 @@ bugs: FAIL
 # too long to run in debug mode on ARM.
 fuzz-natives: PASS, SKIP if ($mode == release || $arch == arm)
 
-# Issue 494: new snapshot code breaks mjsunit/apply on mac debug snapshot.
-apply: PASS, FAIL if ($system == macos && $mode == debug)
-
 big-object-literal: PASS, SKIP if ($arch == arm)
 
 # Issue 488: this test sometimes times out.