Index: test/mjsunit/compiler/osr-infinite.js |
diff --git a/test/mjsunit/compiler/osr-infinite.js b/test/mjsunit/compiler/osr-infinite.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..aa74c877d5b7c7a23b821ff25e1a10f4fafd7a65 |
--- /dev/null |
+++ b/test/mjsunit/compiler/osr-infinite.js |
@@ -0,0 +1,78 @@ |
+// Copyright 2015 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: --use-osr --allow-natives-syntax --turbo-osr |
+ |
+var global_counter = 0; |
+ |
+function thrower() { |
+ var x = global_counter++; |
+ if (x == 5) %OptimizeOsr(thrower.caller); |
+ if (x == 10) throw "terminate"; |
+} |
+ |
+%NeverOptimizeFunction(thrower); // Don't want to inline the thrower. |
+%NeverOptimizeFunction(test); // Don't want to inline the func into test. |
+ |
+function test(func) { |
+ for (var i = 0; i < 3; i++) { |
+ global_counter = 0; |
+ assertThrows(func); |
+ } |
+} |
+ |
+function n1() { |
+ while (true) thrower(); |
+} |
+ |
+function n2() { |
+ while (true) while (true) thrower(); |
+} |
+ |
+function n3() { |
+ while (true) while (true) while (true) thrower(); |
+} |
+ |
+function n4() { |
+ while (true) while (true) while (true) while (true) thrower(); |
+} |
+ |
+function b1(a) { |
+ while (true) { |
+ thrower(); |
+ if (a) break |
+ } |
+} |
+ |
+ |
+function b2(a) { |
+ while (true) { |
+ while (true) { |
+ thrower(); |
+ if (a) break |
+ } |
+ } |
+} |
+ |
+ |
+function b3(a) { |
+ while (true) { |
+ while (true) { |
+ while (true) { |
+ thrower(); |
+ if (a) break |
+ } |
+ if (a) break |
+ } |
+ } |
+} |
+ |
+ |
+test(n1); |
+test(n2); |
+test(n3); |
+test(n4); |
+test(b1); |
+test(b2); |
+test(b3); |