1014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Copyright 2015 the V8 project authors. All rights reserved. 2014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// found in the LICENSE file. 4014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 5014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Flags: --use-osr --allow-natives-syntax --turbo-osr 6014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 7014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvar global_counter = 0; 8014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 9014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochfunction thrower() { 10014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch var x = global_counter++; 11014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if (x == 5) %OptimizeOsr(thrower.caller); 12014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if (x == 10) throw "terminate"; 13014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 14014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 15014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch%NeverOptimizeFunction(thrower); // Don't want to inline the thrower. 16014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch%NeverOptimizeFunction(test); // Don't want to inline the func into test. 17014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 18014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochfunction test(func) { 19014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch for (var i = 0; i < 3; i++) { 20014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch global_counter = 0; 21014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertThrows(func); 22014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 23014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 24014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 25014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochfunction n1() { 26014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch while (true) thrower(); 27014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 28014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 29014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochfunction n2() { 30014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch while (true) while (true) thrower(); 31014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 32014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 33014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochfunction n3() { 34014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch while (true) while (true) while (true) thrower(); 35014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 36014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 37014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochfunction n4() { 38014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch while (true) while (true) while (true) while (true) thrower(); 39014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 40014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 41014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochfunction b1(a) { 42014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch while (true) { 43014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch thrower(); 44014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if (a) break 45014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 46014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 47014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 48014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 49014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochfunction b2(a) { 50014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch while (true) { 51014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch while (true) { 52014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch thrower(); 53014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if (a) break 54014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 55014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 56014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 57014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 58014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 59014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochfunction b3(a) { 60014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch while (true) { 61014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch while (true) { 62014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch while (true) { 63014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch thrower(); 64014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if (a) break 65014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 66014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if (a) break 67014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 68014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 69014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 70014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 71014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 72014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochtest(n1); 73014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochtest(n2); 74014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochtest(n3); 75014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochtest(n4); 76014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochtest(b1); 77014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochtest(b2); 78014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochtest(b3); 79