library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/bounds_catch.dart:50:13: 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_catch.dart'.
// Try changing type arguments so that they conform to the bounds.
//   try {} on F<Object> catch (e) {}
//             ^
// pkg/front_end/testcases/general/bounds_catch.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_catch.dart:55:13: 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_catch.dart'.
// Try changing type arguments so that they conform to the bounds.
//   try {} on F<int> catch (e) {}
//             ^
// pkg/front_end/testcases/general/bounds_catch.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_catch.dart:90:13: 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_catch.dart'.
// Try changing type arguments so that they conform to the bounds.
//   try {} on G<Object> catch (e) {}
//             ^
// pkg/front_end/testcases/general/bounds_catch.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_catch.dart:95:13: 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_catch.dart'.
// Try changing type arguments so that they conform to the bounds.
//   try {} on G<int> catch (e) {}
//             ^
// pkg/front_end/testcases/general/bounds_catch.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_catch.dart:130:13: 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_catch.dart'.
// Try changing type arguments so that they conform to the bounds.
//   try {} on F<Object> catch (e) {}
//             ^
// pkg/front_end/testcases/general/bounds_catch.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_catch.dart:135:13: 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_catch.dart'.
// Try changing type arguments so that they conform to the bounds.
//   try {} on F<int> catch (e) {}
//             ^
// pkg/front_end/testcases/general/bounds_catch.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_catch.dart:170:13: 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_catch.dart'.
// Try changing type arguments so that they conform to the bounds.
//   try {} on G<Object> catch (e) {}
//             ^
// pkg/front_end/testcases/general/bounds_catch.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_catch.dart:175:13: 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_catch.dart'.
// Try changing type arguments so that they conform to the bounds.
//   try {} on G<int> catch (e) {}
//             ^
// pkg/front_end/testcases/general/bounds_catch.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::•()
    ;
}
static method t1a() → dynamic {
  try {
  }
  on self::Class<dynamic> catch(final self::Class<dynamic> e) {
  }
}
static method t2a() → dynamic {
  try {
  }
  on dynamic catch(final dynamic e) {
  }
}
static method t3a() → dynamic {
  try {
  }
  on self::Class<dynamic> catch(final self::Class<dynamic> e) {
  }
}
static method t4a() → dynamic {
  try {
  }
  on self::Class<dynamic> catch(final self::Class<dynamic> e) {
  }
}
static method t5a() → dynamic {
  try {
  }
  on self::ConcreteClass catch(final self::ConcreteClass e) {
  }
}
static method t6a() → dynamic {
  try {
  }
  on self::Class<self::ConcreteClass> catch(final self::Class<self::ConcreteClass> e) {
  }
}
static method t7a() → dynamic {
  try {
  }
  on core::Object catch(final core::Object e) {
  }
}
static method t8a() → dynamic {
  try {
  }
  on core::int catch(final core::int e) {
  }
}
static method s1a() → dynamic {
  try {
  }
  on self::G<self::Class<dynamic>> catch(final self::G<self::Class<dynamic>> e) {
  }
}
static method s2a() → dynamic {
  try {
  }
  on self::G<dynamic> catch(final self::G<dynamic> e) {
  }
}
static method s3a() → dynamic {
  try {
  }
  on self::G<self::Class<dynamic>> catch(final self::G<self::Class<dynamic>> e) {
  }
}
static method s4a() → dynamic {
  try {
  }
  on self::G<self::Class<dynamic>> catch(final self::G<self::Class<dynamic>> e) {
  }
}
static method s5a() → dynamic {
  try {
  }
  on self::G<self::ConcreteClass> catch(final self::G<self::ConcreteClass> e) {
  }
}
static method s6a() → dynamic {
  try {
  }
  on self::G<self::Class<self::ConcreteClass>> catch(final self::G<self::Class<self::ConcreteClass>> e) {
  }
}
static method s7a() → dynamic {
  try {
  }
  on self::G<core::Object> catch(final self::G<core::Object> e) {
  }
}
static method s8a() → dynamic {
  try {
  }
  on self::G<core::int> catch(final self::G<core::int> e) {
  }
}
static method t1b() → dynamic {
  try {
  }
  on self::Class<dynamic> catch(final self::Class<dynamic> e) {
  }
}
static method t2b() → dynamic {
  try {
  }
  on dynamic catch(final dynamic e) {
  }
}
static method t3b() → dynamic {
  try {
  }
  on self::Class<dynamic> catch(final self::Class<dynamic> e) {
  }
}
static method t4b() → dynamic {
  try {
  }
  on self::Class<dynamic> catch(final self::Class<dynamic> e) {
  }
}
static method t5b() → dynamic {
  try {
  }
  on self::ConcreteClass catch(final self::ConcreteClass e) {
  }
}
static method t6b() → dynamic {
  try {
  }
  on self::Class<self::ConcreteClass> catch(final self::Class<self::ConcreteClass> e) {
  }
}
static method t7b() → dynamic {
  try {
  }
  on core::Object catch(final core::Object e) {
  }
}
static method t8b() → dynamic {
  try {
  }
  on core::int catch(final core::int e) {
  }
}
static method s1b() → dynamic {
  try {
  }
  on self::G<self::Class<dynamic>> catch(final self::G<self::Class<dynamic>> e) {
  }
}
static method s2b() → dynamic {
  try {
  }
  on self::G<dynamic> catch(final self::G<dynamic> e) {
  }
}
static method s3b() → dynamic {
  try {
  }
  on self::G<self::Class<dynamic>> catch(final self::G<self::Class<dynamic>> e) {
  }
}
static method s4b() → dynamic {
  try {
  }
  on self::G<self::Class<dynamic>> catch(final self::G<self::Class<dynamic>> e) {
  }
}
static method s5b() → dynamic {
  try {
  }
  on self::G<self::ConcreteClass> catch(final self::G<self::ConcreteClass> e) {
  }
}
static method s6b() → dynamic {
  try {
  }
  on self::G<self::Class<self::ConcreteClass>> catch(final self::G<self::Class<self::ConcreteClass>> e) {
  }
}
static method s7b() → dynamic {
  try {
  }
  on self::G<core::Object> catch(final self::G<core::Object> e) {
  }
}
static method s8b() → dynamic {
  try {
  }
  on self::G<core::int> catch(final self::G<core::int> e) {
  }
}
static method main() → dynamic {}
