library test;
//
// Problems in library:
//
// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
//       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
//                                                                         ^
//
// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
//       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
//                                                                         ^
//
// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
//   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
//                                                                        ^
//
// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
//   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
//                                                                        ^
//
// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
//           . /*@target=C.m*/ m);
//                             ^
//
// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
//           . /*@target=C.m*/ m);
//                             ^
//
import self as self;
import "dart:core" as core;

import "dart:math" as math;
import "dart:math" show min;

class C extends core::Object {
  synthetic constructor •() → self::C*
    : super core::Object::•()
    ;
  method m<T extends core::num*>(self::C::m::T* x, self::C::m::T* y) → self::C::m::T*
    return null;
  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
  abstract member-signature method toString() → core::String*; -> core::Object::toString
  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static method test() → dynamic {
  self::takeIII(#C1<core::int*>);
  self::takeDDD(#C1<core::double*>);
  self::takeNNN(#C1<core::num*>);
  self::takeIDN(#C1<core::num*>);
  self::takeDIN(#C1<core::num*>);
  self::takeIIN(#C1<core::int*>);
  self::takeDDN(#C1<core::double*>);
  self::takeIIO(#C1<core::int*>);
  self::takeDDO(#C1<core::double*>);
  self::takeOOI((#C1<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
  self::takeIDI(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
                                                                        ^" in (#C1<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
  self::takeDID(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
                                                                        ^" in (#C1<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
  self::takeOON((#C1<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
  self::takeOOO((#C1<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
  self::takeIII(#C2<core::int*>);
  self::takeDDD(#C2<core::double*>);
  self::takeNNN(#C2<core::num*>);
  self::takeIDN(#C2<core::num*>);
  self::takeDIN(#C2<core::num*>);
  self::takeIIN(#C2<core::int*>);
  self::takeDDN(#C2<core::double*>);
  self::takeIIO(#C2<core::int*>);
  self::takeDDO(#C2<core::double*>);
  self::takeOOI((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
  self::takeIDI(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
  takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
                                                                       ^" in (#C2<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
  self::takeDID(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
  takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
                                                                       ^" in (#C2<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
  self::takeOON((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
  self::takeOOO((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
  self::takeIII(new self::C::•().{self::C::m}<core::int*>);
  self::takeDDD(new self::C::•().{self::C::m}<core::double*>);
  self::takeNNN(new self::C::•().{self::C::m}<core::num*>);
  self::takeIDN(new self::C::•().{self::C::m}<core::num*>);
  self::takeDIN(new self::C::•().{self::C::m}<core::num*>);
  self::takeIIN(new self::C::•().{self::C::m}<core::int*>);
  self::takeDDN(new self::C::•().{self::C::m}<core::double*>);
  self::takeIIO(new self::C::•().{self::C::m}<core::int*>);
  self::takeDDO(new self::C::•().{self::C::m}<core::double*>);
  self::takeOON((new self::C::•().{self::C::m}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
  self::takeOOO((new self::C::•().{self::C::m}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
  self::takeOOI((new self::C::•().{self::C::m}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
  self::takeIDI(let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
          . /*@target=C.m*/ m);
                            ^" in (new self::C::•().{self::C::m}<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
  self::takeDID(let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
          . /*@target=C.m*/ m);
                            ^" in (new self::C::•().{self::C::m}<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
}
static method takeIII((core::int*, core::int*) →* core::int* fn) → void {}
static method takeDDD((core::double*, core::double*) →* core::double* fn) → void {}
static method takeIDI((core::double*, core::int*) →* core::int* fn) → void {}
static method takeDID((core::int*, core::double*) →* core::double* fn) → void {}
static method takeIDN((core::double*, core::int*) →* core::num* fn) → void {}
static method takeDIN((core::int*, core::double*) →* core::num* fn) → void {}
static method takeIIN((core::int*, core::int*) →* core::num* fn) → void {}
static method takeDDN((core::double*, core::double*) →* core::num* fn) → void {}
static method takeNNN((core::num*, core::num*) →* core::num* fn) → void {}
static method takeOON((core::Object*, core::Object*) →* core::num* fn) → void {}
static method takeOOO((core::Object*, core::Object*) →* core::num* fn) → void {}
static method takeOOI((core::Object*, core::Object*) →* core::int* fn) → void {}
static method takeIIO((core::int*, core::int*) →* core::Object* fn) → void {}
static method takeDDO((core::double*, core::double*) →* core::Object* fn) → void {}
static method main() → dynamic {}

constants  {
  #C1 = tearoff math::max
  #C2 = tearoff math::min
}
