library test;
import self as self;
import "dart:core" as core;

class C<T extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method f1(self::C::T x) → void {}
  method f2(core::int x) → void {}
}
class D extends self::C<core::num> {
  synthetic constructor •() → void
    : super self::C::•()
    ;
  method f1(covariant core::int x) → void {}
}
static method g1(dynamic d) → void {
  d.f1(1.5);
}
static method g2(dynamic d) → void {
  d.f2(1.5);
}
static method test() → void {
  self::g1(new self::C::•<core::int>());
  self::g2(new self::C::•<dynamic>());
  self::g1(new self::D::•());
}
static method main() → dynamic {}
