// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. // VMOptions=--optimization-counter-threshold=10 --no-background-compilation // Test OSR in different places of a try-catch. import "package:expect/expect.dart"; maythrow(x) { try { if (x == null) throw 42; return 99; } finally {} } f1() { var s = 0, t = "abc"; for (var i = 0; i < 21; ++i) { s += i; } try { maythrow(null); } catch (e) { Expect.equals("abc", t); Expect.equals(42, e); s++; } return s; } f2([int x = 1]) { var s = 0; var t = "abc"; try { try { for (var i = 0; i < 20; ++i) { if (i == 18) maythrow(null); s += x; } } catch (e) { Expect.equals(1, x); Expect.equals("abc", t); Expect.equals(42, e); s++; } } catch (e) {} return s; } f3() { var s = 0, t = "abc"; try { maythrow(null); } catch (e) { Expect.equals("abc", t); for (var i = 0; i < 21; ++i) { s += i; } Expect.equals("abc", t); Expect.equals(42, e); return s; } } f4() { var s = 0, t = "abc"; try { for (var i = 0; i < 21; ++i) { if (i == 18) maythrow(null); s += i; } } catch (e) { Expect.equals("abc", t); Expect.equals(42, e); s++; } return s; } f5() { var s, t = "abc"; try { maythrow(null); } catch (e) { Expect.equals("abc", t); Expect.equals(42, e); s = 0; } for (var i = 0; i < 21; ++i) { s += i; } Expect.equals("abc", t); return s; } main() { Expect.equals(211, f1()); Expect.equals(19, f2()); Expect.equals(210, f3()); Expect.equals(9 * 17 + 1, f4()); Expect.equals(210, f5()); }