| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 687426bc76d6cdf7a9eb63c48ee077091243f97e..a86d053f05c506f715da6c1584b92c0668b18461 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -9508,6 +9508,7 @@ void SharedFunctionInfo::AddToOptimizedCodeMap(
|
| Handle<FixedArray> literals,
|
| BailoutId osr_ast_id) {
|
| Isolate* isolate = shared->GetIsolate();
|
| + DCHECK(!shared->SearchOptimizedCodeMap(*native_context, osr_ast_id).code);
|
| DCHECK(code->kind() == Code::OPTIMIZED_FUNCTION);
|
| DCHECK(native_context->IsNativeContext());
|
| STATIC_ASSERT(kEntryLength == 4);
|
| @@ -9517,20 +9518,18 @@ void SharedFunctionInfo::AddToOptimizedCodeMap(
|
| if (value->IsSmi()) {
|
| // No optimized code map.
|
| DCHECK_EQ(0, Smi::cast(*value)->value());
|
| - new_code_map = isolate->factory()->NewFixedArray(kInitialLength);
|
| + new_code_map = isolate->factory()->NewFixedArray(kInitialLength, TENURED);
|
| old_length = kEntriesStart;
|
| } else {
|
| - // Copy old map and append one new entry.
|
| + // Copy old optimized code map and append one new entry.
|
| Handle<FixedArray> old_code_map = Handle<FixedArray>::cast(value);
|
| - DCHECK(!shared->SearchOptimizedCodeMap(*native_context, osr_ast_id).code);
|
| - new_code_map =
|
| - isolate->factory()->CopyFixedArrayAndGrow(old_code_map, kEntryLength);
|
| + new_code_map = isolate->factory()->CopyFixedArrayAndGrow(
|
| + old_code_map, kEntryLength, TENURED);
|
| old_length = old_code_map->length();
|
| - // Zap the old map for the sake of the heap verifier.
|
| - if (Heap::ShouldZapGarbage()) {
|
| - Object** data = old_code_map->data_start();
|
| - MemsetPointer(data, isolate->heap()->the_hole_value(), old_length);
|
| - }
|
| + // Zap the old map to avoid any stale entries. Note that this is required
|
| + // for correctness because entries are being treated weakly by the GC.
|
| + MemsetPointer(old_code_map->data_start(), isolate->heap()->the_hole_value(),
|
| + old_length);
|
| }
|
| new_code_map->set(old_length + kContextOffset, *native_context);
|
| new_code_map->set(old_length + kCachedCodeOffset, *code);
|
|
|