library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/mixin_conflicts.dart:22:7: Error: The non-abstract class 'N2' is missing implementations for these members:
//  - M.foo
// Try to either
//  - provide an implementation,
//  - inherit an implementation from a superclass or mixin,
//  - mark the class as abstract, or
//  - provide a 'noSuchMethod' implementation.
//
// class N2 = Object with M2;
//       ^^
// pkg/front_end/testcases/general/mixin_conflicts.dart:7:3: Context: 'M.foo' is defined here.
//   foo() {}
//   ^^^
//
// pkg/front_end/testcases/general/mixin_conflicts.dart:29:7: Error: The non-abstract class 'C2' is missing implementations for these members:
//  - M.foo
// Try to either
//  - provide an implementation,
//  - inherit an implementation from a superclass or mixin,
//  - mark the class as abstract, or
//  - provide a 'noSuchMethod' implementation.
//
// class C2 extends Object with M2 {}
//       ^^
// pkg/front_end/testcases/general/mixin_conflicts.dart:7:3: Context: 'M.foo' is defined here.
//   foo() {}
//   ^^^
//
import self as self;
import "dart:core" as core;

class M extends core::Object {
  synthetic constructor •() → self::M*
    : super core::Object::•()
    ;
  method foo() → dynamic {}
}
class N = core::Object with self::M {
  const synthetic constructor •() → self::N*
    : super core::Object::•()
    ;
}
abstract class _C&Object&N = core::Object with self::N {
  const synthetic constructor •() → self::_C&Object&N*
    : super core::Object::•()
    ;
}
class C extends self::_C&Object&N {
  synthetic constructor •() → self::C*
    : super self::_C&Object&N::•()
    ;
}
abstract class M2 extends core::Object implements self::M {
  synthetic constructor •() → self::M2*
    : super core::Object::•()
    ;
  method bar() → dynamic {}
}
class N2 = core::Object with self::M2 {
  const synthetic constructor •() → self::N2*
    : super core::Object::•()
    ;
}
abstract class N3 = core::Object with self::M2 {
  const synthetic constructor •() → self::N3*
    : super core::Object::•()
    ;
}
abstract class _C2&Object&M2 = core::Object with self::M2 {
  const synthetic constructor •() → self::_C2&Object&M2*
    : super core::Object::•()
    ;
}
class C2 extends self::_C2&Object&M2 {
  synthetic constructor •() → self::C2*
    : super self::_C2&Object&M2::•()
    ;
}
abstract class _C3&Object&M2 = core::Object with self::M2 {
  const synthetic constructor •() → self::_C3&Object&M2*
    : super core::Object::•()
    ;
}
abstract class C3 extends self::_C3&Object&M2 {
  synthetic constructor •() → self::C3*
    : super self::_C3&Object&M2::•()
    ;
}
static method main() → dynamic {}
