| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index cc6ae919a8a37927b840575a8ed9235b571bbdfb..a315bc9010ce119b454f8ca460ca18f872229848 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -11080,6 +11080,10 @@ void SharedFunctionInfo::AddToOptimizedCodeMap(
|
| // Copy old optimized code map and append one new entry.
|
| new_code_map = isolate->factory()->CopyFixedArrayAndGrow(
|
| old_code_map, kEntryLength, TENURED);
|
| + // TODO(mstarzinger): Temporary workaround. The allocation above might have
|
| + // flushed the optimized code map and the copy we created is full of holes.
|
| + // For now we just give up on adding the entry and pretend it got flushed.
|
| + if (shared->optimized_code_map()->IsSmi()) return;
|
| int old_length = old_code_map->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.
|
| @@ -11104,21 +11108,28 @@ void SharedFunctionInfo::AddToOptimizedCodeMap(
|
| DCHECK(new_code_map->get(i + kOsrAstIdOffset)->IsSmi());
|
| }
|
| #endif
|
| +
|
| + if (Heap::ShouldZapGarbage()) {
|
| + // Zap any old optimized code map for heap-verifier.
|
| + if (!shared->optimized_code_map()->IsSmi()) {
|
| + FixedArray* old_code_map = FixedArray::cast(shared->optimized_code_map());
|
| + old_code_map->FillWithHoles(0, old_code_map->length());
|
| + }
|
| + }
|
| +
|
| shared->set_optimized_code_map(*new_code_map);
|
| }
|
|
|
|
|
| void SharedFunctionInfo::ClearOptimizedCodeMap() {
|
| - FixedArray* code_map = FixedArray::cast(optimized_code_map());
|
| -
|
| - // If the next map link slot is already used then the function was
|
| - // enqueued with code flushing and we remove it now.
|
| - if (!code_map->get(kNextMapIndex)->IsUndefined()) {
|
| - CodeFlusher* flusher = GetHeap()->mark_compact_collector()->code_flusher();
|
| - flusher->EvictOptimizedCodeMap(this);
|
| + if (Heap::ShouldZapGarbage()) {
|
| + // Zap any old optimized code map for heap-verifier.
|
| + if (!optimized_code_map()->IsSmi()) {
|
| + FixedArray* old_code_map = FixedArray::cast(optimized_code_map());
|
| + old_code_map->FillWithHoles(0, old_code_map->length());
|
| + }
|
| }
|
|
|
| - DCHECK(code_map->get(kNextMapIndex)->IsUndefined());
|
| set_optimized_code_map(Smi::FromInt(0));
|
| }
|
|
|
|
|