// Unhandled errors:
//
// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:21:63: Error: Inferred type argument 'dynamic' violates the corresponding type variable bound of 'max'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   dynamic c = /*error:COULD_NOT_INFER*/ /*@typeArgs=dynamic*/ max(x, y);
//                                                               ^
//
// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:22:77: Error: Inferred type argument 'dynamic' violates the corresponding type variable bound of 'max'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   var /*@type=dynamic*/ d = /*error:COULD_NOT_INFER*/ /*@typeArgs=dynamic*/ max(
//                                                                             ^

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

static method f() → dynamic {
  core::num x;
  dynamic y;
  core::num a = math::max<core::num>(x, y as{TypeError} core::num);
  core::Object b = math::max<core::num>(x, y as{TypeError} core::num);
  dynamic c = math::max<dynamic>(x, y);
  dynamic d = math::max<dynamic>(x, y);
}
static method main() → dynamic {}
