// Formatted problems:
//
// pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'test::C::g1::U'.
// Try changing the type of the parameter, or casting the argument to 'test::C::g1::U'.
//     this.f<U>(1.5);
//               ^
//
// pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:20:16: Error: Type argument 'dart.core::num' violates the corresponding type variable bound of 'C<dart.core::int>::g1'.
// Try changing type arguments so that they conform to the bounds.
//   new C<int>().g1<num>();
//                ^

// Unhandled errors:
//
// pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:20:16: Error: Type argument 'dart.core::num' violates the corresponding type variable bound of 'C<dart.core::int>::g1'.
// Try changing type arguments so that they conform to the bounds.
//   new C<int>().g1<num>();
//                ^

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

class C<T extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → self::C<self::C::T>
    : super core::Object::•()
    ;
  method f<generic-covariant-impl U extends self::C::T = self::C::T>(self::C::f::U x) → void {}
  method g1<generic-covariant-impl U extends self::C::T = self::C::T>() → void {
    this.{self::C::f}<self::C::g1::U>(let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'test::C::g1::U'.
Try changing the type of the parameter, or casting the argument to 'test::C::g1::U'.
    this.f<U>(1.5);
              ^" in let final dynamic #t2 = 1.5 in null);
  }
}
static method g2(self::C<core::Object> c) → void {
  c.{self::C::f}<core::num>(1.5);
}
static method test() → void {
  new self::C::•<core::int>().{self::C::g1}<core::num>();
  self::g2(new self::C::•<core::int>());
}
static method main() → void {}
