Index: src/code-stubs.cc |
diff --git a/src/code-stubs.cc b/src/code-stubs.cc |
index 1b9826ee42ea0c786a10855573009f63a80c1974..2283f847bab674029ae9e6d1f881e431589a60fc 100644 |
--- a/src/code-stubs.cc |
+++ b/src/code-stubs.cc |
@@ -584,11 +584,18 @@ void BinaryOpStub::UpdateStatus(Handle<Object> left, |
op_ == Token::ADD); |
if (old_state == GetExtraICState()) { |
- // Since the fpu is to precise, we might bail out on numbers which |
- // actually would truncate with 64 bit precision. |
- ASSERT(!CpuFeatures::IsSupported(SSE2) && |
- result_state_ <= INT32); |
- result_state_ = NUMBER; |
+ // Tagged operations can lead to non-truncating HChanges |
+ if (left->IsUndefined()) { |
+ left_state_ = GENERIC; |
+ } else if (right->IsUndefined()) { |
+ right_state_ = GENERIC; |
+ } else { |
+ // Since the fpu is to precise, we might bail out on numbers which |
+ // actually would truncate with 64 bit precision. |
+ ASSERT(!CpuFeatures::IsSupported(SSE2) && |
+ result_state_ <= INT32); |
+ result_state_ = NUMBER; |
+ } |
} |
} |