Added check to debug object migration crashes.
authorhpayer@chromium.org <hpayer@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 24 Jul 2013 09:19:55 +0000 (09:19 +0000)
committerhpayer@chromium.org <hpayer@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 24 Jul 2013 09:19:55 +0000 (09:19 +0000)
BUG=
R=mstarzinger@chromium.org

Review URL: https://codereview.chromium.org/20055002

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

src/mark-compact.cc

index e73127f..bfeeae9 100644 (file)
@@ -2724,7 +2724,21 @@ void MarkCompactCollector::MigrateObject(Address dst,
   HEAP_PROFILE(heap(), ObjectMoveEvent(src, dst));
   // TODO(hpayer): Replace that check with an assert.
   CHECK(dest != LO_SPACE && size <= Page::kMaxNonCodeHeapObjectSize);
+  // Objects in old pointer space and old data space can just be moved by
+  // compaction to a different page in the same space.
+  // TODO(hpayer): Replace that following checks with asserts.
+  CHECK(!heap_->old_pointer_space()->Contains(src) ||
+        (heap_->old_pointer_space()->Contains(dst) &&
+        heap_->TargetSpace(HeapObject::FromAddress(src)) ==
+        heap_->old_pointer_space()));
+  CHECK(!heap_->old_data_space()->Contains(src) ||
+        (heap_->old_data_space()->Contains(dst) &&
+        heap_->TargetSpace(HeapObject::FromAddress(src)) ==
+        heap_->old_data_space()));
   if (dest == OLD_POINTER_SPACE) {
+    // TODO(hpayer): Replace this check with an assert.
+    CHECK(heap_->TargetSpace(HeapObject::FromAddress(src)) ==
+          heap_->old_pointer_space());
     Address src_slot = src;
     Address dst_slot = dst;
     ASSERT(IsAligned(size, kPointerSize));