| Index: src/arm/full-codegen-arm.cc
 | 
| diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc
 | 
| index ff446c5e4b9cc4176c913315615029f2d6f77123..7a265aff47ceeb72f4a24d944e06a864973930b8 100644
 | 
| --- a/src/arm/full-codegen-arm.cc
 | 
| +++ b/src/arm/full-codegen-arm.cc
 | 
| @@ -681,18 +681,24 @@ void FullCodeGenerator::EmitDeclaration(Variable* variable,
 | 
|    } else if (prop != NULL) {
 | 
|      if (function != NULL || mode == Variable::CONST) {
 | 
|        // We are declaring a function or constant that rewrites to a
 | 
| -      // property.  Use (keyed) IC to set the initial value.
 | 
| -      VisitForStackValue(prop->obj());
 | 
| +      // property.  Use (keyed) IC to set the initial value.  We
 | 
| +      // cannot visit the rewrite because it's shared and we risk
 | 
| +      // recording duplicate AST IDs for bailouts from optimized code.
 | 
| +      ASSERT(prop->obj()->AsVariableProxy() != NULL);
 | 
| +      { AccumulatorValueContext for_object(this);
 | 
| +        EmitVariableLoad(prop->obj()->AsVariableProxy()->var());
 | 
| +      }
 | 
|        if (function != NULL) {
 | 
| -        VisitForStackValue(prop->key());
 | 
| +        __ push(r0);
 | 
|          VisitForAccumulatorValue(function);
 | 
| -        __ pop(r1);  // Key.
 | 
| +        __ pop(r2);
 | 
|        } else {
 | 
| -        VisitForAccumulatorValue(prop->key());
 | 
| -        __ mov(r1, result_register());  // Key.
 | 
| -        __ LoadRoot(result_register(), Heap::kTheHoleValueRootIndex);
 | 
| +        __ mov(r2, r0);
 | 
| +        __ LoadRoot(r0, Heap::kTheHoleValueRootIndex);
 | 
|        }
 | 
| -      __ pop(r2);  // Receiver.
 | 
| +      ASSERT(prop->key()->AsLiteral() != NULL &&
 | 
| +             prop->key()->AsLiteral()->handle()->IsSmi());
 | 
| +      __ mov(r1, Operand(prop->key()->AsLiteral()->handle()));
 | 
|  
 | 
|        Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Initialize));
 | 
|        EmitCallIC(ic, RelocInfo::CODE_TARGET);
 | 
| 
 |