// 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);