library;
//
// Problems in library:
//
// pkg/front_end/testcases/general_nnbd_opt_out/mixin_conflicts.dart:24: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_nnbd_opt_out/mixin_conflicts.dart:9:3: Context: 'M.foo' is defined here.
//   foo() {}
//   ^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/mixin_conflicts.dart:31: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_nnbd_opt_out/mixin_conflicts.dart:9: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*
    ;
  method foo() → dynamic
    ;
}
class N = core::Object with self::M /*hasConstConstructor*/  {
  const synthetic constructor •() → self::N*
    : super core::Object::•()
    ;
}
abstract class _C&Object&N = core::Object with self::N /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_C&Object&N*
    : super core::Object::•()
    ;
}
class C extends self::_C&Object&N {
  synthetic constructor •() → self::C*
    ;
}
abstract class M2 extends core::Object implements self::M {
  synthetic constructor •() → self::M2*
    ;
  method bar() → dynamic
    ;
}
class N2 = core::Object with self::M2 /*hasConstConstructor*/  {
  const synthetic constructor •() → self::N2*
    : super core::Object::•()
    ;
}
abstract class N3 = core::Object with self::M2 /*hasConstConstructor*/  {
  const synthetic constructor •() → self::N3*
    : super core::Object::•()
    ;
}
abstract class _C2&Object&M2 = core::Object with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_C2&Object&M2*
    : super core::Object::•()
    ;
}
class C2 extends self::_C2&Object&M2 {
  synthetic constructor •() → self::C2*
    ;
}
abstract class _C3&Object&M2 = core::Object with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_C3&Object&M2*
    : super core::Object::•()
    ;
}
abstract class C3 extends self::_C3&Object&M2 {
  synthetic constructor •() → self::C3*
    ;
}
static method main() → dynamic
  ;
