// Formatted problems:
//
// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:7: Error: Type argument 'dart.core::Comparable<dynamic>' violates the corresponding type variable bound of 'M0' in the supertype 'M0' of class 'M1 with M0'.
// Try changing type arguments so that they conform to the bounds.
// class A extends M1 with M0 {}
//       ^
// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:7:13: Context: Bound of this variable is violated.
// class M0<X, Y extends Comparable<Y>> extends I<X> {}
//             ^

// Unhandled errors:
//
// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:7: Error: Type argument 'dart.core::Comparable<dynamic>' violates the corresponding type variable bound of 'M0' in the supertype 'M0' of class 'M1 with M0'.
// Try changing type arguments so that they conform to the bounds.
// class A extends M1 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<X extends core::Object = dynamic, Y extends core::Comparable<self::M0::Y> = core::Comparable<dynamic>> extends self::I<self::M0::X> {
  synthetic constructor •() → self::M0<self::M0::X, self::M0::Y>
    : super self::I::•()
    ;
}
class M1 extends core::Object implements self::I<core::int> {
  synthetic constructor •() → self::M1
    : super core::Object::•()
    ;
}
abstract class _A&M1&M0 = self::M1 with self::M0<core::int, core::Comparable<dynamic>> {
  synthetic constructor •() → self::_A&M1&M0
    : super self::M1::•()
    ;
}
class A extends self::_A&M1&M0 {
  synthetic constructor •() → self::A
    : super self::M1::•()
    ;
}
static method main() → dynamic {}
