Index: test/cctest/test-heap.cc |
diff --git a/test/cctest/test-heap.cc b/test/cctest/test-heap.cc |
index cc1e042218e58be30f42881901f0d6e22adc7313..833f50f89f51f3c473f26f26fd2320280f28d6a6 100644 |
--- a/test/cctest/test-heap.cc |
+++ b/test/cctest/test-heap.cc |
@@ -2352,6 +2352,31 @@ TEST(OptimizedAllocationArrayLiterals) { |
} |
+TEST(OptimizedPretenuringCallNew) { |
+ i::FLAG_allow_natives_syntax = true; |
+ i::FLAG_pretenuring_call_new = true; |
+ CcTest::InitializeVM(); |
+ if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return; |
+ if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; |
+ v8::HandleScope scope(CcTest::isolate()); |
+ HEAP->SetNewSpaceHighPromotionModeActive(true); |
+ |
+ AlwaysAllocateScope always_allocate; |
+ v8::Local<v8::Value> res = CompileRun( |
+ "function g() { this.a = 0; }" |
+ "function f() {" |
+ " return new g();" |
+ "};" |
+ "f(); f(); f();" |
+ "%OptimizeFunctionOnNextCall(f);" |
+ "f();"); |
+ |
+ Handle<JSObject> o = |
+ v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); |
+ CHECK(HEAP->InOldPointerSpace(*o)); |
+} |
+ |
+ |
static int CountMapTransitions(Map* map) { |
return map->transitions()->number_of_transitions(); |
} |