// 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 var global_counter = 0; function thrower() { var x = global_counter++; if (x == 5) %OptimizeOsr(1); 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; %PrepareFunctionForOptimization(func); assertThrows(func); } } function n1() { while (true) thrower(); } %PrepareFunctionForOptimization(n1); function n2() { while (true) while (true) thrower(); } %PrepareFunctionForOptimization(n2); function n3() { while (true) while (true) while (true) thrower(); } %PrepareFunctionForOptimization(n3); function n4() { while (true) while (true) while (true) while (true) thrower(); } %PrepareFunctionForOptimization(n4); function b1(a) { while (true) { thrower(); if (a) break } } %PrepareFunctionForOptimization(b1); function b2(a) { while (true) { while (true) { thrower(); if (a) break } } } %PrepareFunctionForOptimization(b2); function b3(a) { while (true) { while (true) { while (true) { thrower(); if (a) break } if (a) break } } } %PrepareFunctionForOptimization(b3); test(n1); test(n2); test(n3); test(n4); test(b1); test(b2); test(b3);