// Errors:
//
// pkg/front_end/testcases/override_check_basic.dart:29:52: Error: The return type of the method 'E::f4' is dart.core::Object, which does not match the return type of the overridden method (#lib1::A).
// Change to a subtype of #lib1::A.
//   Object /*@error=OverrideTypeMismatchReturnType*/ f4() {}
//                                                    ^
//
// pkg/front_end/testcases/override_check_basic.dart:28:55: Error: The parameter 'x' of the method 'E::f3' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
// Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
//   void f3({B /*@error=OverrideTypeMismatchParameter*/ x}) {}
//                                                       ^
//
// pkg/front_end/testcases/override_check_basic.dart:26:54: Error: The parameter 'x' of the method 'E::f1' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
// Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
//   void f1(B /*@error=OverrideTypeMismatchParameter*/ x) {}
//                                                      ^
//
// pkg/front_end/testcases/override_check_basic.dart:27:55: Error: The parameter 'x' of the method 'E::f2' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
// Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
//   void f2([B /*@error=OverrideTypeMismatchParameter*/ x]) {}
//                                                       ^

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

class A extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class B extends self::A {
  synthetic constructor •() → void
    : super self::A::•()
    ;
}
class C extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method f1(self::A x) → void {}
  method f2([self::A x = null]) → void {}
  method f3({self::A x = null}) → void {}
  method f4() → self::A {}
}
class D extends self::C {
  synthetic constructor •() → void
    : super self::C::•()
    ;
  method f1(core::Object x) → void {}
  method f2([core::Object x = null]) → void {}
  method f3({core::Object x = null}) → void {}
  method f4() → self::B {}
}
class E extends self::C {
  synthetic constructor •() → void
    : super self::C::•()
    ;
  method f1(self::B x) → void {}
  method f2([self::B x = null]) → void {}
  method f3({self::B x = null}) → void {}
  method f4() → core::Object {}
}
static method main() → dynamic {}
