| Index: src/objects.cc
 | 
| diff --git a/src/objects.cc b/src/objects.cc
 | 
| index d523d77856b098ef848ae4668ec389a1366c44c7..b09e1a0530c5c4c9077ae4e01c0ea5c2db6b9135 100644
 | 
| --- a/src/objects.cc
 | 
| +++ b/src/objects.cc
 | 
| @@ -11205,13 +11205,30 @@ void Code::ClearInlineCaches(Code::Kind* kind) {
 | 
|  void SharedFunctionInfo::ClearTypeFeedbackInfo() {
 | 
|    FixedArray* vector = feedback_vector();
 | 
|    Heap* heap = GetHeap();
 | 
| -  for (int i = 0; i < vector->length(); i++) {
 | 
| +  int length = vector->length();
 | 
| +
 | 
| +  for (int i = 0; i < length; i++) {
 | 
|      Object* obj = vector->get(i);
 | 
| -    if (!obj->IsAllocationSite()) {
 | 
| -      vector->set(
 | 
| -          i,
 | 
| -          TypeFeedbackInfo::RawUninitializedSentinel(heap),
 | 
| -          SKIP_WRITE_BARRIER);
 | 
| +    if (obj->IsHeapObject()) {
 | 
| +      InstanceType instance_type =
 | 
| +          HeapObject::cast(obj)->map()->instance_type();
 | 
| +      switch (instance_type) {
 | 
| +        case ALLOCATION_SITE_TYPE:
 | 
| +          // AllocationSites are not cleared because they do not store
 | 
| +          // information that leaks.
 | 
| +          break;
 | 
| +        case JS_FUNCTION_TYPE:
 | 
| +          // No need to clear the native context array function.
 | 
| +          if (obj == JSFunction::cast(obj)->context()->native_context()->
 | 
| +              get(Context::ARRAY_FUNCTION_INDEX)) {
 | 
| +            break;
 | 
| +          }
 | 
| +          // Fall through...
 | 
| +
 | 
| +        default:
 | 
| +          vector->set(i, TypeFeedbackInfo::RawUninitializedSentinel(heap),
 | 
| +                      SKIP_WRITE_BARRIER);
 | 
| +      }
 | 
|      }
 | 
|    }
 | 
|  }
 | 
| 
 |