library test;
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 {
    core::int* x = 0;
    f.call();
  }
  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 dynamic catch(final dynamic x, final core::StackTrace* y) {
    dynamic x2 = x;
    core::StackTrace* y2 = y;
  }
}
static method main() → dynamic {}
