library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/bounds_return_types.dart:19:1: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_return_types.dart'.
// Try changing type arguments so that they conform to the bounds.
// F<Object> t7() => throw ''; // Error
// ^
// pkg/front_end/testcases/general/bounds_return_types.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = X;
//           ^
//
// pkg/front_end/testcases/general/bounds_return_types.dart:20:1: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_return_types.dart'.
// Try changing type arguments so that they conform to the bounds.
// F<int> t8() => throw ''; // Error
// ^
// pkg/front_end/testcases/general/bounds_return_types.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = X;
//           ^
//
// pkg/front_end/testcases/general/bounds_return_types.dart:27:1: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_return_types.dart'.
// Try changing type arguments so that they conform to the bounds.
// G<Object> s7() => throw ''; // Error
// ^
// pkg/front_end/testcases/general/bounds_return_types.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_return_types.dart:28:1: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_return_types.dart'.
// Try changing type arguments so that they conform to the bounds.
// G<int> s8() => throw ''; // Error
// ^
// pkg/front_end/testcases/general/bounds_return_types.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_return_types.dart:56:3: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_return_types.dart'.
// Try changing type arguments so that they conform to the bounds.
//   F<Object> t7() => throw ''; // Error
//   ^
// pkg/front_end/testcases/general/bounds_return_types.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = X;
//           ^
//
// pkg/front_end/testcases/general/bounds_return_types.dart:57:3: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_return_types.dart'.
// Try changing type arguments so that they conform to the bounds.
//   F<int> t8() => throw ''; // Error
//   ^
// pkg/front_end/testcases/general/bounds_return_types.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = X;
//           ^
//
// pkg/front_end/testcases/general/bounds_return_types.dart:64:3: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_return_types.dart'.
// Try changing type arguments so that they conform to the bounds.
//   G<Object> s7() => throw ''; // Error
//   ^
// pkg/front_end/testcases/general/bounds_return_types.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_return_types.dart:65:3: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_return_types.dart'.
// Try changing type arguments so that they conform to the bounds.
//   G<int> s8() => throw ''; // Error
//   ^
// pkg/front_end/testcases/general/bounds_return_types.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_return_types.dart:75:3: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_return_types.dart'.
// Try changing type arguments so that they conform to the bounds.
//   F<Object> t7() => throw ''; // Error
//   ^
// pkg/front_end/testcases/general/bounds_return_types.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = X;
//           ^
//
// pkg/front_end/testcases/general/bounds_return_types.dart:76:3: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_return_types.dart'.
// Try changing type arguments so that they conform to the bounds.
//   F<int> t8() => throw ''; // Error
//   ^
// pkg/front_end/testcases/general/bounds_return_types.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = X;
//           ^
//
// pkg/front_end/testcases/general/bounds_return_types.dart:83:3: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_return_types.dart'.
// Try changing type arguments so that they conform to the bounds.
//   G<Object> s7() => throw ''; // Error
//   ^
// pkg/front_end/testcases/general/bounds_return_types.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_return_types.dart:84:3: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_return_types.dart'.
// Try changing type arguments so that they conform to the bounds.
//   G<int> s8() => throw ''; // Error
//   ^
// pkg/front_end/testcases/general/bounds_return_types.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
import self as self;
import "dart:core" as core;

typedef F<X extends self::Class<X> = self::Class<dynamic>> = X;
class Class<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::Class<self::Class::T%>
    ;
}
class ConcreteClass extends core::Object implements self::Class<self::ConcreteClass> {
  synthetic constructor •() → self::ConcreteClass
    ;
}
class G<X extends self::Class<self::G::X> = self::Class<dynamic>> extends core::Object {
  synthetic constructor •() → self::G<self::G::X>
    ;
}
class Class1 extends core::Object {
  synthetic constructor •() → self::Class1
    ;
  method t1() → self::Class<dynamic>
    ;
  method t2() → dynamic
    ;
  method t3() → self::Class<dynamic>
    ;
  method t4() → self::Class<dynamic>
    ;
  method t5() → self::ConcreteClass
    ;
  method t6() → self::Class<self::ConcreteClass>
    ;
  method t7() → core::Object
    ;
  method t8() → core::int
    ;
  method s1() → self::G<self::Class<dynamic>>
    ;
  method s2() → self::G<dynamic>
    ;
  method s3() → self::G<self::Class<dynamic>>
    ;
  method s4() → self::G<self::Class<dynamic>>
    ;
  method s5() → self::G<self::ConcreteClass>
    ;
  method s6() → self::G<self::Class<self::ConcreteClass>>
    ;
  method s7() → self::G<core::Object>
    ;
  method s8() → self::G<core::int>
    ;
}
extension Extension1 on core::int {
  method t1 = self::Extension1|t1;
  tearoff t1 = self::Extension1|get#t1;
  method t2 = self::Extension1|t2;
  tearoff t2 = self::Extension1|get#t2;
  method t3 = self::Extension1|t3;
  tearoff t3 = self::Extension1|get#t3;
  method t4 = self::Extension1|t4;
  tearoff t4 = self::Extension1|get#t4;
  method t5 = self::Extension1|t5;
  tearoff t5 = self::Extension1|get#t5;
  method t6 = self::Extension1|t6;
  tearoff t6 = self::Extension1|get#t6;
  method t7 = self::Extension1|t7;
  tearoff t7 = self::Extension1|get#t7;
  method t8 = self::Extension1|t8;
  tearoff t8 = self::Extension1|get#t8;
  method s1 = self::Extension1|s1;
  tearoff s1 = self::Extension1|get#s1;
  method s2 = self::Extension1|s2;
  tearoff s2 = self::Extension1|get#s2;
  method s3 = self::Extension1|s3;
  tearoff s3 = self::Extension1|get#s3;
  method s4 = self::Extension1|s4;
  tearoff s4 = self::Extension1|get#s4;
  method s5 = self::Extension1|s5;
  tearoff s5 = self::Extension1|get#s5;
  method s6 = self::Extension1|s6;
  tearoff s6 = self::Extension1|get#s6;
  method s7 = self::Extension1|s7;
  tearoff s7 = self::Extension1|get#s7;
  method s8 = self::Extension1|s8;
  tearoff s8 = self::Extension1|get#s8;
}
static method t1() → self::Class<dynamic>
  ;
