| Index: src/objects-inl.h | 
| diff --git a/src/objects-inl.h b/src/objects-inl.h | 
| index 662ad923baab283f55579ebe5c80f502bfda986e..cb7b7c881d0c5853138e2e48ad5abe0886816de2 100644 | 
| --- a/src/objects-inl.h | 
| +++ b/src/objects-inl.h | 
| @@ -778,7 +778,7 @@ int Failure::requested() const { | 
| kFailureTypeTagSize + kSpaceTagSize - kObjectAlignmentBits; | 
| STATIC_ASSERT(kShiftBits >= 0); | 
| ASSERT(type() == RETRY_AFTER_GC); | 
| -  return value() >> kShiftBits; | 
| +  return static_cast<int>(value() >> kShiftBits); | 
| } | 
|  | 
|  | 
| @@ -804,29 +804,31 @@ Failure* Failure::OutOfMemoryException() { | 
| } | 
|  | 
|  | 
| -int Failure::value() const { | 
| -  return static_cast<int>(reinterpret_cast<intptr_t>(this) >> kFailureTagSize); | 
| +intptr_t Failure::value() const { | 
| +  return reinterpret_cast<intptr_t>(this) >> kFailureTagSize; | 
| } | 
|  | 
|  | 
| Failure* Failure::RetryAfterGC(int requested_bytes) { | 
| // Assert that the space encoding fits in the three bytes allotted for it. | 
| ASSERT((LAST_SPACE & ~kSpaceTagMask) == 0); | 
| -  int requested = requested_bytes >> kObjectAlignmentBits; | 
| +  intptr_t requested = requested_bytes >> kObjectAlignmentBits; | 
| +  int tag_bits = kSpaceTagSize + kFailureTypeTagSize; | 
| +  if (((requested << tag_bits) >> tag_bits) != requested) { | 
| +    // No room for entire requested size in the bits. Round down to | 
| +    // maximally representable size. | 
| +    requested = static_cast<intptr_t>( | 
| +                    (~static_cast<uintptr_t>(0)) >> (tag_bits + 1)); | 
| +  } | 
| int value = (requested << kSpaceTagSize) | NEW_SPACE; | 
| -  ASSERT(value >> kSpaceTagSize == requested); | 
| -  ASSERT(Smi::IsValid(value)); | 
| -  ASSERT(value == ((value << kFailureTypeTagSize) >> kFailureTypeTagSize)); | 
| -  ASSERT(Smi::IsValid(value << kFailureTypeTagSize)); | 
| return Construct(RETRY_AFTER_GC, value); | 
| } | 
|  | 
|  | 
| -Failure* Failure::Construct(Type type, int value) { | 
| -  int info = (value << kFailureTypeTagSize) | type; | 
| +Failure* Failure::Construct(Type type, intptr_t value) { | 
| +  intptr_t info = (static_cast<intptr_t>(value) << kFailureTypeTagSize) | type; | 
| ASSERT(((info << kFailureTagSize) >> kFailureTagSize) == info); | 
| -  return reinterpret_cast<Failure*>( | 
| -      (static_cast<intptr_t>(info) << kFailureTagSize) | kFailureTag); | 
| +  return reinterpret_cast<Failure*>((info << kFailureTagSize) | kFailureTag); | 
| } | 
|  | 
|  | 
|  |