library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/issue42429.dart:13:3: 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:3: 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:3: 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:3: 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:3: 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:3: 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:3: 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:3: 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:3: 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:3: 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:3: 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:3: 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:3: 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:3: 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:3: 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:3: 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:3: 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:3: 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:3: 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:3: 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:3: 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:3: 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:3: 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> = (X) → dynamic;
typedef FReturn<X extends core::num> = () → X;
typedef FBoth<invariant X extends core::num> = (X) → X;
typedef FNowhere<unrelated X extends core::num> = () → dynamic;
class A<T extends 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 {}
