library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/mixin_application_override.dart:21:7: Error: The mixin application class 'A0' introduces an erroneous override of 'foo'.
// class A0 = S with M;
//       ^^
// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
//
// pkg/front_end/testcases/general/mixin_application_override.dart:22:7: Error: The mixin application class 'A1' introduces an erroneous override of 'foo'.
// class A1 = S with M1, M;
//       ^^
// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
//
// pkg/front_end/testcases/general/mixin_application_override.dart:23:7: Error: The mixin application class 'A2' introduces an erroneous override of 'foo'.
// class A2 = S with M1, M2, M;
//       ^^
// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
//
// pkg/front_end/testcases/general/mixin_application_override.dart:25:7: Error: Applying the mixin 'M' to 'S' introduces an erroneous override of 'foo'.
// class A0X = S with M, MX;
//       ^^^
// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
//
// pkg/front_end/testcases/general/mixin_application_override.dart:26:7: Error: Applying the mixin 'M' to 'S with M1' introduces an erroneous override of 'foo'.
// class A1X = S with M1, M, MX;
//       ^^^
// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
//
// pkg/front_end/testcases/general/mixin_application_override.dart:27:7: Error: Applying the mixin 'M' to 'S with M1, M2' introduces an erroneous override of 'foo'.
// class A2X = S with M1, M2, M, MX;
//       ^^^
// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
//
// pkg/front_end/testcases/general/mixin_application_override.dart:29:7: Error: Applying the mixin 'M' to 'S' introduces an erroneous override of 'foo'.
// class B0 extends S with M {}
//       ^^
// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
//
// pkg/front_end/testcases/general/mixin_application_override.dart:31:7: Error: Applying the mixin 'M' to 'S with M1' introduces an erroneous override of 'foo'.
// class B1 extends S with M1, M {}
//       ^^
// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
//
// pkg/front_end/testcases/general/mixin_application_override.dart:33:7: Error: Applying the mixin 'M' to 'S with M1, M2' introduces an erroneous override of 'foo'.
// class B2 extends S with M1, M2, M {}
//       ^^
// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
//
// pkg/front_end/testcases/general/mixin_application_override.dart:35:7: Error: Applying the mixin 'M' to 'S' introduces an erroneous override of 'foo'.
// class B0X extends S with M, MX {}
//       ^^^
// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
//
// pkg/front_end/testcases/general/mixin_application_override.dart:37:7: Error: Applying the mixin 'M' to 'S with M1' introduces an erroneous override of 'foo'.
// class B1X extends S with M1, M, MX {}
//       ^^^
// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
//
// pkg/front_end/testcases/general/mixin_application_override.dart:39:7: Error: Applying the mixin 'M' to 'S with M1, M2' introduces an erroneous override of 'foo'.
// class B2X extends S with M1, M2, M, MX {}
//       ^^^
// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
//
import self as self;
import "dart:core" as core;

