Index: src/heap/objects-visiting-inl.h |
diff --git a/src/heap/objects-visiting-inl.h b/src/heap/objects-visiting-inl.h |
index ed6db7b9b4b5f7924f716ab44136f7f0b79881c6..0103054822b1740df3902a875598912865aba68b 100644 |
--- a/src/heap/objects-visiting-inl.h |
+++ b/src/heap/objects-visiting-inl.h |
@@ -543,22 +543,25 @@ void StaticMarkingVisitor<StaticVisitor>::MarkMapContents(Heap* heap, |
} |
// Since descriptor arrays are potentially shared, ensure that only the |
- // descriptors that belong to this map are marked. The first time a |
- // non-empty descriptor array is marked, its header is also visited. The slot |
- // holding the descriptor array will be implicitly recorded when the pointer |
- // fields of this map are visited. |
- DescriptorArray* descriptors = map->instance_descriptors(); |
- if (StaticVisitor::MarkObjectWithoutPush(heap, descriptors) && |
- descriptors->length() > 0) { |
- StaticVisitor::VisitPointers(heap, descriptors->GetFirstElementAddress(), |
- descriptors->GetDescriptorEndSlot(0)); |
- } |
- int start = 0; |
- int end = map->NumberOfOwnDescriptors(); |
- if (start < end) { |
- StaticVisitor::VisitPointers(heap, |
- descriptors->GetDescriptorStartSlot(start), |
- descriptors->GetDescriptorEndSlot(end)); |
+ // descriptors that belong to this map are marked. The first time a non-empty |
+ // descriptor array is marked, its header is also visited. The slot holding |
+ // the descriptor array will be implicitly recorded when the pointer fields of |
+ // this map are visited. Prototype maps don't keep track of transitions, so |
+ // just mark the entire descriptor array. |
+ if (!map->is_prototype_map()) { |
+ DescriptorArray* descriptors = map->instance_descriptors(); |
+ if (StaticVisitor::MarkObjectWithoutPush(heap, descriptors) && |
+ descriptors->length() > 0) { |
+ StaticVisitor::VisitPointers(heap, descriptors->GetFirstElementAddress(), |
+ descriptors->GetDescriptorEndSlot(0)); |
+ } |
+ int start = 0; |
+ int end = map->NumberOfOwnDescriptors(); |
+ if (start < end) { |
+ StaticVisitor::VisitPointers(heap, |
+ descriptors->GetDescriptorStartSlot(start), |
+ descriptors->GetDescriptorEndSlot(end)); |
+ } |
} |
// Mark the pointer fields of the Map. Since the transitions array has |