| Index: src/heap/mark-compact.cc
 | 
| diff --git a/src/heap/mark-compact.cc b/src/heap/mark-compact.cc
 | 
| index 33bf3da5c71664a5c1d0903daed9d3b7049c1dd3..88249af19f16ff1e7a05a5a4a5f91bea5047a535 100644
 | 
| --- a/src/heap/mark-compact.cc
 | 
| +++ b/src/heap/mark-compact.cc
 | 
| @@ -780,7 +780,6 @@ void MarkCompactCollector::AbortCompaction() {
 | 
|      RememberedSet<OLD_TO_OLD>::ClearAll(heap());
 | 
|      for (Page* p : evacuation_candidates_) {
 | 
|        p->ClearEvacuationCandidate();
 | 
| -      p->ClearFlag(MemoryChunk::RESCAN_ON_EVACUATION);
 | 
|      }
 | 
|      compacting_ = false;
 | 
|      evacuation_candidates_.Rewind(0);
 | 
| @@ -3029,8 +3028,7 @@ bool MarkCompactCollector::Evacuator::EvacuatePage(MemoryChunk* chunk) {
 | 
|      DCHECK(success);
 | 
|      USE(success);
 | 
|    } else {
 | 
| -    DCHECK(chunk->IsEvacuationCandidate() ||
 | 
| -           chunk->IsFlagSet(MemoryChunk::RESCAN_ON_EVACUATION));
 | 
| +    DCHECK(chunk->IsEvacuationCandidate());
 | 
|      DCHECK_EQ(chunk->concurrent_sweeping_state().Value(), Page::kSweepingDone);
 | 
|      success = EvacuateSinglePage(chunk, &old_space_visitor_);
 | 
|    }
 | 
| @@ -3586,53 +3584,17 @@ void MarkCompactCollector::UpdatePointersAfterEvacuation() {
 | 
|          heap()->tracer(),
 | 
|          GCTracer::Scope::MC_EVACUATE_UPDATE_POINTERS_BETWEEN_EVACUATED);
 | 
|      for (Page* p : evacuation_candidates_) {
 | 
| -      DCHECK(p->IsEvacuationCandidate() ||
 | 
| -             p->IsFlagSet(Page::RESCAN_ON_EVACUATION));
 | 
| -
 | 
| -      if (p->IsEvacuationCandidate()) {
 | 
| -        // Important: skip list should be cleared only after roots were updated
 | 
| -        // because root iteration traverses the stack and might have to find
 | 
| -        // code objects from non-updated pc pointing into evacuation candidate.
 | 
| -        SkipList* list = p->skip_list();
 | 
| -        if (list != NULL) list->Clear();
 | 
| -
 | 
| -        // First pass on aborted pages, fixing up all live objects.
 | 
| -        if (p->IsFlagSet(Page::COMPACTION_WAS_ABORTED)) {
 | 
| -          p->ClearEvacuationCandidate();
 | 
| -          VisitLiveObjectsBody(p, &updating_visitor);
 | 
| -        }
 | 
| -      }
 | 
| -
 | 
| -      if (p->IsFlagSet(Page::RESCAN_ON_EVACUATION)) {
 | 
| -        if (FLAG_gc_verbose) {
 | 
| -          PrintF("Sweeping 0x%" V8PRIxPTR " during evacuation.\n",
 | 
| -                 reinterpret_cast<intptr_t>(p));
 | 
| -        }
 | 
| -        PagedSpace* space = static_cast<PagedSpace*>(p->owner());
 | 
| -        p->ClearFlag(MemoryChunk::RESCAN_ON_EVACUATION);
 | 
| -        p->concurrent_sweeping_state().SetValue(Page::kSweepingInProgress);
 | 
| -
 | 
| -        switch (space->identity()) {
 | 
| -          case OLD_SPACE:
 | 
| -            Sweep<SWEEP_AND_VISIT_LIVE_OBJECTS, SWEEP_ON_MAIN_THREAD,
 | 
| -                  IGNORE_SKIP_LIST, IGNORE_FREE_SPACE>(space, NULL, p,
 | 
| -                                                       &updating_visitor);
 | 
| -            break;
 | 
| -          case CODE_SPACE:
 | 
| -            if (FLAG_zap_code_space) {
 | 
| -              Sweep<SWEEP_AND_VISIT_LIVE_OBJECTS, SWEEP_ON_MAIN_THREAD,
 | 
| -                    REBUILD_SKIP_LIST, ZAP_FREE_SPACE>(space, NULL, p,
 | 
| -                                                       &updating_visitor);
 | 
| -            } else {
 | 
| -              Sweep<SWEEP_AND_VISIT_LIVE_OBJECTS, SWEEP_ON_MAIN_THREAD,
 | 
| -                    REBUILD_SKIP_LIST, IGNORE_FREE_SPACE>(space, NULL, p,
 | 
| -                                                          &updating_visitor);
 | 
| -            }
 | 
| -            break;
 | 
| -          default:
 | 
| -            UNREACHABLE();
 | 
| -            break;
 | 
| -        }
 | 
| +      DCHECK(p->IsEvacuationCandidate());
 | 
| +      // Important: skip list should be cleared only after roots were updated
 | 
| +      // because root iteration traverses the stack and might have to find
 | 
| +      // code objects from non-updated pc pointing into evacuation candidate.
 | 
| +      SkipList* list = p->skip_list();
 | 
| +      if (list != NULL) list->Clear();
 | 
| +
 | 
| +      // First pass on aborted pages, fixing up all live objects.
 | 
| +      if (p->IsFlagSet(Page::COMPACTION_WAS_ABORTED)) {
 | 
| +        p->ClearEvacuationCandidate();
 | 
| +        VisitLiveObjectsBody(p, &updating_visitor);
 | 
|        }
 | 
|      }
 | 
|    }
 | 
| @@ -3736,8 +3698,7 @@ void MarkCompactCollector::StartSweepSpace(PagedSpace* space) {
 | 
|      Page* p = it.next();
 | 
|      DCHECK(p->SweepingDone());
 | 
|  
 | 
| -    if (p->IsFlagSet(Page::RESCAN_ON_EVACUATION) ||
 | 
| -        p->IsEvacuationCandidate()) {
 | 
| +    if (p->IsEvacuationCandidate()) {
 | 
|        // Will be processed in EvacuateNewSpaceAndCandidates.
 | 
|        DCHECK(evacuation_candidates_.length() > 0);
 | 
|        continue;
 | 
| 
 |