Chromium Code Reviews| Index: src/ia32/lithium-codegen-ia32.cc |
| diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc |
| index 0fc3f2541b57525d1406372b82a427c10276a623..1a3a1f796283130597be024e5735d17c85857313 100644 |
| --- a/src/ia32/lithium-codegen-ia32.cc |
| +++ b/src/ia32/lithium-codegen-ia32.cc |
| @@ -2750,9 +2750,16 @@ void LCodeGen::DoDeferredStringCharCodeAt(LStringCharCodeAt* instr) { |
| __ PushSafepointRegisters(); |
| __ push(string); |
| - // Push the index as a smi. |
| + // Push the index as a smi. It's safe because this instruction must |
| + // be dominated by a bounds check and because of the assert. |
| + STATIC_ASSERT(String::kMaxLength <= Smi::kMaxValue); |
| if (instr->index()->IsConstantOperand()) { |
| int const_index = ToInteger32(LConstantOperand::cast(instr->index())); |
| + if (!Smi::IsValid(const_index)) { |
|
Mads Ager (chromium)
2011/01/20 15:03:17
We shouldn't generate code at all for this instruc
|
| + // Guaranteed to be out of bounds, so we can use "-1" to have a |
| + // valid smi. |
| + const_index = -1; |
| + } |
| __ push(Immediate(Smi::FromInt(const_index))); |
| } else { |
| Register index = ToRegister(instr->index()); |