// Formatted problems:
//
// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart:12:7: Error: 'M1 with M0' can't implement both 'I<int>' and 'I<dynamic>'
//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart'.
// class A extends M1 with M0 {}
//       ^
//
// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart:12:7: Error: 'A' can't implement both 'I<int>' and 'I<dynamic>'
//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart'.
// 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>
    ;
}
class M0<X extends core::Object = dynamic, Y extends core::String = dynamic> extends self::I<self::M0::X> {
  synthetic constructor •() → self::M0<self::M0::X, self::M0::Y>
    ;
}
class M1 extends core::Object implements self::I<core::int> {
  synthetic constructor •() → self::M1
    ;
}
abstract class _A&M1&M0 = self::M1 with self::M0<dynamic, dynamic> {
  synthetic constructor •() → self::_A&M1&M0
    : super self::M1::•()
    ;
}
class A extends self::_A&M1&M0 {
  synthetic constructor •() → self::A
    ;
}
static method main() → dynamic
  ;
