library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/issue42429.dart:13:13: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
//  - 'Object' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
//   A<Object> aObject; // Error.
//             ^
// pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
// class A<T extends num> {}
//         ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:14:11: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
// Try changing type arguments so that they conform to the bounds.
//   A<num?> aNumNullable; // Error.
//           ^
// pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
// class A<T extends num> {}
//         ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:15:11: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
// Try changing type arguments so that they conform to the bounds.
//   A<int?> aIntNullable; // Error.
//           ^
// pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
// class A<T extends num> {}
//         ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:16:11: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
// Try changing type arguments so that they conform to the bounds.
//   A<Null> aNull; // Error.
//           ^
// pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
// class A<T extends num> {}
//         ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:17:21: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
//  - 'Object' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
//   FArgument<Object> fArgumentObject; // Error.
//                     ^
// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
// typedef FArgument<X extends num> = Function(X);
//                   ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:18:19: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
// Try changing type arguments so that they conform to the bounds.
//   FArgument<num?> fArgumentNumNullable; // Error.
//                   ^
// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
// typedef FArgument<X extends num> = Function(X);
//                   ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:19:19: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
// Try changing type arguments so that they conform to the bounds.
//   FArgument<int?> fArgumentIntNullable; // Error.
//                   ^
// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
// typedef FArgument<X extends num> = Function(X);
//                   ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:20:19: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
// Try changing type arguments so that they conform to the bounds.
//   FArgument<Null> fArgumentNull; // Error.
//                   ^
// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
// typedef FArgument<X extends num> = Function(X);
//                   ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:21:19: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
//  - 'Object' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
//   FReturn<Object> fReturnObject; // Error.
//                   ^
// pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
// typedef FReturn<X extends num> = X Function();
//                 ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:22:17: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
// Try changing type arguments so that they conform to the bounds.
//   FReturn<num?> fReturnNumNullable; // Error.
//                 ^
// pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
// typedef FReturn<X extends num> = X Function();
//                 ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:23:17: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
// Try changing type arguments so that they conform to the bounds.
//   FReturn<int?> fReturnIntNullable; // Error.
//                 ^
// pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
// typedef FReturn<X extends num> = X Function();
//                 ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:24:17: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
// Try changing type arguments so that they conform to the bounds.
//   FReturn<Null> fReturnNull; // Error.
//                 ^
// pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
// typedef FReturn<X extends num> = X Function();
//                 ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:25:17: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
//  - 'Object' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
//   FBoth<Object> fBothObject; // Error.
//                 ^
// pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
// typedef FBoth<X extends num> = X Function(X);
//               ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:26:15: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
// Try changing type arguments so that they conform to the bounds.
//   FBoth<num?> fBothNumNullable; // Error.
//               ^
// pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
// typedef FBoth<X extends num> = X Function(X);
//               ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:27:15: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
// Try changing type arguments so that they conform to the bounds.
//   FBoth<int?> fBothIntNullable; // Error.
//               ^
// pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
// typedef FBoth<X extends num> = X Function(X);
//               ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:28:15: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
// Try changing type arguments so that they conform to the bounds.
//   FBoth<Null> fBothNull; // Error.
//               ^
// pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
// typedef FBoth<X extends num> = X Function(X);
//               ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:29:20: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
//  - 'Object' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
//   FNowhere<Object> fNowhereObject; // Error.
//                    ^
// pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
// typedef FNowhere<X extends num> = Function();
//                  ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:30:18: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
// Try changing type arguments so that they conform to the bounds.
//   FNowhere<num?> fNowhereNumNullable; // Error.
//                  ^
// pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
// typedef FNowhere<X extends num> = Function();
//                  ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:31:18: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
// Try changing type arguments so that they conform to the bounds.
//   FNowhere<int?> fNowhereIntNullable; // Error.
//                  ^
// pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
// typedef FNowhere<X extends num> = Function();
//                  ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:32:18: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
// Try changing type arguments so that they conform to the bounds.
//   FNowhere<Null> fNowhereNull; // Error.
//                  ^
// pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
// typedef FNowhere<X extends num> = Function();
//                  ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:33:22: Error: Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
//  - 'Object' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
//   FArgument<Object?> fArgumentObjectNullable; // Error.
//                      ^
// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
// typedef FArgument<X extends num> = Function(X);
//                   ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:34:22: Error: Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
// Try changing type arguments so that they conform to the bounds.
//   FArgument<dynamic> fArgumentDynamic; // Error.
//                      ^
// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
// typedef FArgument<X extends num> = Function(X);
//                   ^
//
// pkg/front_end/testcases/nnbd/issue42429.dart:35:19: Error: Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
// Try changing type arguments so that they conform to the bounds.
//   FArgument<void> fArgumentVoid; // Error.
//                   ^
// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
// typedef FArgument<X extends num> = Function(X);
//                   ^
//
import self as self;
import "dart:core" as core;

typedef FArgument<contravariant X extends core::num = core::num> = (X) → dynamic;
typedef FReturn<X extends core::num = core::num> = () → X;
typedef FBoth<invariant X extends core::num = core::num> = (X) → X;
typedef FNowhere<unrelated X extends core::num = core::num> = () → dynamic;
class A<T extends core::num = core::num> extends core::Object {
  synthetic constructor •() → self::A<self::A::T>
    : super core::Object::•()
    ;
}
static method foo() → dynamic {
  self::A<core::Object> aObject;
  self::A<core::num?> aNumNullable;
  self::A<core::int?> aIntNullable;
  self::A<Null> aNull;
  (core::Object) → dynamic fArgumentObject;
  (core::num?) → dynamic fArgumentNumNullable;
  (core::int?) → dynamic fArgumentIntNullable;
  (Null) → dynamic fArgumentNull;
  () → core::Object fReturnObject;
  () → core::num? fReturnNumNullable;
  () → core::int? fReturnIntNullable;
  () → Null fReturnNull;
  (core::Object) → core::Object fBothObject;
  (core::num?) → core::num? fBothNumNullable;
  (core::int?) → core::int? fBothIntNullable;
  (Null) → Null fBothNull;
  () → dynamic fNowhereObject;
  () → dynamic fNowhereNumNullable;
  () → dynamic fNowhereIntNullable;
  () → dynamic fNowhereNull;
  (core::Object?) → dynamic fArgumentObjectNullable;
  (dynamic) → dynamic fArgumentDynamic;
  (void) → dynamic fArgumentVoid;
  self::A<core::Object?> aObjectNullable;
  self::A<dynamic> aDynamic;
  self::A<void> aVoid;
  self::A<core::num> aNum;
  self::A<core::int> aInt;
  self::A<Never> aNever;
  (core::num) → dynamic fArgumentNum;
  (core::int) → dynamic fArgumentInt;
  (Never) → dynamic fArgumentNever;
  () → core::Object? fReturnObjectNullable;
  () → dynamic fReturnDynamic;
  () → void fReturnVoid;
  () → core::num fReturnNum;
  () → core::int fReturnInt;
  () → Never fReturnNever;
  (core::Object?) → core::Object? fBothObjectNullable;
  (dynamic) → dynamic fBothDynamic;
  (void) → void fBothVoid;
  (core::num) → core::num fBothNum;
  (core::int) → core::int fBothInt;
  (Never) → Never fBothNever;
  () → dynamic fNowhereObjectNullable;
  () → dynamic fNowhereDynamic;
  () → dynamic fNowhereVoid;
  () → dynamic fNowhereNum;
  () → dynamic fNowhereInt;
  () → dynamic fNowhereNever;
}
static method main() → dynamic {}
