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

typedef F = () →* core::int*;
abstract class A extends core::Object {
  synthetic constructor •() → self::A*
    : super core::Object::•()
    ;
  abstract set x(() →* core::int* value) → void;
}
abstract class B extends self::A {
  synthetic constructor •() → self::B*
    : super self::A::•()
    ;
  abstract set x(() →* dynamic value) → void;
}
static method f<T extends core::Object* = dynamic>() → self::f::T*
  return null;
static method g(self::B* b) → dynamic {
  b.x = self::f<dynamic>();
}
static method main() → dynamic {}
