library test /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

class C extends core::Object {
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
}
class D extends core::Object {
  synthetic constructor •() → self::D
    : super core::Object::•()
    ;
}
class E extends core::Object {
  synthetic constructor •() → self::E
    : super core::Object::•()
    ;
}
static method test(() → void f) → void {
  try
    try {
      core::int x = 0;
      f(){() → void};
    }
    on self::C catch(no-exception-var) {
      core::int x = 0;
    }
    on self::D catch(final self::D x) {
      self::D x2 = x;
    }
    on self::E catch(final self::E x, final core::StackTrace y) {
      self::E x2 = x;
      core::StackTrace y2 = y;
    }
    on core::Object catch(final core::Object x, final core::StackTrace y) {
      core::Object x2 = x;
      core::StackTrace y2 = y;
    }
  finally {
    core::int x = 0;
  }
}
static method main() → dynamic {}
