// Unhandled errors:
//
// pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart:14:7: Error: 'M2 with M0' can't implement both '#lib1::I<dart.core::List<dart.core::Map<dart.core::int, dart.core::int>>>' and '#lib1::I<dart.core::List<dynamic>>'
// class A extends M2<int> with M0 {}
//       ^
//
// pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart:14:7: Error: 'A' can't implement both '#lib1::I<dart.core::List<dart.core::Map<dart.core::int, dart.core::int>>>' and '#lib1::I<dart.core::List<dynamic>>'
// class A extends M2<int> with M0 {}
//       ^

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

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