library test /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:7: Error: Can't infer a type for 'x' as the overridden members don't have a combined signature.
// Try adding an explicit type.
//   var x;
//       ^
// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:12: Context: This is one of the overridden members.
//   int? get x;
//            ^
// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:15: Context: This is one of the overridden members.
//   double? get x;
//               ^
//
import self as self;
import "dart:core" as core;

abstract class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  abstract get x() → core::int?;
}
abstract class B extends core::Object {
  synthetic constructor •() → self::B
    : super core::Object::•()
    ;
  abstract get x() → core::int?;
}
abstract class C extends core::Object {
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
  abstract get x() → core::num?;
}
abstract class D extends core::Object {
  synthetic constructor •() → self::D
    : super core::Object::•()
    ;
  abstract get x() → core::double?;
}
class E extends self::A implements self::B {
  field core::int? x = null;
  synthetic constructor •() → self::E
    : super self::A::•()
    ;
}
class F extends self::A implements self::C {
  field core::int? x = null;
  synthetic constructor •() → self::F
    : super self::A::•()
    ;
}
class G extends self::A implements self::D {
  field invalid-type x = null;
  synthetic constructor •() → self::G
    : super self::A::•()
    ;
}
class H extends self::C implements self::D {
  field core::double? x = null;
  synthetic constructor •() → self::H
    : super self::C::•()
    ;
}
static method main() → dynamic {}
