| Index: test/cctest/test-compiler.cc
 | 
| diff --git a/test/cctest/test-compiler.cc b/test/cctest/test-compiler.cc
 | 
| index 9ca0b0a170f260602b9e417a5b88ce85b5837a8d..e366a068281af32d7d421b6992b8aede2684542e 100644
 | 
| --- a/test/cctest/test-compiler.cc
 | 
| +++ b/test/cctest/test-compiler.cc
 | 
| @@ -352,6 +352,35 @@ TEST(GetScriptLineNumber) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| +// Test that optimized code for different closures is actually shared
 | 
| +// immediately by the FastNewClosureStub when run in the same context.
 | 
| +TEST(OptimizedCodeSharing) {
 | 
| +  FLAG_allow_natives_syntax = true;
 | 
| +  InitializeVM();
 | 
| +  v8::HandleScope scope;
 | 
| +  for (int i = 0; i < 10; i++) {
 | 
| +    LocalContext env;
 | 
| +    env->Global()->Set(v8::String::New("x"), v8::Integer::New(i));
 | 
| +    CompileRun("function MakeClosure() {"
 | 
| +               "  return function() { return x; };"
 | 
| +               "}"
 | 
| +               "var closure0 = MakeClosure();"
 | 
| +               "%DebugPrint(closure0());"
 | 
| +               "%OptimizeFunctionOnNextCall(closure0);"
 | 
| +               "%DebugPrint(closure0());"
 | 
| +               "var closure1 = MakeClosure();"
 | 
| +               "var closure2 = MakeClosure();");
 | 
| +    Handle<JSFunction> fun1 = v8::Utils::OpenHandle(
 | 
| +        *v8::Local<v8::Function>::Cast(env->Global()->Get(v8_str("closure1"))));
 | 
| +    Handle<JSFunction> fun2 = v8::Utils::OpenHandle(
 | 
| +        *v8::Local<v8::Function>::Cast(env->Global()->Get(v8_str("closure2"))));
 | 
| +    CHECK(fun1->IsOptimized() || !FLAG_crankshaft);
 | 
| +    CHECK(fun2->IsOptimized() || !FLAG_crankshaft);
 | 
| +    CHECK_EQ(fun1->code(), fun2->code());
 | 
| +  }
 | 
| +}
 | 
| +
 | 
| +
 | 
|  #ifdef ENABLE_DISASSEMBLER
 | 
|  static Handle<JSFunction> GetJSFunction(v8::Handle<v8::Object> obj,
 | 
|                                   const char* property_name) {
 | 
| 
 |