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>> {}
//         ^
//
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 {
  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 = null, required self::G<dynamic> s2 = null, required self::G<self::Class<dynamic>> s3 = null, required self::G<self::Class<dynamic>> s4 = null, required self::G<self::ConcreteClass> s5 = null, required self::G<self::Class<self::ConcreteClass>> s6 = null, required self::G<core::Object> s7 = null, required self::G<core::int> s8 = null}) → self::Class1
    ;
  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 = null, required self::G<dynamic> s2 = null, required self::G<self::Class<dynamic>> s3 = null, required self::G<self::Class<dynamic>> s4 = null, required self::G<self::ConcreteClass> s5 = null, required self::G<self::Class<self::ConcreteClass>> s6 = null, required self::G<core::Object> s7 = null, required self::G<core::int> s8 = null}) → 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, required self::G<dynamic> s2, required self::G<self::Class<dynamic>> s3, required self::G<self::Class<dynamic>> s4, required self::G<self::ConcreteClass> s5, required self::G<self::Class<self::ConcreteClass>> s6, required self::G<core::Object> s7, required self::G<core::int> s8}) → void
  ;
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, required self::G<dynamic> s2, required self::G<self::Class<dynamic>> s3, required self::G<self::Class<dynamic>> s4, required self::G<self::ConcreteClass> s5, required self::G<self::Class<self::ConcreteClass>> s6, required self::G<core::Object> s7, required self::G<core::int> s8}) → 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, self::G<dynamic> s2, self::G<self::Class<dynamic>> s3, self::G<self::Class<dynamic>> s4, self::G<self::ConcreteClass> s5, self::G<self::Class<self::ConcreteClass>> s6, self::G<core::Object> s7, self::G<core::int> s8}) → 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
  ;
