| Index: runtime/vm/intermediate_language.h | 
| diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h | 
| index ccb0b2def5266170f6e7ddce541763bb2937540c..5402e9a23069c7b738c389cfdef8cdd3788ef049 100644 | 
| --- a/runtime/vm/intermediate_language.h | 
| +++ b/runtime/vm/intermediate_language.h | 
| @@ -1607,7 +1607,7 @@ class RangeBoundary : public ValueObject { | 
| static RangeBoundary Max(RangeBoundary a, RangeBoundary b); | 
|  | 
| bool Overflowed() const { | 
| -    return !Smi::IsValid(value()); | 
| +    return IsConstant() && !Smi::IsValid(value()); | 
| } | 
|  | 
| RangeBoundary Clamp() const { | 
| @@ -2367,7 +2367,8 @@ class StaticCallInstr : public TemplateDefinition<0> { | 
| function_(function), | 
| argument_names_(argument_names), | 
| arguments_(arguments), | 
| -        result_cid_(kDynamicCid) { | 
| +        result_cid_(kDynamicCid), | 
| +        is_known_constructor_(false) { | 
| ASSERT(function.IsZoneHandle()); | 
| ASSERT(argument_names.IsZoneHandle()); | 
| } | 
| @@ -2394,6 +2395,11 @@ class StaticCallInstr : public TemplateDefinition<0> { | 
| virtual intptr_t ResultCid() const { return result_cid_; } | 
| void set_result_cid(intptr_t value) { result_cid_ = value; } | 
|  | 
| +  bool is_known_constructor() const { return is_known_constructor_; } | 
| +  void set_is_known_constructor(bool is_known_constructor) { | 
| +    is_known_constructor_ = is_known_constructor; | 
| +  } | 
| + | 
| private: | 
| const intptr_t token_pos_; | 
| const Function& function_; | 
| @@ -2401,6 +2407,10 @@ class StaticCallInstr : public TemplateDefinition<0> { | 
| ZoneGrowableArray<PushArgumentInstr*>* arguments_; | 
| intptr_t result_cid_;  // For some library functions we know the result. | 
|  | 
| +  // Some library constructors have known semantics. | 
| +  bool is_known_constructor_; | 
| + | 
| + | 
| DISALLOW_COPY_AND_ASSIGN(StaticCallInstr); | 
| }; | 
|  | 
| @@ -3956,7 +3966,7 @@ class CheckArrayBoundInstr : public TemplateInstruction<2> { | 
|  | 
| intptr_t array_type() const { return array_type_; } | 
|  | 
| -  bool IsRedundant(); | 
| +  bool IsRedundant(RangeBoundary length); | 
|  | 
| private: | 
| intptr_t array_type_; | 
|  |