class S extends core::Object {
  synthetic constructor •() → self::S
    : super core::Object::•()
    ;
  method foo([dynamic x = #C1]) → dynamic {}
}
abstract class M extends core::Object /*isMixinDeclaration*/  {
  method foo() → dynamic {}
}
abstract class M1 extends core::Object /*isMixinDeclaration*/  {
}
abstract class M2 extends core::Object /*isMixinDeclaration*/  {
}
abstract class MX extends core::Object /*isMixinDeclaration*/  {
}
class A0 = self::S with self::M {
  synthetic constructor •() → self::A0
    : super self::S::•()
    ;
  mixin-super-stub method foo() → dynamic
    return super.{self::M::foo}();
}
abstract class _A1&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_A1&S&M1
    : super self::S::•()
    ;
}
class A1 = self::_A1&S&M1 with self::M {
  synthetic constructor •() → self::A1
    : super self::_A1&S&M1::•()
    ;
  mixin-super-stub method foo() → dynamic
    return super.{self::M::foo}();
}
abstract class _A2&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_A2&S&M1
    : super self::S::•()
    ;
}
abstract class _A2&S&M1&M2 = self::_A2&S&M1 with self::M2 /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_A2&S&M1&M2
    : super self::_A2&S&M1::•()
    ;
}
class A2 = self::_A2&S&M1&M2 with self::M {
  synthetic constructor •() → self::A2
    : super self::_A2&S&M1&M2::•()
    ;
  mixin-super-stub method foo() → dynamic
    return super.{self::M::foo}();
}
abstract class _A0X&S&M = self::S with self::M /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_A0X&S&M
    : super self::S::•()
    ;
  mixin-super-stub method foo() → dynamic
    return super.{self::M::foo}();
}
class A0X = self::_A0X&S&M with self::MX {
  synthetic constructor •() → self::A0X
    : super self::_A0X&S&M::•()
    ;
}
abstract class _A1X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_A1X&S&M1
    : super self::S::•()
    ;
}
abstract class _A1X&S&M1&M = self::_A1X&S&M1 with self::M /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_A1X&S&M1&M
    : super self::_A1X&S&M1::•()
    ;
  mixin-super-stub method foo() → dynamic
    return super.{self::M::foo}();
}
class A1X = self::_A1X&S&M1&M with self::MX {
  synthetic constructor •() → self::A1X
    : super self::_A1X&S&M1&M::•()
    ;
}
abstract class _A2X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_A2X&S&M1
    : super self::S::•()
    ;
}
abstract class _A2X&S&M1&M2 = self::_A2X&S&M1 with self::M2 /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_A2X&S&M1&M2
    : super self::_A2X&S&M1::•()
    ;
}
abstract class _A2X&S&M1&M2&M = self::_A2X&S&M1&M2 with self::M /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_A2X&S&M1&M2&M
    : super self::_A2X&S&M1&M2::•()
    ;
  mixin-super-stub method foo() → dynamic
    return super.{self::M::foo}();
}
class A2X = self::_A2X&S&M1&M2&M with self::MX {
  synthetic constructor •() → self::A2X
    : super self::_A2X&S&M1&M2&M::•()
    ;
}
abstract class _B0&S&M = self::S with self::M /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_B0&S&M
    : super self::S::•()
    ;
  mixin-super-stub method foo() → dynamic
    return super.{self::M::foo}();
}
class B0 extends self::_B0&S&M {
  synthetic constructor •() → self::B0
    : super self::_B0&S&M::•()
    ;
}
abstract class _B1&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_B1&S&M1
    : super self::S::•()
    ;
}
abstract class _B1&S&M1&M = self::_B1&S&M1 with self::M /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_B1&S&M1&M
    : super self::_B1&S&M1::•()
    ;
  mixin-super-stub method foo() → dynamic
    return super.{self::M::foo}();
}
class B1 extends self::_B1&S&M1&M {
  synthetic constructor •() → self::B1
    : super self::_B1&S&M1&M::•()
    ;
}
abstract class _B2&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_B2&S&M1
    : super self::S::•()
    ;
}
abstract class _B2&S&M1&M2 = self::_B2&S&M1 with self::M2 /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_B2&S&M1&M2
    : super self::_B2&S&M1::•()
    ;
}
abstract class _B2&S&M1&M2&M = self::_B2&S&M1&M2 with self::M /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_B2&S&M1&M2&M
    : super self::_B2&S&M1&M2::•()
    ;
  mixin-super-stub method foo() → dynamic
    return super.{self::M::foo}();
}
class B2 extends self::_B2&S&M1&M2&M {
  synthetic constructor •() → self::B2
    : super self::_B2&S&M1&M2&M::•()
    ;
}
abstract class _B0X&S&M = self::S with self::M /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_B0X&S&M
    : super self::S::•()
    ;
  mixin-super-stub method foo() → dynamic
    return super.{self::M::foo}();
}
abstract class _B0X&S&M&MX = self::_B0X&S&M with self::MX /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_B0X&S&M&MX
    : super self::_B0X&S&M::•()
    ;
}
class B0X extends self::_B0X&S&M&MX {
  synthetic constructor •() → self::B0X
    : super self::_B0X&S&M&MX::•()
    ;
}
abstract class _B1X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_B1X&S&M1
    : super self::S::•()
    ;
}
abstract class _B1X&S&M1&M = self::_B1X&S&M1 with self::M /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_B1X&S&M1&M
    : super self::_B1X&S&M1::•()
    ;
  mixin-super-stub method foo() → dynamic
    return super.{self::M::foo}();
}
abstract class _B1X&S&M1&M&MX = self::_B1X&S&M1&M with self::MX /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_B1X&S&M1&M&MX
    : super self::_B1X&S&M1&M::•()
    ;
}
class B1X extends self::_B1X&S&M1&M&MX {
  synthetic constructor •() → self::B1X
    : super self::_B1X&S&M1&M&MX::•()
    ;
}
abstract class _B2X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_B2X&S&M1
    : super self::S::•()
    ;
}
abstract class _B2X&S&M1&M2 = self::_B2X&S&M1 with self::M2 /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_B2X&S&M1&M2
    : super self::_B2X&S&M1::•()
    ;
}
abstract class _B2X&S&M1&M2&M = self::_B2X&S&M1&M2 with self::M /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_B2X&S&M1&M2&M
    : super self::_B2X&S&M1&M2::•()
    ;
  mixin-super-stub method foo() → dynamic
    return super.{self::M::foo}();
}
abstract class _B2X&S&M1&M2&M&MX = self::_B2X&S&M1&M2&M with self::MX /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_B2X&S&M1&M2&M&MX
    : super self::_B2X&S&M1&M2&M::•()
    ;
}
class B2X extends self::_B2X&S&M1&M2&M&MX {
  synthetic constructor •() → self::B2X
    : super self::_B2X&S&M1&M2&M&MX::•()
    ;
}
static method main() → dynamic {}

constants  {
  #C1 = null
}
