Index: test/mjsunit/regress-sync-optimized-lists.js |
diff --git a/test/mjsunit/regress-sync-optimized-lists.js b/test/mjsunit/regress-sync-optimized-lists.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f07c12b2cb82ef8ae2d149472aa38723e200f721 |
--- /dev/null |
+++ b/test/mjsunit/regress-sync-optimized-lists.js |
@@ -0,0 +1,45 @@ |
+// Copyright 2014 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Flags: --allow-natives-syntax --block-concurrent-recompilation |
+// Flags: --no-concurrent-osr |
+ |
+function Ctor() { |
+ this.a = 1; |
+} |
+ |
+function get_closure() { |
+ return function add_field(obj, osr) { |
+ obj.c = 3; |
+ var x = 0; |
+ if (osr) { |
+ %OptimizeFunctionOnNextCall(add_field, "osr"); |
+ } |
+ for (var i = 0; i < 10; i++) { |
+ x = i + 1; |
+ } |
+ return x; |
+ } |
+} |
+ |
+var f1 = get_closure(); |
+f1(new Ctor(), false); |
+f1(new Ctor(), false); |
+ |
+%OptimizeFunctionOnNextCall(f1, "concurrent"); |
+ |
+// Kick off concurrent recompilation and OSR. |
+var o = new Ctor(); |
+f1(o, true); |
+assertOptimized(f1, "no sync"); |
+ |
+// Flush the optimizing compiler's queue. |
+%NotifyContextDisposed(); |
+assertUnoptimized(f1, "no sync"); |
+ |
+// Trigger deopt. |
+o.c = 2.2; |
+ |
+var f2 = get_closure(); |
+f2(new Ctor(), true); |