library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/bounds_parameters.dart:20: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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//   F<Object> t7, // Error
//   ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:21: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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//   F<int> t8, // Error
//   ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:29:12: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//   required G<Object> s7, // Error
//            ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:30:12: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//   required G<int> s8, // Error
//            ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:99:5: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     F<Object> t7, // Error
//     ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:100:5: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     F<int> t8, // Error
//     ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:108:14: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     required G<Object> s7, // Error
//              ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:109:14: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     required G<int> s8, // Error
//              ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:80:5: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     F<Object> t7, // Error
//     ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:81:5: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     F<int> t8, // Error
//     ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:89:14: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     required G<Object> s7, // Error
//              ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:90:14: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     required G<int> s8, // Error
//              ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:121:5: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     F<Object> t7, // Error
//     ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:122:5: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     F<int> t8, // Error
//     ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:130:14: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     required G<Object> s7, // Error
//              ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:131:14: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     required G<int> s8, // Error
//              ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:39:5: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     F<Object> t7, // Error
//     ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:40:5: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     F<int> t8, // Error
//     ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:48:14: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     required G<Object> s7, // Error
//              ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:49:14: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     required G<int> s8, // Error
//              ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:58:5: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     F<Object> t7, // Error
//     ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:59:5: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     F<int> t8, // Error
//     ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:67:14: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     required G<Object> s7, // Error
//              ^
// pkg/front_end/testcases/general/bounds_parameters.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_parameters.dart:68:14: 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_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
//     required G<int> s8, // Error
//              ^
// pkg/front_end/testcases/general/bounds_parameters.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 {
  constructor •(self::Class<dynamic> t1, dynamic t2, self::Class<dynamic> t3, self::Class<dynamic> t4, self::ConcreteClass t5, self::Class<self::ConcreteClass> t6, core::Object t7, core::int t8, {required self::G<self::Class<dynamic>> s1 = #C1, required self::G<dynamic> s2 = #C1, required self::G<self::Class<dynamic>> s3 = #C1, required self::G<self::Class<dynamic>> s4 = #C1, required self::G<self::ConcreteClass> s5 = #C1, required self::G<self::Class<self::ConcreteClass>> s6 = #C1, required self::G<core::Object> s7 = #C1, required self::G<core::int> s8 = #C1}) → self::Class1
    : super core::Object::•()
    ;
  method method2(self::Class<dynamic> t1, dynamic t2, self::Class<dynamic> t3, self::Class<dynamic> t4, self::ConcreteClass t5, self::Class<self::ConcreteClass> t6, core::Object t7, core::int t8, {required self::G<self::Class<dynamic>> s1 = #C1, required self::G<dynamic> s2 = #C1, required self::G<self::Class<dynamic>> s3 = #C1, required self::G<self::Class<dynamic>> s4 = #C1, required self::G<self::ConcreteClass> s5 = #C1, required self::G<self::Class<self::ConcreteClass>> s6 = #C1, required self::G<core::Object> s7 = #C1, required self::G<core::int> s8 = #C1}) → void {}
}
extension Extension1 on core::int {
  method method3 = self::Extension1|method3;
  tearoff method3 = self::Extension1|get#method3;
}
static method method1(self::Class<dynamic> t1, dynamic t2, self::Class<dynamic> t3, self::Class<dynamic> t4, self::ConcreteClass t5, self::Class<self::ConcreteClass> t6, core::Object t7, core::int t8, {required self::G<self::Class<dynamic>> s1 = #C1, required self::G<dynamic> s2 = #C1, required self::G<self::Class<dynamic>> s3 = #C1, required self::G<self::Class<dynamic>> s4 = #C1, required self::G<self::ConcreteClass> s5 = #C1, required self::G<self::Class<self::ConcreteClass>> s6 = #C1, required self::G<core::Object> s7 = #C1, required self::G<core::int> s8 = #C1}) → void {
  function local(self::Class<dynamic> t1, dynamic t2, self::Class<dynamic> t3, self::Class<dynamic> t4, self::ConcreteClass t5, self::Class<self::ConcreteClass> t6, core::Object t7, core::int t8, {required self::G<self::Class<dynamic>> s1 = #C1, required self::G<dynamic> s2 = #C1, required self::G<self::Class<dynamic>> s3 = #C1, required self::G<self::Class<dynamic>> s4 = #C1, required self::G<self::ConcreteClass> s5 = #C1, required self::G<self::Class<self::ConcreteClass>> s6 = #C1, required self::G<core::Object> s7 = #C1, required self::G<core::int> s8 = #C1}) → void {}
  (self::Class<dynamic> t1, dynamic t2, self::Class<dynamic> t3, self::Class<dynamic> t4, self::ConcreteClass t5, self::Class<self::ConcreteClass> t6, core::Object t7, core::int t8, {required self::G<self::Class<dynamic>> s1 = #C1, required self::G<dynamic> s2 = #C1, required self::G<self::Class<dynamic>> s3 = #C1, required self::G<self::Class<dynamic>> s4 = #C1, required self::G<self::ConcreteClass> s5 = #C1, required self::G<self::Class<self::ConcreteClass>> s6 = #C1, required self::G<core::Object> s7 = #C1, required self::G<core::int> s8 = #C1}) → Null {};
}
static method Extension1|method3(lowered final core::int #this, self::Class<dynamic> t1, dynamic t2, self::Class<dynamic> t3, self::Class<dynamic> t4, self::ConcreteClass t5, self::Class<self::ConcreteClass> t6, core::Object t7, core::int t8, {required self::G<self::Class<dynamic>> s1 = #C1, required self::G<dynamic> s2 = #C1, required self::G<self::Class<dynamic>> s3 = #C1, required self::G<self::Class<dynamic>> s4 = #C1, required self::G<self::ConcreteClass> s5 = #C1, required self::G<self::Class<self::ConcreteClass>> s6 = #C1, required self::G<core::Object> s7 = #C1, required self::G<core::int> s8 = #C1}) → void {}
static method Extension1|get#method3(lowered final core::int #this) → (self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, {s1: self::G<self::Class<dynamic>>, s2: self::G<dynamic>, s3: self::G<self::Class<dynamic>>, s4: self::G<self::Class<dynamic>>, s5: self::G<self::ConcreteClass>, s6: self::G<self::Class<self::ConcreteClass>>, s7: self::G<core::Object>, s8: self::G<core::int>}) → void
  return (self::Class<dynamic> t1, dynamic t2, self::Class<dynamic> t3, self::Class<dynamic> t4, self::ConcreteClass t5, self::Class<self::ConcreteClass> t6, core::Object t7, core::int t8, {self::G<self::Class<dynamic>> s1 = #C1, self::G<dynamic> s2 = #C1, self::G<self::Class<dynamic>> s3 = #C1, self::G<self::Class<dynamic>> s4 = #C1, self::G<self::ConcreteClass> s5 = #C1, self::G<self::Class<self::ConcreteClass>> s6 = #C1, self::G<core::Object> s7 = #C1, self::G<core::int> s8 = #C1}) → void => self::Extension1|method3(#this, t1, t2, t3, t4, t5, t6, t7, t8, s1: s1, s2: s2, s3: s3, s4: s4, s5: s5, s6: s6, s7: s7, s8: s8);
static method main() → dynamic {}

constants  {
  #C1 = null
}
