Index: src/mark-compact.cc |
diff --git a/src/mark-compact.cc b/src/mark-compact.cc |
index b82c76aa830bcb249f919419e99e46b2c6f7410e..160dba8d49d85a60ee4ec4d59ff1ccb42bc7e474 100644 |
--- a/src/mark-compact.cc |
+++ b/src/mark-compact.cc |
@@ -1081,8 +1081,13 @@ void MarkCompactCollector::MarkMapContents(Map* map) { |
FixedArray* prototype_transitions = map->unchecked_prototype_transitions(); |
if (!prototype_transitions->IsMarked()) SetMark(prototype_transitions); |
- MarkDescriptorArray(reinterpret_cast<DescriptorArray*>( |
- *HeapObject::RawField(map, Map::kInstanceDescriptorsOffset))); |
+ Object* raw_descriptor_array = |
+ *HeapObject::RawField(map, |
+ Map::kInstanceDescriptorsOrBitField3Offset); |
+ if (!raw_descriptor_array->IsSmi()) { |
+ MarkDescriptorArray( |
+ reinterpret_cast<DescriptorArray*>(raw_descriptor_array)); |
+ } |
// Mark the Object* fields of the Map. |
// Since the descriptor array has been marked already, it is fine |