Index: src/heap/mark-compact.cc |
diff --git a/src/heap/mark-compact.cc b/src/heap/mark-compact.cc |
index 53bd132ac0be4da9bc3241c4800e9ccc65dcd3d6..5a4a1a7036739a6aa79154c924a182b72a7442f0 100644 |
--- a/src/heap/mark-compact.cc |
+++ b/src/heap/mark-compact.cc |
@@ -2404,11 +2404,13 @@ void MarkCompactCollector::ClearNonLivePrototypeTransitions(Map* map) { |
const int header = TransitionArray::kProtoTransitionHeaderSize; |
int new_number_of_transitions = 0; |
for (int i = 0; i < number_of_transitions; i++) { |
- Object* cached_map = prototype_transitions->get(header + i); |
- if (IsMarked(cached_map)) { |
+ Object* cell = prototype_transitions->get(header + i); |
+ if (!WeakCell::cast(cell)->cleared()) { |
if (new_number_of_transitions != i) { |
- prototype_transitions->set(header + new_number_of_transitions, |
- cached_map, SKIP_WRITE_BARRIER); |
+ prototype_transitions->set(header + new_number_of_transitions, cell); |
+ Object** slot = prototype_transitions->RawFieldOfElementAt( |
+ header + new_number_of_transitions); |
+ RecordSlot(slot, slot, cell); |
} |
new_number_of_transitions++; |
} |