library test;
//
// Problems in library:
//
// pkg/front_end/testcases/inference/infer_method_missing_params.dart:23:3: Error: The method 'C.f' has more required arguments than those of overridden method 'B.f'.
//   f(x, y);
//   ^
// pkg/front_end/testcases/inference/infer_method_missing_params.dart:17:7: Context: This is the overridden method ('f').
//   int f(int x);
//       ^
//
import self as self;
import "dart:core" as core;

abstract class A extends core::Object {
  synthetic constructor •() → self::A*
    ;
  abstract method f(core::int* x, core::int* y) → core::int*;
  abstract method g(core::int* x, [core::int* y]) → core::int*;
  abstract method h(core::int* x, {core::int* y}) → core::int*;
}
abstract class B extends core::Object {
  synthetic constructor •() → self::B*
    ;
  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*
    ;
  abstract method f(core::int* x, core::int* y) → core::int*;
  abstract method g(core::int* x, [core::int* y]) → core::int*;
  abstract method h(core::int* x, {core::int* y}) → core::int*;
}
static method main() → dynamic
  ;
