// Unhandled errors:
//
// pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:15:69: Error: 'Object with M0, M1' can't implement both 'I<dynamic, int>' and 'I<String, dynamic>'
//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_unification_1.dart'.
// class /*@error=AmbiguousSupertypes*/ /*@error=AmbiguousSupertypes*/ A
//                                                                     ^
//
// pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:15:69: Error: 'A' can't implement both 'I<dynamic, int>' and 'I<String, dynamic>'
//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_unification_1.dart'.
// class /*@error=AmbiguousSupertypes*/ /*@error=AmbiguousSupertypes*/ A
//                                                                     ^

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

class I<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → self::I<self::I::X, self::I::Y>
    : super core::Object::•()
    ;
}
class M0<T extends core::Object = dynamic> extends core::Object implements self::I<self::M0::T, core::int> {
  synthetic constructor •() → self::M0<self::M0::T>
    : super core::Object::•()
    ;
}
class M1<T extends core::Object = dynamic> extends core::Object implements self::I<core::String, self::M1::T> {
  synthetic constructor •() → self::M1<self::M1::T>
    : super core::Object::•()
    ;
}
abstract class _A&Object&M0 extends core::Object implements self::M0<dynamic> {
  const synthetic constructor •() → self::_A&Object&M0
    : super core::Object::•()
    ;
}
abstract class _A&Object&M0&M1 extends self::_A&Object&M0 implements self::M1<dynamic> {
  const synthetic constructor •() → self::_A&Object&M0&M1
    : super self::_A&Object&M0::•()
    ;
}
class A extends self::_A&Object&M0&M1 {
  synthetic constructor •() → self::A
    : super self::_A&Object&M0&M1::•()
    ;
}
static method main() → dynamic {}
