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>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_return_types.dart:37: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:38: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:45: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:46: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%>
    : super core::Object::•()
    ;
}
class ConcreteClass extends core::Object implements self::Class<self::ConcreteClass> {
  synthetic constructor •() → self::ConcreteClass
    : super core::Object::•()
    ;
}
class G<X extends self::Class<self::G::X> = self::Class<dynamic>> extends core::Object {
  synthetic constructor •() → self::G<self::G::X>
    : super core::Object::•()
    ;
}
class Class1 extends core::Object {
  synthetic constructor •() → self::Class1
    : super core::Object::•()
    ;
  method t1() → self::Class<dynamic>
    return throw "";
  method t2() → dynamic
    return throw "";
  method t3() → self::Class<dynamic>
    return throw "";
  method t4() → self::Class<dynamic>
    return throw "";
  method t5() → self::ConcreteClass
    return throw "";
  method t6() → self::Class<self::ConcreteClass>
    return throw "";
  method t7() → core::Object
    return throw "";
  method t8() → core::int
    return throw "";
  method s1() → self::G<self::Class<dynamic>>
    return throw "";
  method s2() → self::G<dynamic>
    return throw "";
  method s3() → self::G<self::Class<dynamic>>
    return throw "";
  method s4() → self::G<self::Class<dynamic>>
    return throw "";
  method s5() → self::G<self::ConcreteClass>
    return throw "";
  method s6() → self::G<self::Class<self::ConcreteClass>>
    return throw "";
  method s7() → self::G<core::Object>
    return throw "";
  method s8() → self::G<core::int>
    return throw "";
}
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>
  return throw "";
static method t2() → dynamic
  return throw "";
static method t3() → self::Class<dynamic>
  return throw "";
static method t4() → self::Class<dynamic>
  return throw "";
static method t5() → self::ConcreteClass
  return throw "";
static method t6() → self::Class<self::ConcreteClass>
  return throw "";
static method t7() → core::Object
  return throw "";
static method t8() → core::int
  return throw "";
static method s1() → self::G<self::Class<dynamic>>
  return throw "";
static method s2() → self::G<dynamic>
  return throw "";
static method s3() → self::G<self::Class<dynamic>>
  return throw "";
static method s4() → self::G<self::Class<dynamic>>
  return throw "";
static method s5() → self::G<self::ConcreteClass>
  return throw "";
static method s6() → self::G<self::Class<self::ConcreteClass>>
  return throw "";
static method s7() → self::G<core::Object>
  return throw "";
static method s8() → self::G<core::int>
  return throw "";
static method method1() → dynamic {
  function t1() → self::Class<dynamic>
    return throw "";
  function t2() → dynamic
    return throw "";
  function t3() → self::Class<dynamic>
    return throw "";
  function t4() → self::Class<dynamic>
    return throw "";
  function t5() → self::ConcreteClass
    return throw "";
  function t6() → self::Class<self::ConcreteClass>
    return throw "";
  function t7() → core::Object
    return throw "";
  function t8() → core::int
    return throw "";
  function s1() → self::G<self::Class<dynamic>>
    return throw "";
  function s2() → self::G<dynamic>
    return throw "";
  function s3() → self::G<self::Class<dynamic>>
    return throw "";
  function s4() → self::G<self::Class<dynamic>>
    return throw "";
  function s5() → self::G<self::ConcreteClass>
    return throw "";
  function s6() → self::G<self::Class<self::ConcreteClass>>
    return throw "";
  function s7() → self::G<core::Object>
    return throw "";
  function s8() → self::G<core::int>
    return throw "";
}
static method Extension1|t1(lowered final core::int #this) → self::Class<dynamic>
  return throw "";
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
  return throw "";
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>
  return throw "";
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>
  return throw "";
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
  return throw "";
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>
  return throw "";
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
  return throw "";
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
  return throw "";
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>>
  return throw "";
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>
  return throw "";
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>>
  return throw "";
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>>
  return throw "";
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>
  return throw "";
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>>
  return throw "";
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>
  return throw "";
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>
  return throw "";
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 {}
