Index: src/heap/objects-visiting-inl.h |
diff --git a/src/heap/objects-visiting-inl.h b/src/heap/objects-visiting-inl.h |
index 4133e22f732f2ab0815e21b8654e4a766b7138da..3ef51866b6341715e424292e44a6c68a06356cc8 100644 |
--- a/src/heap/objects-visiting-inl.h |
+++ b/src/heap/objects-visiting-inl.h |
@@ -601,8 +601,13 @@ |
if (!StaticVisitor::MarkObjectWithoutPush(heap, transitions)) return; |
if (transitions->HasPrototypeTransitions()) { |
- StaticVisitor::VisitPointer(heap, |
- transitions->GetPrototypeTransitionsSlot()); |
+ // Mark prototype transitions array but do not push it onto marking |
+ // stack, this will make references from it weak. We will clean dead |
+ // prototype transitions in ClearNonLiveReferences. |
+ Object** slot = transitions->GetPrototypeTransitionsSlot(); |
+ HeapObject* obj = HeapObject::cast(*slot); |
+ heap->mark_compact_collector()->RecordSlot(slot, slot, obj); |
+ StaticVisitor::MarkObjectWithoutPush(heap, obj); |
} |
int num_transitions = TransitionArray::NumberOfTransitions(transitions); |