Reviewers: Jakob,

Description:
Correct large packed array length limitation

The length of packed array could be up to kInitialMaxFastElementArray instead of
(kInitialMaxFastElementArray -1)

BUG=

Please review this at https://codereview.chromium.org/23441080/

SVN Base: git://github.com/v8/v8.git@master

Affected files (+6, -6 lines):
  M src/code-stubs-hydrogen.cc
  M src/elements.cc
  M test/mjsunit/allocation-site-info.js
  M test/mjsunit/array-constructor-feedback.js
  M test/mjsunit/array-feedback.js


Index: src/code-stubs-hydrogen.cc
diff --git a/src/code-stubs-hydrogen.cc b/src/code-stubs-hydrogen.cc
index 0d06209b613db0f9dc46d32dbab532591edd720d..8496e80381bd927497f0f51b31d5dafe917a4e4a 100644
--- a/src/code-stubs-hydrogen.cc
+++ b/src/code-stubs-hydrogen.cc
@@ -661,7 +661,7 @@ HValue* CodeStubGraphBuilderBase::BuildArraySingleArgumentConstructor(
   HConstant* initial_capacity_node = New<HConstant>(initial_capacity);
   AddInstruction(initial_capacity_node);

- HInstruction* checked_arg = Add<HBoundsCheck>(argument, max_alloc_length); + HInstruction* checked_arg = Add<HBoundsCheck>(argument, max_alloc_length + 1);
   IfBuilder if_builder(this);
   if_builder.If<HCompareNumericAndBranch>(checked_arg, constant_zero,
                                           Token::EQ);
Index: src/elements.cc
diff --git a/src/elements.cc b/src/elements.cc
index 89621cb3694ad63288f5b1f9556326da5e02dcc5..fffd4701d38b45a3b418045cc39bbc68aadba2b7 100644
--- a/src/elements.cc
+++ b/src/elements.cc
@@ -1978,7 +1978,7 @@ MUST_USE_RESULT MaybeObject* ArrayConstructInitializeElements(
     Object* obj = (*args)[0];
     if (obj->IsSmi()) {
       int len = Smi::cast(obj)->value();
-      if (len > 0 && len < JSObject::kInitialMaxFastElementArray) {
+      if (len > 0 && len <= JSObject::kInitialMaxFastElementArray) {
         ElementsKind elements_kind = array->GetElementsKind();
         MaybeObject* maybe_array = array->Initialize(len, len);
         if (maybe_array->IsFailure()) return maybe_array;
Index: test/mjsunit/allocation-site-info.js
diff --git a/test/mjsunit/allocation-site-info.js b/test/mjsunit/allocation-site-info.js index dd22f573f0715ff5053b215d2e6825dad90fcded..07aba55ea038e898c5fa16cfda6fdcaf24f99091 100644
--- a/test/mjsunit/allocation-site-info.js
+++ b/test/mjsunit/allocation-site-info.js
@@ -321,9 +321,9 @@ if (support_smi_only_arrays) {
   obj = newarraycase_onearg(0, 5);
   assertKind(elements_kind.fast_double, obj);
   // Now pass a length that forces the dictionary path.
-  obj = newarraycase_onearg(100000, 5);
+  obj = newarraycase_onearg(100001, 5);
   assertKind(elements_kind.dictionary, obj);
-  assertTrue(obj.length == 100000);
+  assertTrue(obj.length == 100001);

   // Verify that cross context calls work
   var realmA = Realm.current();
Index: test/mjsunit/array-constructor-feedback.js
diff --git a/test/mjsunit/array-constructor-feedback.js b/test/mjsunit/array-constructor-feedback.js index 72ff12c08f0f04c28a7bffa1f3311c173a2d24fd..2e2cf522138235f66ce3e5d22bb6d658f2e959cd 100644
--- a/test/mjsunit/array-constructor-feedback.js
+++ b/test/mjsunit/array-constructor-feedback.js
@@ -153,7 +153,7 @@ if (support_smi_only_arrays) {
     assertKind(elements_kind.fast, a);
     assertOptimized(bar);
     // The stub bails out, but the method call should be fine.
-    a = bar(100000);
+    a = bar(100001);
     assertOptimized(bar);
     assertKind(elements_kind.dictionary, a);

Index: test/mjsunit/array-feedback.js
diff --git a/test/mjsunit/array-feedback.js b/test/mjsunit/array-feedback.js
index 6b1cbb3f5f7b08593dd1db50cdc3b89c524cc232..c5da609b45315151679cb1bbc4e62036fa7ec9ac 100644
--- a/test/mjsunit/array-feedback.js
+++ b/test/mjsunit/array-feedback.js
@@ -119,7 +119,7 @@ if (support_smi_only_arrays) {
     assertTrue(isHoley(b));
     assertKind(elements_kind.fast, b);

-    a = create1(100000);
+    a = create1(100001);
     assertKind(elements_kind.dictionary, a);

     function create3(arg1, arg2, arg3) {


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to