// Formatted problems:
//
// pkg/front_end/testcases/inference/infer_method_missing_params.dart:25:79: Error: Can't infer the type of 'y': overridden members must all have the same type.
// Specify the type explicitly.
//       /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y);
//                                                                               ^
//
// pkg/front_end/testcases/inference/infer_method_missing_params.dart:29:80: Error: Can't infer the type of 'y': overridden members must all have the same type.
// Specify the type explicitly.
//       {/*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y});
//                                                                                ^
//
// pkg/front_end/testcases/inference/infer_method_missing_params.dart:27:80: Error: Can't infer the type of 'y': overridden members must all have the same type.
// Specify the type explicitly.
//       [/*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y]);
//                                                                                ^
//
// pkg/front_end/testcases/inference/infer_method_missing_params.dart:23:61: Error: The method 'C::f' has more required arguments than those of overridden method 'B::f'.
//   /*@topType=int*/ /*@error=OverrideMoreRequiredArguments*/ f(
//                                                             ^
// pkg/front_end/testcases/inference/infer_method_missing_params.dart:17:7: Context: This is the overridden method ('f').
//   int f(int x);
//       ^

// Unhandled errors:
//
// pkg/front_end/testcases/inference/infer_method_missing_params.dart:25:79: Error: Can't infer the type of 'y': overridden members must all have the same type.
// Specify the type explicitly.
//       /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y);
//                                                                               ^
//
// pkg/front_end/testcases/inference/infer_method_missing_params.dart:29:80: Error: Can't infer the type of 'y': overridden members must all have the same type.
// Specify the type explicitly.
//       {/*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y});
//                                                                                ^
//
// pkg/front_end/testcases/inference/infer_method_missing_params.dart:27:80: Error: Can't infer the type of 'y': overridden members must all have the same type.
// Specify the type explicitly.
//       [/*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y]);
//                                                                                ^
//
// pkg/front_end/testcases/inference/infer_method_missing_params.dart:23:61: Error: The method 'C::f' has more required arguments than those of overridden method 'B::f'.
//   /*@topType=int*/ /*@error=OverrideMoreRequiredArguments*/ f(
//                                                             ^

library test;
import self as self;
import "dart:core" as core;

abstract class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  abstract method f(core::int x, core::int y) → core::int;
  abstract method g(core::int x, [core::int y = null]) → core::int;
  abstract method h(core::int x, {core::int y = null}) → core::int;
}
abstract class B extends core::Object {
  synthetic constructor •() → self::B
    : super core::Object::•()
    ;
  abstract method f(core::int x) → core::int;
  abstract method g(core::int x) → core::int;
  abstract method h(core::int x) → core::int;
}
abstract class C extends core::Object implements self::A, self::B {
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
  abstract method f(core::int x, dynamic y) → core::int;
  abstract method g(core::int x, [dynamic y = null]) → core::int;
  abstract method h(core::int x, {dynamic y = null}) → core::int;
}
static method main() → dynamic {}
