| Index: test/cctest/test-heap.cc | 
| diff --git a/test/cctest/test-heap.cc b/test/cctest/test-heap.cc | 
| index b8d7676a1bae20fde605ba8fa8f643831bd25ae3..906b4fe8a968fb8beaba0db2fb175d08ee6bd39f 100644 | 
| --- a/test/cctest/test-heap.cc | 
| +++ b/test/cctest/test-heap.cc | 
| @@ -5379,3 +5379,36 @@ TEST(WeakFixedArray) { | 
| array->Compact(); | 
| WeakFixedArray::Add(array, number); | 
| } | 
| + | 
| + | 
| +TEST(PreprocessStackTrace) { | 
| +  // Do not automatically trigger early GC. | 
| +  FLAG_gc_interval = -1; | 
| +  CcTest::InitializeVM(); | 
| +  v8::HandleScope scope(CcTest::isolate()); | 
| +  v8::TryCatch try_catch; | 
| +  CompileRun("throw new Error();"); | 
| +  CHECK(try_catch.HasCaught()); | 
| +  Isolate* isolate = CcTest::i_isolate(); | 
| +  Handle<Object> exception = v8::Utils::OpenHandle(*try_catch.Exception()); | 
| +  Handle<Name> key = isolate->factory()->stack_trace_symbol(); | 
| +  Handle<Object> stack_trace = | 
| +      JSObject::GetProperty(exception, key).ToHandleChecked(); | 
| +  Handle<Object> code = | 
| +      Object::GetElement(isolate, stack_trace, 3).ToHandleChecked(); | 
| +  CHECK(code->IsCode()); | 
| + | 
| +  isolate->heap()->CollectAllAvailableGarbage("stack trace preprocessing"); | 
| + | 
| +  Handle<Object> pos = | 
| +      Object::GetElement(isolate, stack_trace, 3).ToHandleChecked(); | 
| +  CHECK(pos->IsSmi()); | 
| + | 
| +  Handle<JSArray> stack_trace_array = Handle<JSArray>::cast(stack_trace); | 
| +  int array_length = Smi::cast(stack_trace_array->length())->value(); | 
| +  for (int i = 0; i < array_length; i++) { | 
| +    Handle<Object> element = | 
| +        Object::GetElement(isolate, stack_trace, i).ToHandleChecked(); | 
| +    CHECK(!element->IsCode()); | 
| +  } | 
| +} | 
|  |