Reviewers: jbramley, jochen,

Message:
PTAL

Description:
A64: Fix write barrier input in KeyedStoreIC::GenerateSloppyArguments.

This fixes flaky crashes in gc-stress bot:
Fatal error in ../src/incremental-marking.cc, line 84
CHECK(obj->IsHeapObject()) failed


BUG=353551
LOG=N
TEST=test/mjsunit/regress/regress-353551.js

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

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

Affected files (+17, -10 lines):
  M src/a64/ic-a64.cc
  A + test/mjsunit/regress/regress-353551.js


Index: src/a64/ic-a64.cc
diff --git a/src/a64/ic-a64.cc b/src/a64/ic-a64.cc
index 18677f79d7ff42f0a5dc883065519099a01383be..778b1a8d79c7b62bb30a2fa4c91723b8f53bf4b0 100644
--- a/src/a64/ic-a64.cc
+++ b/src/a64/ic-a64.cc
@@ -392,8 +392,11 @@ static MemOperand GenerateMappedArgumentsLookup(MacroAssembler* masm,
   // Load value from context and return it.
   __ Ldr(scratch2, FieldMemOperand(map, FixedArray::kHeaderSize));
   __ SmiUntag(scratch1);
-  __ Add(scratch2, scratch2, Context::kHeaderSize - kHeapObjectTag);
-  return MemOperand(scratch2, scratch1, LSL, kPointerSizeLog2);
+  __ Mov(scratch1, Operand(scratch1, LSL, kPointerSizeLog2));
+  __ Add(scratch1, scratch1, Context::kHeaderSize - kHeapObjectTag);
+  // The base of the result (scratch2) is passed to RecordWrite in
+  // KeyedStoreIC::GenerateSloppyArguments and it must be a HeapObject.
+  return MemOperand(scratch2, scratch1);
 }


Index: test/mjsunit/regress/regress-353551.js
diff --git a/test/mjsunit/function-arguments-duplicate.js b/test/mjsunit/regress/regress-353551.js
similarity index 88%
copy from test/mjsunit/function-arguments-duplicate.js
copy to test/mjsunit/regress/regress-353551.js
index 80f03a106b30a7e2f984a83b9d54b2edd8fb840a..c6e7856d3419e703031c06cba932ba342fefe77a 100644
--- a/test/mjsunit/function-arguments-duplicate.js
+++ b/test/mjsunit/regress/regress-353551.js
@@ -25,12 +25,16 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-// Execises ArgumentsAccessStub::GenerateNewNonStrictSlow.
-
-function f(a, a) {
-  assertEquals(2, a);
-  assertEquals(1, arguments[0]);
-  assertEquals(2, arguments[1]);
+var depth = 0;
+function __f_3(x) {
+  var __v_1 = arguments;
+  __v_1[1000] = 123;
+  depth++;
+  if (depth > 3000) return;
+  function __f_4() {
+    ++__v_1[0];
+    __f_3(0.5);
+  };
+  __f_4();
 }
-
-f(1, 2);
+__f_3(0.5);


--
--
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/d/optout.

Reply via email to