| Index: src/heap/mark-compact-inl.h
|
| diff --git a/src/heap/mark-compact-inl.h b/src/heap/mark-compact-inl.h
|
| index fe71fb1177efa7bad7e78c8831c2ceba84778587..784a76f8bd30b391ff26e163ef8a6736d1b9b401 100644
|
| --- a/src/heap/mark-compact-inl.h
|
| +++ b/src/heap/mark-compact-inl.h
|
| @@ -163,12 +163,14 @@ HeapObject* LiveObjectIterator<T>::Next() {
|
| current_cell_ = *it_.CurrentCell();
|
| }
|
|
|
| + Map* map = nullptr;
|
| if (current_cell_ & second_bit_index) {
|
| // We found a black object. If the black object is within a black area,
|
| // make sure that we skip all set bits in the black area until the
|
| // object ends.
|
| HeapObject* black_object = HeapObject::FromAddress(addr);
|
| - Address end = addr + black_object->Size() - kPointerSize;
|
| + map = base::NoBarrierAtomicValue<Map*>::FromAddress(addr)->Value();
|
| + Address end = addr + black_object->SizeFromMap(map) - kPointerSize;
|
| // One word filler objects do not borrow the second mark bit. We have
|
| // to jump over the advancing and clearing part.
|
| // Note that we know that we are at a one word filler when
|
| @@ -198,9 +200,9 @@ HeapObject* LiveObjectIterator<T>::Next() {
|
|
|
| // We found a live object.
|
| if (object != nullptr) {
|
| - if (object->IsFiller()) {
|
| - // Black areas together with slack tracking may result in black filler
|
| - // objects. We filter these objects out in the iterator.
|
| + if (map != nullptr && map == heap()->one_pointer_filler_map()) {
|
| + // Black areas together with slack tracking may result in black one
|
| + // word filler objects. We filter these objects out in the iterator.
|
| object = nullptr;
|
| } else {
|
| break;
|
|
|