Index: test/cctest/test-heap.cc |
diff --git a/test/cctest/test-heap.cc b/test/cctest/test-heap.cc |
index ee476db6cdc4729b1a65a560fe03734a65f2bfdb..5d370077381c4bb5e9be7198117b4a8d14fa487a 100644 |
--- a/test/cctest/test-heap.cc |
+++ b/test/cctest/test-heap.cc |
@@ -1464,6 +1464,9 @@ TEST(TestInternalWeakLists) { |
// Mark compact handles the weak references. |
isolate->compilation_cache()->Clear(); |
+ // We have to collect twice because the type feedback vector |
+ // could be strongly walked before we clear ICs in it. |
+ heap->CollectAllGarbage(Heap::kNoGCFlags); |
heap->CollectAllGarbage(Heap::kNoGCFlags); |
CHECK_EQ(opt ? 4 : 0, CountOptimizedUserFunctions(ctx[i])); |
@@ -3138,7 +3141,7 @@ TEST(IncrementalMarkingClearsTypeFeedbackInfo) { |
// originating from two different native contexts. |
CcTest::global()->Set(v8_str("fun1"), fun1); |
CcTest::global()->Set(v8_str("fun2"), fun2); |
- CompileRun("function f(a, b) { a(); b(); } f(fun1, fun2);"); |
+ CompileRun("function f(a, b) { new a(); new b(); } f(fun1, fun2);"); |
Handle<JSFunction> f = |
v8::Utils::OpenHandle( |
@@ -3147,20 +3150,18 @@ TEST(IncrementalMarkingClearsTypeFeedbackInfo) { |
Handle<TypeFeedbackVector> feedback_vector(f->shared()->feedback_vector()); |
- int expected_length = FLAG_vector_ics ? 4 : 2; |
- CHECK_EQ(expected_length, feedback_vector->length()); |
- for (int i = 0; i < expected_length; i++) { |
- if ((i % 2) == 1) { |
- CHECK(feedback_vector->get(i)->IsJSFunction()); |
- } |
+ int expected_slots = 2; |
+ CHECK_EQ(expected_slots, feedback_vector->Slots()); |
+ for (int i = 0; i < expected_slots; i++) { |
+ CHECK(feedback_vector->Get(FeedbackVectorSlot(i))->IsJSFunction()); |
} |
SimulateIncrementalMarking(CcTest::heap()); |
CcTest::heap()->CollectAllGarbage(Heap::kNoGCFlags); |
- CHECK_EQ(expected_length, feedback_vector->length()); |
- for (int i = 0; i < expected_length; i++) { |
- CHECK_EQ(feedback_vector->get(i), |
+ CHECK_EQ(expected_slots, feedback_vector->Slots()); |
+ for (int i = 0; i < expected_slots; i++) { |
+ CHECK_EQ(feedback_vector->Get(FeedbackVectorSlot(i)), |
*TypeFeedbackVector::UninitializedSentinel(CcTest::i_isolate())); |
} |
} |