| 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
|
|
|