Chromium Code Reviews| Index: src/x64/lithium-codegen-x64.cc |
| diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc |
| index ef9fb92e0eda32a4c01a1bcedf99263d6067d4cb..3b1281debec8ff610d98c230a376492e11196736 100644 |
| --- a/src/x64/lithium-codegen-x64.cc |
| +++ b/src/x64/lithium-codegen-x64.cc |
| @@ -2918,9 +2918,13 @@ void LCodeGen::DoAccessArgumentsAt(LAccessArgumentsAt* instr) { |
| instr->index()->IsConstantOperand()) { |
| int32_t const_index = ToInteger32(LConstantOperand::cast(instr->index())); |
| int32_t const_length = ToInteger32(LConstantOperand::cast(instr->length())); |
| - StackArgumentsAccessor args(arguments, const_length, |
| - ARGUMENTS_DONT_CONTAIN_RECEIVER); |
| - __ movp(result, args.GetArgumentOperand(const_index)); |
| + if (const_index >= 0 && const_index < const_length) { |
| + StackArgumentsAccessor args(arguments, const_length, |
| + ARGUMENTS_DONT_CONTAIN_RECEIVER); |
| + __ movp(result, args.GetArgumentOperand(const_index)); |
|
ulan
2014/03/24 15:43:10
This move is guarded by HBoundsCheck at run-time,
|
| + } else if (FLAG_debug_code) { |
| + __ Abort(const_index < 0 ? kIndexIsNegative : kIndexIsTooLarge); |
| + } |
| } else { |
| Register length = ToRegister(instr->length()); |
| // There are two words between the frame pointer and the last argument. |