| Index: src/full-codegen/x64/full-codegen-x64.cc | 
| diff --git a/src/full-codegen/x64/full-codegen-x64.cc b/src/full-codegen/x64/full-codegen-x64.cc | 
| index d5e630e297e1f9d9c4a10b6b85cb74bd7d00e24e..f9af3c7cb5725671178c7e79d00a772ccbed0d04 100644 | 
| --- a/src/full-codegen/x64/full-codegen-x64.cc | 
| +++ b/src/full-codegen/x64/full-codegen-x64.cc | 
| @@ -2243,10 +2243,46 @@ void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) { | 
| Literal* key = prop->key()->AsLiteral(); | 
| DCHECK(!prop->IsSuperAccess()); | 
|  | 
| +  // See comment below. | 
| +  if (FeedbackVector()->GetIndex(prop->PropertyFeedbackSlot()) == 6) { | 
| +    __ Push(LoadDescriptor::ReceiverRegister()); | 
| +  } | 
| + | 
| __ Move(LoadDescriptor::NameRegister(), key->value()); | 
| __ Move(LoadDescriptor::SlotRegister(), | 
| SmiFromSlot(prop->PropertyFeedbackSlot())); | 
| CallLoadIC(NOT_INSIDE_TYPEOF, language_mode()); | 
| + | 
| +  // Sanity check: The loaded value must be a JS-exposed kind of object, | 
| +  // not something internal (like a Map, or FixedArray). Check this here | 
| +  // to chase after a rare but recurring crash bug. It seems to always | 
| +  // occur for functions beginning with "this.foo.bar()", so be selective | 
| +  // and only insert the check for the first LoadIC (identified by slot). | 
| +  // TODO(jkummerow): Remove this when it has generated a few crash reports. | 
| +  // Don't forget to remove the Push() above as well! | 
| +  if (FeedbackVector()->GetIndex(prop->PropertyFeedbackSlot()) == 6) { | 
| +    __ Pop(LoadDescriptor::ReceiverRegister()); | 
| + | 
| +    Label ok; | 
| +    __ JumpIfSmi(rax, &ok, Label::kNear); | 
| +    __ movp(rbx, FieldOperand(rax, HeapObject::kMapOffset)); | 
| +    __ CmpInstanceType(rbx, LAST_PRIMITIVE_TYPE); | 
| +    __ j(below_equal, &ok, Label::kNear); | 
| +    __ CmpInstanceType(rbx, FIRST_JS_RECEIVER_TYPE); | 
| +    __ j(above_equal, &ok, Label::kNear); | 
| + | 
| +    __ Push(Smi::FromInt(0xaabbccdd)); | 
| +    __ Push(LoadDescriptor::ReceiverRegister()); | 
| +    __ movp(rbx, FieldOperand(LoadDescriptor::ReceiverRegister(), | 
| +                              HeapObject::kMapOffset)); | 
| +    __ Push(rbx); | 
| +    __ movp(rbx, FieldOperand(LoadDescriptor::ReceiverRegister(), | 
| +                              JSObject::kPropertiesOffset)); | 
| +    __ Push(rbx); | 
| +    __ int3(); | 
| + | 
| +    __ bind(&ok); | 
| +  } | 
| } | 
|  | 
|  | 
|  |