static method t2() → dynamic
  ;
static method t3() → self::Class<dynamic>
  ;
static method t4() → self::Class<dynamic>
  ;
static method t5() → self::ConcreteClass
  ;
static method t6() → self::Class<self::ConcreteClass>
  ;
static method t7() → core::Object
  ;
static method t8() → core::int
  ;
static method s1() → self::G<self::Class<dynamic>>
  ;
static method s2() → self::G<dynamic>
  ;
static method s3() → self::G<self::Class<dynamic>>
  ;
static method s4() → self::G<self::Class<dynamic>>
  ;
static method s5() → self::G<self::ConcreteClass>
  ;
static method s6() → self::G<self::Class<self::ConcreteClass>>
  ;
static method s7() → self::G<core::Object>
  ;
static method s8() → self::G<core::int>
  ;
static method method1() → dynamic
  ;
static method Extension1|t1(lowered final core::int #this) → self::Class<dynamic>
  ;
static method Extension1|get#t1(lowered final core::int #this) → () → self::Class<dynamic>
  return () → self::Class<dynamic> => self::Extension1|t1(#this);
static method Extension1|t2(lowered final core::int #this) → dynamic
  ;
static method Extension1|get#t2(lowered final core::int #this) → () → dynamic
  return () → dynamic => self::Extension1|t2(#this);
static method Extension1|t3(lowered final core::int #this) → self::Class<dynamic>
  ;
static method Extension1|get#t3(lowered final core::int #this) → () → self::Class<dynamic>
  return () → self::Class<dynamic> => self::Extension1|t3(#this);
static method Extension1|t4(lowered final core::int #this) → self::Class<dynamic>
  ;
static method Extension1|get#t4(lowered final core::int #this) → () → self::Class<dynamic>
  return () → self::Class<dynamic> => self::Extension1|t4(#this);
static method Extension1|t5(lowered final core::int #this) → self::ConcreteClass
  ;
static method Extension1|get#t5(lowered final core::int #this) → () → self::ConcreteClass
  return () → self::ConcreteClass => self::Extension1|t5(#this);
static method Extension1|t6(lowered final core::int #this) → self::Class<self::ConcreteClass>
  ;
static method Extension1|get#t6(lowered final core::int #this) → () → self::Class<self::ConcreteClass>
  return () → self::Class<self::ConcreteClass> => self::Extension1|t6(#this);
static method Extension1|t7(lowered final core::int #this) → core::Object
  ;
static method Extension1|get#t7(lowered final core::int #this) → () → core::Object
  return () → core::Object => self::Extension1|t7(#this);
static method Extension1|t8(lowered final core::int #this) → core::int
  ;
static method Extension1|get#t8(lowered final core::int #this) → () → core::int
  return () → core::int => self::Extension1|t8(#this);
static method Extension1|s1(lowered final core::int #this) → self::G<self::Class<dynamic>>
  ;
static method Extension1|get#s1(lowered final core::int #this) → () → self::G<self::Class<dynamic>>
  return () → self::G<self::Class<dynamic>> => self::Extension1|s1(#this);
static method Extension1|s2(lowered final core::int #this) → self::G<dynamic>
  ;
static method Extension1|get#s2(lowered final core::int #this) → () → self::G<dynamic>
  return () → self::G<dynamic> => self::Extension1|s2(#this);
static method Extension1|s3(lowered final core::int #this) → self::G<self::Class<dynamic>>
  ;
static method Extension1|get#s3(lowered final core::int #this) → () → self::G<self::Class<dynamic>>
  return () → self::G<self::Class<dynamic>> => self::Extension1|s3(#this);
static method Extension1|s4(lowered final core::int #this) → self::G<self::Class<dynamic>>
  ;
static method Extension1|get#s4(lowered final core::int #this) → () → self::G<self::Class<dynamic>>
  return () → self::G<self::Class<dynamic>> => self::Extension1|s4(#this);
static method Extension1|s5(lowered final core::int #this) → self::G<self::ConcreteClass>
  ;
static method Extension1|get#s5(lowered final core::int #this) → () → self::G<self::ConcreteClass>
  return () → self::G<self::ConcreteClass> => self::Extension1|s5(#this);
static method Extension1|s6(lowered final core::int #this) → self::G<self::Class<self::ConcreteClass>>
  ;
static method Extension1|get#s6(lowered final core::int #this) → () → self::G<self::Class<self::ConcreteClass>>
  return () → self::G<self::Class<self::ConcreteClass>> => self::Extension1|s6(#this);
static method Extension1|s7(lowered final core::int #this) → self::G<core::Object>
  ;
static method Extension1|get#s7(lowered final core::int #this) → () → self::G<core::Object>
  return () → self::G<core::Object> => self::Extension1|s7(#this);
static method Extension1|s8(lowered final core::int #this) → self::G<core::int>
  ;
static method Extension1|get#s8(lowered final core::int #this) → () → self::G<core::int>
  return () → self::G<core::int> => self::Extension1|s8(#this);
static method main() → dynamic
  ;
