library test;
//
// Problems in library:
//
// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:14:64: Error: Declared type variables of 'D.m' doesn't match those on overridden method 'C.m'.
// /*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(
//                                                                ^
// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:9:5: Context: This is the overridden method ('m').
//   T m<T>(T x) => x;
//     ^
//
// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:14:64: Error: The return type of the method 'D.m' is 'dynamic', which does not match the return type, 'T', of the overridden method, 'C.m'.
// Change to a subtype of 'T'.
// /*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(
//                                                                ^
// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:9:5: Context: This is the overridden method ('m').
//   T m<T>(T x) => x;
//     ^
//
// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:21:106: Error: Expected 0 type arguments.
//       . /*error:WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD*/ /*@target=D::m*/ /*@error=TypeArgumentMismatch*/ m<
//                                                                                                          ^
//
import self as self;
import "dart:core" as core;

class C extends core::Object {
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
  method m<T extends core::Object = dynamic>(self::C::m::T x) → self::C::m::T
    return x;
}
class D extends self::C {
  synthetic constructor •() → self::D
    : super self::C::•()
    ;
  method m(dynamic x) → dynamic
    return x;
}
static method main() → dynamic {
  core::int y = new self::D::•().{self::D::m}<core::int>(42) as{TypeError} core::int;
  core::print(y);
}
