| Index: src/crankshaft/hydrogen.cc
|
| diff --git a/src/crankshaft/hydrogen.cc b/src/crankshaft/hydrogen.cc
|
| index 7fce48961f3a2c8d78d23b43b7e3a08fa9e7c77e..db60d6f3523d029b45b2cbd1cf3393b62c619b44 100644
|
| --- a/src/crankshaft/hydrogen.cc
|
| +++ b/src/crankshaft/hydrogen.cc
|
| @@ -2413,7 +2413,20 @@ HValue* HGraphBuilder::BuildAddStringLengths(HValue* left_length,
|
| HValue* length = AddUncasted<HAdd>(left_length, right_length);
|
| // Check that length <= kMaxLength <=> length < MaxLength + 1.
|
| HValue* max_length = Add<HConstant>(String::kMaxLength + 1);
|
| - Add<HBoundsCheck>(length, max_length);
|
| + if (top_info()->IsStub()) {
|
| + // This is a mitigation for crbug.com/627934; the real fix
|
| + // will be to migrate the StringAddStub to TurboFan one day.
|
| + IfBuilder if_invalid(this);
|
| + if_invalid.If<HCompareNumericAndBranch>(length, max_length, Token::GT);
|
| + if_invalid.Then();
|
| + {
|
| + Add<HCallRuntime>(
|
| + Runtime::FunctionForId(Runtime::kThrowInvalidStringLength), 0);
|
| + }
|
| + if_invalid.End();
|
| + } else {
|
| + Add<HBoundsCheck>(length, max_length);
|
| + }
|
| return length;
|
| }
|
|
|
|
|