library test;
//
// Problems in library:
//
// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
// Try adding an explicit type.
//   get a => null;
//       ^
// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the inherited members.
//   final I1 a = null;
//            ^
// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the inherited members.
//   final I2 a = null;
//            ^
//
// pkg/front_end/testcases/inference/conflicts_can_happen.dart:30:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
// Try adding an explicit type.
//   get a => null;
//       ^
// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the inherited members.
//   final I2 a = null;
//            ^
// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the inherited members.
//   final I1 a = null;
//            ^
//
import self as self;
import "dart:core" as core;

class I1 extends core::Object {
  field core::int* x;
  synthetic constructor •() → self::I1*
    ;
}
class I2 extends self::I1 {
  field core::int* y;
  synthetic constructor •() → self::I2*
    ;
}
class A extends core::Object {
  final field self::I1* a;
  synthetic constructor •() → self::A*
    ;
}
class B extends core::Object {
  final field self::I2* a;
  synthetic constructor •() → self::B*
    ;
}
class C1 extends core::Object implements self::A, self::B {
  synthetic constructor •() → self::C1*
    ;
  get a() → invalid-type
    ;
}
class C2 extends core::Object implements self::B, self::A {
  synthetic constructor •() → self::C2*
    ;
  get a() → invalid-type
    ;
}
static method main() → dynamic
  ;
