//
// Problems in component:
//
// 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>
    ;
}
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>
    ;
}
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>
    ;
}
abstract class _A&Object&M0 = core::Object with self::M0<dynamic> {
  const synthetic constructor •() → self::_A&Object&M0
    : super core::Object::•()
    ;
}
abstract class _A&Object&M0&M1 = self::_A&Object&M0 with 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
    ;
}
static method main() → dynamic
  ;
