// Copyright (c) 2015, 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.

// Regression test for issue 21795.

@pragma("vm:entry-point") // Prevent obfuscation
foo(t) {
  try {
    if (t == 123) throw 42;
  } finally {}
}

bar() {
  try {
    return 42;
  } finally {}
}

class A {
  test(t) {
    try {
      foo(t);
    } finally {
      if (t == 0) {
        try {} catch (err, st) {}
      }
    }
  }
}

main() {
  var a = new A();
  for (var i = 0; i < 10000; ++i) a.test(0);
  try {
    a.test(123);
  } catch (e, s) {
    if (s.toString().indexOf("foo") == -1) {
      print(s);
      throw "Expected foo in stacktrace!";
    }
  }
}
