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

typedef F<T extends core::Object> = (T) → void;
class C<T extends core::Object> extends core::Object {
  generic-contravariant field (self::C::T) → void y = null;
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method f() → void {
    (self::C::T) → void x = this.{self::C::y};
  }
}
static method g(self::C<core::num> c) → void {
  (core::num) → void x = c.{self::C::y} as{TypeError} (core::num) → void;
}
static method main() → void {}
