Index: runtime/vm/intermediate_language.cc |
=================================================================== |
--- runtime/vm/intermediate_language.cc (revision 38492) |
+++ runtime/vm/intermediate_language.cc (working copy) |
@@ -2729,11 +2729,12 @@ |
ASSERT(value_boundary.IsConstant()); |
ASSERT(shift_count >= 0); |
int64_t limit = 64 - shift_count; |
- int64_t value = static_cast<int64_t>(value_boundary.ConstantValue()); |
+ int64_t value = value_boundary.ConstantValue(); |
if ((value == 0) || |
(shift_count == 0) || |
- ((limit > 0) && (Utils::IsInt(limit, value)))) { |
+ ((limit > 0) && (limit < 64) && |
Vyacheslav Egorov (Google)
2014/07/23 13:00:05
limit < 64 is always true here because shift_count
Ivan Posva
2014/07/23 14:05:38
Removed.
|
+ Utils::IsInt(static_cast<int>(limit), value))) { |
// Result stays in 64 bit range. |
int64_t result = value << shift_count; |
return RangeBoundary(result); |
@@ -3696,10 +3697,10 @@ |
// Product of left and right max values stays in 64 bit range. |
const int64_t mul_max = left_max * right_max; |
if (Smi::IsValid(mul_max) && Smi::IsValid(-mul_max)) { |
- const intptr_t r_min = |
+ const int64_t r_min = |
OnlyPositiveOrZero(*left_range, *right_range) ? 0 : -mul_max; |
*result_min = RangeBoundary::FromConstant(r_min); |
- const intptr_t r_max = |
+ const int64_t r_max = |
OnlyNegativeOrZero(*left_range, *right_range) ? 0 : mul_max; |
*result_max = RangeBoundary::FromConstant(r_max); |
return true; |