| Index: test/cctest/test-heap.cc
|
| diff --git a/test/cctest/test-heap.cc b/test/cctest/test-heap.cc
|
| index 2c85596090bd6e4f858336be88b464ed766ef64b..66e4f2a114236589cc393d8d68f436f962fc54c6 100644
|
| --- a/test/cctest/test-heap.cc
|
| +++ b/test/cctest/test-heap.cc
|
| @@ -6663,5 +6663,40 @@ TEST(SharedFunctionInfoIterator) {
|
| CHECK_EQ(0, sfi_count);
|
| }
|
|
|
| +
|
| +template <typename T>
|
| +static UniqueId MakeUniqueId(const Persistent<T>& p) {
|
| + return UniqueId(reinterpret_cast<uintptr_t>(*v8::Utils::OpenPersistent(p)));
|
| +}
|
| +
|
| +
|
| +TEST(Regress519319) {
|
| + CcTest::InitializeVM();
|
| + v8::Isolate* isolate = CcTest::isolate();
|
| + v8::HandleScope scope(isolate);
|
| + Heap* heap = CcTest::heap();
|
| + LocalContext context;
|
| +
|
| + v8::Persistent<Value> parent;
|
| + v8::Persistent<Value> child;
|
| +
|
| + parent.Reset(isolate, v8::Object::New(isolate));
|
| + child.Reset(isolate, v8::Object::New(isolate));
|
| +
|
| + SimulateFullSpace(heap->old_space());
|
| + heap->CollectGarbage(OLD_SPACE);
|
| + {
|
| + UniqueId id = MakeUniqueId(parent);
|
| + isolate->SetObjectGroupId(parent, id);
|
| + isolate->SetReferenceFromGroup(id, child);
|
| + }
|
| + // The CollectGarbage call above starts sweeper threads.
|
| + // The crash will happen if the following two functions
|
| + // are called before sweeping finishes.
|
| + heap->StartIncrementalMarking();
|
| + heap->FinalizeIncrementalMarkingIfComplete("test");
|
| +}
|
| +
|
| +
|
| } // namespace internal
|
| } // namespace v8
|
|
|