| Index: test/cctest/heap/test-heap.cc
|
| diff --git a/test/cctest/heap/test-heap.cc b/test/cctest/heap/test-heap.cc
|
| index 7d1cf4cefb452299a548e7df4db1b60f068fd323..6dcca5979117cb20084409ac2bfd6107cee0f3c9 100644
|
| --- a/test/cctest/heap/test-heap.cc
|
| +++ b/test/cctest/heap/test-heap.cc
|
| @@ -7048,5 +7048,37 @@ TEST(RememberedSetRemoveRange) {
|
| });
|
| }
|
|
|
| +HEAP_TEST(Regress670675) {
|
| + if (!FLAG_incremental_marking) return;
|
| + CcTest::InitializeVM();
|
| + v8::HandleScope scope(CcTest::isolate());
|
| + Heap* heap = CcTest::heap();
|
| + Isolate* isolate = heap->isolate();
|
| + i::MarkCompactCollector* collector = heap->mark_compact_collector();
|
| + CcTest::CollectAllGarbage(i::Heap::kFinalizeIncrementalMarkingMask);
|
| +
|
| + if (collector->sweeping_in_progress()) {
|
| + collector->EnsureSweepingCompleted();
|
| + }
|
| + i::IncrementalMarking* marking = CcTest::heap()->incremental_marking();
|
| + if (marking->IsStopped()) {
|
| + marking->Start(i::GarbageCollectionReason::kTesting);
|
| + }
|
| + size_t array_length = Page::kPageSize / kPointerSize + 100;
|
| + size_t n = heap->OldGenerationSpaceAvailable() / array_length;
|
| + for (size_t i = 0; i < n + 10; i++) {
|
| + {
|
| + HandleScope inner_scope(isolate);
|
| + isolate->factory()->NewFixedArray(static_cast<int>(array_length));
|
| + }
|
| + if (marking->IsStopped()) break;
|
| + double deadline = heap->MonotonicallyIncreasingTimeInMs() + 1;
|
| + marking->AdvanceIncrementalMarking(
|
| + deadline, IncrementalMarking::GC_VIA_STACK_GUARD,
|
| + IncrementalMarking::FORCE_COMPLETION, StepOrigin::kV8);
|
| + }
|
| + DCHECK(marking->IsStopped());
|
| +}
|
| +
|
| } // namespace internal
|
| } // namespace v8
|
|
|