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

/*@testedFeatures=inference*/
library test;

class C {}

class D {}

class E {}

void test(void f()) {
  try {
    var /*@type=int*/ x = 0;
    f();
  } on C {
    var /*@type=int*/ x = 0;
  } on D catch (x) {
    var /*@type=D*/ x2 = x;
  } on E catch (x, y) {
    var /*@type=E*/ x2 = x;
    var /*@type=StackTrace*/ y2 = y;
  } catch (x, y) {
    var /*@type=dynamic*/ x2 = x;
    var /*@type=StackTrace*/ y2 = y;
  } finally {
    var /*@type=int*/ x = 0;
  }
}

main() {}
