[cfe] Refactor bounds checking

This CL moves the bounds checking into the TypeBuilder instead of
performing it from the outside on the computed DartType node.
This solves several problems:

  1) Errors are now reported on the type in the code instead of the
     declaration which holds the type.
  2) Checking of type aliases (both function and nonfunction type
     aliases) is now handled correctly in all cases. This achieved by
     computed the aliased type (containing TypedefType nodes)
     internally and performing the checking on this type, and only
     convert the type into the unaliased version (without TypedefType
     nodes) after checks have been performed. Previously this handled
     through the FunctionType.typedefType property for function type
     aliases and through and incomplete work-around for nonfunction
     type aliases.
  3) With 2) FunctionType.typedefType is no longer needed and is
     removed.

TEST=general/bounds_*

Change-Id: I7653bca5ccb0ebf4b3553828a298d1ad918ef235
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/243722
Reviewed-by: Mayank Patke <fishythefish@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
diff --git a/pkg/_js_interop_checks/lib/src/transformations/static_interop_class_eraser.dart b/pkg/_js_interop_checks/lib/src/transformations/static_interop_class_eraser.dart
index 324a97d..e4ede99 100644
--- a/pkg/_js_interop_checks/lib/src/transformations/static_interop_class_eraser.dart
+++ b/pkg/_js_interop_checks/lib/src/transformations/static_interop_class_eraser.dart
@@ -120,8 +120,7 @@
               signatureType.declaredNullability,
               namedParameters: signatureType.namedParameters,
               typeParameters: signatureType.typeParameters,
-              requiredParameterCount: signatureType.requiredParameterCount,
-              typedefType: signatureType.typedefType);
+              requiredParameterCount: signatureType.requiredParameterCount);
         }
         return newProcedure;
       }
diff --git a/pkg/compiler/lib/src/serialization/helpers.dart b/pkg/compiler/lib/src/serialization/helpers.dart
index 46791ba..2e395b7 100644
--- a/pkg/compiler/lib/src/serialization/helpers.dart
+++ b/pkg/compiler/lib/src/serialization/helpers.dart
@@ -133,8 +133,6 @@
       _sink.writeBool(parameter.isRequired);
       _sink._writeDartTypeNode(parameter.type, functionTypeVariables);
     }
-    _sink._writeDartTypeNode(node.typedefType, functionTypeVariables,
-        allowNull: true);
     _sink.end(functionTypeNodeTag);
   }
 
diff --git a/pkg/compiler/lib/src/serialization/source.dart b/pkg/compiler/lib/src/serialization/source.dart
index efe6512..b09e780 100644
--- a/pkg/compiler/lib/src/serialization/source.dart
+++ b/pkg/compiler/lib/src/serialization/source.dart
@@ -767,13 +767,11 @@
           namedParameters[index] =
               ir.NamedType(name, type, isRequired: isRequired);
         }
-        ir.TypedefType typedefType = _readDartTypeNode(functionTypeVariables);
         end(functionTypeNodeTag);
         return ir.FunctionType(positionalParameters, returnType, nullability,
             namedParameters: namedParameters,
             typeParameters: typeParameters,
-            requiredParameterCount: requiredParameterCount,
-            typedefType: typedefType);
+            requiredParameterCount: requiredParameterCount);
 
       case DartTypeNodeKind.interfaceType:
         ir.Class cls = readClassNode();
diff --git a/pkg/front_end/lib/src/fasta/builder/builtin_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/builtin_type_declaration_builder.dart
index ce5ed5b..02c6b57 100644
--- a/pkg/front_end/lib/src/fasta/builder/builtin_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/builtin_type_declaration_builder.dart
@@ -25,14 +25,26 @@
         super(null, 0, name, compilationUnit, charOffset);
 
   @override
-  DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
+  DartType buildAliasedType(
+      LibraryBuilder library,
+      NullabilityBuilder nullabilityBuilder,
+      List<TypeBuilder>? arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments}) {
     return type.withDeclaredNullability(nullabilityBuilder.build(library));
   }
 
   @override
-  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
-      Nullability nullability, List<DartType> arguments) {
+  DartType buildAliasedTypeWithBuiltArguments(
+      LibraryBuilder library,
+      Nullability nullability,
+      List<DartType> arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments}) {
     return type.withDeclaredNullability(nullability);
   }
 
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index 4ecde96..8f483a0 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -18,13 +18,14 @@
         Supertype,
         getAsTypeArguments;
 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
-import 'package:kernel/src/legacy_erasure.dart';
+import 'package:kernel/src/unaliasing.dart';
 import 'package:kernel/text/text_serialization_verifier.dart';
 
 import '../fasta_codes.dart';
 import '../modifier.dart';
 import '../problems.dart' show internalProblem, unhandled;
 import '../scope.dart';
+import '../source/source_library_builder.dart';
 import '../type_inference/type_schema.dart' show UnknownType;
 import 'builder.dart';
 import 'declaration_builder.dart';
@@ -98,10 +99,7 @@
 
   InterfaceType rawType(Nullability nullability);
 
-  List<DartType> buildTypeArguments(
-      LibraryBuilder library, List<TypeBuilder>? arguments);
-
-  Supertype buildSupertype(
+  List<DartType> buildAliasedTypeArguments(
       LibraryBuilder library, List<TypeBuilder>? arguments);
 
   Supertype buildMixedInType(
@@ -310,8 +308,14 @@
   }
 
   @override
-  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
-      Nullability nullability, List<DartType>? arguments) {
+  DartType buildAliasedTypeWithBuiltArguments(
+      LibraryBuilder library,
+      Nullability nullability,
+      List<DartType>? arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments}) {
     assert(arguments == null || cls.typeParameters.length == arguments.length);
     if (isNullClass) {
       return const NullType();
@@ -324,31 +328,33 @@
         return new FutureOrType(arguments!.single, nullability);
       }
     }
-    return arguments == null
+    DartType type = arguments == null
         ? rawType(nullability)
         : new InterfaceType(cls, nullability, arguments);
+    if (typeVariablesCount != 0 && library is SourceLibraryBuilder) {
+      library.registerBoundsCheck(type, fileUri, charOffset, typeUse,
+          inferred: !hasExplicitTypeArguments);
+    }
+    return type;
   }
 
   @override
-  DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
-    return buildTypeWithBuiltArguments(
+  DartType buildAliasedType(
+      LibraryBuilder library,
+      NullabilityBuilder nullabilityBuilder,
+      List<TypeBuilder>? arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments}) {
+    return buildAliasedTypeWithBuiltArguments(
         library,
         nullabilityBuilder.build(library),
-        buildTypeArguments(library, arguments));
-  }
-
-  @override
-  Supertype buildSupertype(
-      LibraryBuilder library, List<TypeBuilder>? arguments) {
-    Class cls = isPatch ? origin.cls : this.cls;
-    List<DartType> typeArguments = buildTypeArguments(library, arguments);
-    if (!library.isNonNullableByDefault) {
-      for (int i = 0; i < typeArguments.length; ++i) {
-        typeArguments[i] = legacyErasure(typeArguments[i]);
-      }
-    }
-    return new Supertype(cls, typeArguments);
+        buildAliasedTypeArguments(library, arguments),
+        typeUse,
+        fileUri,
+        charOffset,
+        hasExplicitTypeArguments: hasExplicitTypeArguments);
   }
 
   @override
@@ -356,7 +362,11 @@
       LibraryBuilder library, List<TypeBuilder>? arguments) {
     Class cls = isPatch ? origin.cls : this.cls;
     if (arguments != null) {
-      return new Supertype(cls, buildTypeArguments(library, arguments));
+      List<DartType> typeArguments =
+          buildAliasedTypeArguments(library, arguments);
+      typeArguments = unaliasTypes(typeArguments,
+          legacyEraseAliases: !library.isNonNullableByDefault)!;
+      return new Supertype(cls, typeArguments);
     } else {
       return new Supertype(
           cls,
diff --git a/pkg/front_end/lib/src/fasta/builder/extension_builder.dart b/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
index f0deb80..5272f53 100644
--- a/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
@@ -72,14 +72,24 @@
   }
 
   @override
-  DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
+  DartType buildAliasedType(
+      LibraryBuilder library,
+      NullabilityBuilder nullabilityBuilder,
+      List<TypeBuilder>? arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments}) {
     if (library is SourceLibraryBuilder &&
         library.libraryFeatures.extensionTypes.isEnabled) {
-      return buildTypeWithBuiltArguments(
+      return buildAliasedTypeWithBuiltArguments(
           library,
           nullabilityBuilder.build(library),
-          _buildTypeArguments(library, arguments));
+          _buildAliasedTypeArguments(library, arguments),
+          typeUse,
+          fileUri,
+          charOffset,
+          hasExplicitTypeArguments: hasExplicitTypeArguments);
     } else {
       throw new UnsupportedError("ExtensionBuilder.buildType is not supported"
           "in library '${library.importUri}'.");
@@ -87,8 +97,14 @@
   }
 
   @override
-  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
-      Nullability nullability, List<DartType> arguments) {
+  DartType buildAliasedTypeWithBuiltArguments(
+      LibraryBuilder library,
+      Nullability nullability,
+      List<DartType> arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments}) {
     if (library is SourceLibraryBuilder &&
         library.libraryFeatures.extensionTypes.isEnabled) {
       return new ExtensionType(extension, nullability, arguments);
@@ -102,7 +118,7 @@
   @override
   int get typeVariablesCount => typeParameters?.length ?? 0;
 
-  List<DartType> _buildTypeArguments(
+  List<DartType> _buildAliasedTypeArguments(
       LibraryBuilder library, List<TypeBuilder>? arguments) {
     if (arguments == null && typeParameters == null) {
       return <DartType>[];
@@ -111,7 +127,9 @@
     if (arguments == null && typeParameters != null) {
       List<DartType> result =
           new List<DartType>.generate(typeParameters!.length, (int i) {
-        return typeParameters![i].defaultType!.build(library);
+        return typeParameters![i]
+            .defaultType!
+            .buildAliased(library, TypeUse.defaultTypeAsTypeArgument);
       }, growable: true);
       if (library is SourceLibraryBuilder) {
         library.inferredTypes.addAll(result);
@@ -133,7 +151,7 @@
     assert(arguments!.length == typeVariablesCount);
     List<DartType> result =
         new List<DartType>.generate(arguments!.length, (int i) {
-      return arguments[i].build(library);
+      return arguments[i].buildAliased(library, TypeUse.typeArgument);
     }, growable: true);
     return result;
   }
diff --git a/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart
index 44e408f..92bcd1d 100644
--- a/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart
@@ -48,7 +48,12 @@
   }
 
   @override
-  DartType build(LibraryBuilder library) {
+  DartType build(LibraryBuilder library, TypeUse typeUse) {
+    return type;
+  }
+
+  @override
+  DartType buildAliased(LibraryBuilder library, TypeUse typeUse) {
     return type;
   }
 
diff --git a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
index 68f16e3..2832049 100644
--- a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
@@ -145,7 +145,7 @@
   VariableDeclaration build(
       SourceLibraryBuilder library, int functionNestingLevel) {
     if (variable == null) {
-      DartType? builtType = type?.build(library);
+      DartType? builtType = type?.build(library, TypeUse.parameterType);
       variable = new VariableDeclarationImpl(
           name == noNameSentinel ? null : name, functionNestingLevel,
           type: builtType,
diff --git a/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
index f972a4d0..30493a8 100644
--- a/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
@@ -12,6 +12,7 @@
         NamedType,
         Supertype,
         TypeParameter;
+import 'package:kernel/src/unaliasing.dart';
 
 import '../fasta_codes.dart' show messageSupertypeIsFunction, noLength;
 
@@ -84,19 +85,29 @@
   }
 
   @override
-  FunctionType build(LibraryBuilder library) {
-    return _type ??= _buildInternal(library);
+  FunctionType build(LibraryBuilder library, TypeUse typeUse) {
+    return _type ??= _buildInternal(library, typeUse) as FunctionType;
   }
 
-  FunctionType _buildInternal(LibraryBuilder library) {
+  DartType _buildInternal(LibraryBuilder library, TypeUse typeUse) {
+    DartType aliasedType = buildAliased(library, typeUse);
+    return unalias(aliasedType,
+        legacyEraseAliases: !library.isNonNullableByDefault);
+  }
+
+  @override
+  DartType buildAliased(LibraryBuilder library, TypeUse typeUse) {
     DartType builtReturnType =
-        returnType?.build(library) ?? const DynamicType();
+        returnType?.buildAliased(library, TypeUse.returnType) ??
+            const DynamicType();
     List<DartType> positionalParameters = <DartType>[];
     List<NamedType>? namedParameters;
     int requiredParameterCount = 0;
     if (formals != null) {
       for (ParameterBuilder formal in formals!) {
-        DartType type = formal.type?.build(library) ?? const DynamicType();
+        DartType type =
+            formal.type?.buildAliased(library, TypeUse.parameterType) ??
+                const DynamicType();
         if (formal.isPositional) {
           positionalParameters.add(type);
           if (formal.isRequiredPositional) requiredParameterCount++;
@@ -116,7 +127,7 @@
       for (TypeVariableBuilder t in typeVariables!) {
         typeParameters.add(t.parameter);
         // Build the bound to detect cycles in typedefs.
-        t.bound?.build(library);
+        t.bound?.build(library, TypeUse.typeParameterBound);
       }
     }
     return new FunctionType(positionalParameters, builtReturnType,
diff --git a/pkg/front_end/lib/src/fasta/builder/future_or_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/future_or_type_declaration_builder.dart
index 277a400..fb47efbb 100644
--- a/pkg/front_end/lib/src/fasta/builder/future_or_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/future_or_type_declaration_builder.dart
@@ -20,15 +20,28 @@
   String get debugName => "FutureOrTypeDeclarationBuilder";
 
   @override
-  DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
+  DartType buildAliasedType(
+      LibraryBuilder library,
+      NullabilityBuilder nullabilityBuilder,
+      List<TypeBuilder>? arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments}) {
     return new FutureOrType(
-        arguments!.single.build(library), nullabilityBuilder.build(library));
+        arguments!.single.buildAliased(library, TypeUse.typeArgument),
+        nullabilityBuilder.build(library));
   }
 
   @override
-  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
-      Nullability nullability, List<DartType> arguments) {
+  DartType buildAliasedTypeWithBuiltArguments(
+      LibraryBuilder library,
+      Nullability nullability,
+      List<DartType> arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments}) {
     return new FutureOrType(arguments.single, nullability);
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/invalid_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/invalid_type_declaration_builder.dart
index 5f2b68b..82d2ccc 100644
--- a/pkg/front_end/lib/src/fasta/builder/invalid_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/invalid_type_declaration_builder.dart
@@ -33,15 +33,29 @@
   Uri? get fileUri => message.uri;
 
   @override
-  DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
-    return buildTypeWithBuiltArguments(library, null, null);
+  DartType buildAliasedType(
+      LibraryBuilder library,
+      NullabilityBuilder nullabilityBuilder,
+      List<TypeBuilder>? arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments}) {
+    return buildAliasedTypeWithBuiltArguments(
+        library, null, null, typeUse, fileUri, charOffset,
+        hasExplicitTypeArguments: hasExplicitTypeArguments);
   }
 
   /// [Arguments] have already been built.
   @override
-  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
-      Nullability? nullability, List<DartType>? arguments) {
+  DartType buildAliasedTypeWithBuiltArguments(
+      LibraryBuilder library,
+      Nullability? nullability,
+      List<DartType>? arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments}) {
     if (!suppressMessage) {
       library.addProblem(message.messageObject, message.charOffset,
           message.length, message.uri,
diff --git a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
index f4f08fe..036806f 100644
--- a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
@@ -5,6 +5,8 @@
 library fasta.named_type_builder;
 
 import 'package:kernel/ast.dart';
+import 'package:kernel/src/legacy_erasure.dart';
+import 'package:kernel/src/unaliasing.dart';
 
 import '../fasta_codes.dart'
     show
@@ -25,15 +27,11 @@
         templateTypeArgumentMismatch,
         templateTypeArgumentsOnTypeVariable,
         templateTypeNotFound;
-
 import '../identifiers.dart' show Identifier, QualifiedName, flattenName;
-
 import '../problems.dart' show unhandled;
-
 import '../scope.dart';
-
 import '../source/source_library_builder.dart';
-
+import '../uris.dart';
 import 'builder.dart';
 import 'builtin_type_declaration_builder.dart';
 import 'class_builder.dart';
@@ -114,6 +112,8 @@
 
   DartType? _type;
 
+  final bool hasExplicitTypeArguments;
+
   NamedTypeBuilder(this.name, this.nullabilityBuilder,
       {this.arguments,
       this.fileUri,
@@ -122,7 +122,8 @@
       bool forTypeLiteral: false})
       : assert(name is String || name is QualifiedName),
         this._instanceTypeVariableAccess = instanceTypeVariableAccess,
-        this._forTypeLiteral = forTypeLiteral;
+        this._forTypeLiteral = forTypeLiteral,
+        this.hasExplicitTypeArguments = arguments != null;
 
   NamedTypeBuilder.forDartType(DartType this._type,
       TypeDeclarationBuilder this._declaration, this.nullabilityBuilder,
@@ -132,7 +133,8 @@
             InstanceTypeVariableAccessState.Unexpected,
         this.fileUri = null,
         this.charOffset = null,
-        this._forTypeLiteral = false;
+        this._forTypeLiteral = false,
+        this.hasExplicitTypeArguments = arguments != null;
 
   NamedTypeBuilder.fromTypeDeclarationBuilder(
       TypeDeclarationBuilder this._declaration, this.nullabilityBuilder,
@@ -144,7 +146,8 @@
       : this.name = _declaration.name,
         this._forTypeLiteral = false,
         this._instanceTypeVariableAccess = instanceTypeVariableAccess,
-        this._type = type;
+        this._type = type,
+        this.hasExplicitTypeArguments = arguments != null;
 
   NamedTypeBuilder.forInvalidType(
       String this.name, this.nullabilityBuilder, LocatedMessage message,
@@ -156,7 +159,8 @@
         this._instanceTypeVariableAccess =
             InstanceTypeVariableAccessState.Unexpected,
         this._forTypeLiteral = false,
-        this._type = const InvalidType();
+        this._type = const InvalidType(),
+        this.hasExplicitTypeArguments = false;
 
   @override
   TypeDeclarationBuilder? get declaration => _declaration;
@@ -378,55 +382,57 @@
   }
 
   @override
-  DartType build(LibraryBuilder library) {
-    return _type ??= _buildInternal(library);
+  DartType build(LibraryBuilder library, TypeUse typeUse) {
+    return _type ??= _buildInternal(library, typeUse);
   }
 
-  DartType _declarationBuildType(LibraryBuilder library) {
-    if (_forTypeLiteral) {
-      return declaration!
-          .buildTypeLiteralType(library, nullabilityBuilder, arguments);
-    } else {
-      return declaration!.buildType(library, nullabilityBuilder, arguments);
-    }
+  DartType _buildInternal(LibraryBuilder library, TypeUse typeUse) {
+    DartType aliasedType = _buildAliasedInternal(library, typeUse);
+    return unalias(aliasedType,
+        legacyEraseAliases:
+            !_forTypeLiteral && !library.isNonNullableByDefault);
   }
 
-  DartType _buildInternal(LibraryBuilder library) {
+  @override
+  DartType buildAliased(LibraryBuilder library, TypeUse typeUse) {
+    return _buildAliasedInternal(library, typeUse);
+  }
+
+  DartType _buildAliasedInternal(LibraryBuilder library, TypeUse typeUse) {
     assert(declaration != null, "Declaration has not been resolved on $this.");
-    if (library is SourceLibraryBuilder) {
-      int uncheckedTypedefTypeCount = library.uncheckedTypedefTypes.length;
-      DartType builtType = _declarationBuildType(library);
-      // Set locations for new unchecked TypedefTypes for error reporting.
-      for (int i = uncheckedTypedefTypeCount;
-          i < library.uncheckedTypedefTypes.length;
-          ++i) {
-        // TODO(johnniwinther): Pass the uri/offset through the build methods
-        // to avoid this.
-        library.uncheckedTypedefTypes[i]
-          ..fileUri ??= fileUri
-          ..offset ??= charOffset;
-      }
-      return builtType;
-    } else {
-      return _declarationBuildType(library);
-    }
+    return declaration!.buildAliasedType(library, nullabilityBuilder, arguments,
+        typeUse, fileUri ?? missingUri, charOffset ?? TreeNode.noOffset,
+        hasExplicitTypeArguments: hasExplicitTypeArguments);
   }
 
   @override
   Supertype? buildSupertype(LibraryBuilder library) {
     TypeDeclarationBuilder declaration = this.declaration!;
     if (declaration is ClassBuilder) {
-      if (declaration.isNullClass && !library.mayImplementRestrictedTypes) {
-        library.addProblem(
-            templateExtendingRestricted.withArguments(declaration.name),
-            charOffset!,
-            noLength,
-            fileUri);
+      if (declaration.isNullClass) {
+        if (!library.mayImplementRestrictedTypes) {
+          library.addProblem(
+              templateExtendingRestricted.withArguments(declaration.name),
+              charOffset!,
+              noLength,
+              fileUri);
+        }
       }
-      return declaration.buildSupertype(library, arguments);
+      DartType type = build(library, TypeUse.superType);
+      if (type is InterfaceType) {
+        if (!library.isNonNullableByDefault) {
+          // This "normalizes" type argument `Never*` to `Null`.
+          type = legacyErasure(type) as InterfaceType;
+        }
+        return new Supertype(type.classNode, type.typeArguments);
+      } else if (type is FutureOrType) {
+        return new Supertype(declaration.cls, [type.typeArgument]);
+      } else if (type is NullType) {
+        return new Supertype(declaration.cls, []);
+      }
     } else if (declaration is TypeAliasBuilder) {
       TypeAliasBuilder aliasBuilder = declaration;
-      DartType type = build(library);
+      DartType type = build(library, TypeUse.superType);
       if (type is InterfaceType && type.nullability != Nullability.nullable) {
         return new Supertype(type.classNode, type.typeArguments);
       } else if (type is NullType) {
@@ -490,7 +496,7 @@
       return declaration.buildMixedInType(library, arguments);
     } else if (declaration is TypeAliasBuilder) {
       TypeAliasBuilder aliasBuilder = declaration;
-      DartType type = build(library);
+      DartType type = build(library, TypeUse.mixedInType);
       if (type is InterfaceType && type.nullability != Nullability.nullable) {
         return new Supertype(type.classNode, type.typeArguments);
       }
diff --git a/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart
index 2e2c1b5..20389ed 100644
--- a/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart
@@ -10,27 +10,40 @@
 import 'library_builder.dart';
 import 'nullability_builder.dart';
 import 'type_builder.dart';
+import '../uris.dart';
 
 class NeverTypeDeclarationBuilder extends BuiltinTypeDeclarationBuilder {
   final LibraryBuilder coreLibrary;
 
   NeverTypeDeclarationBuilder(DartType type, this.coreLibrary, int charOffset)
       : super("Never", type, coreLibrary, charOffset) {
-    assert(coreLibrary.importUri == Uri.parse('dart:core'));
+    assert(coreLibrary.importUri == dartCore);
   }
 
   @override
   String get debugName => "NeverTypeDeclarationBuilder";
 
   @override
-  DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
+  DartType buildAliasedType(
+      LibraryBuilder library,
+      NullabilityBuilder nullabilityBuilder,
+      List<TypeBuilder>? arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments}) {
     return type.withDeclaredNullability(nullabilityBuilder.build(library));
   }
 
   @override
-  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
-      Nullability nullability, List<DartType> arguments) {
+  DartType buildAliasedTypeWithBuiltArguments(
+      LibraryBuilder library,
+      Nullability nullability,
+      List<DartType> arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments}) {
     return type.withDeclaredNullability(nullability);
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/null_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/null_type_declaration_builder.dart
index 818c6f0..945aa07 100644
--- a/pkg/front_end/lib/src/fasta/builder/null_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/null_type_declaration_builder.dart
@@ -20,14 +20,26 @@
   String get debugName => "NullTypeBuilder";
 
   @override
-  DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
+  DartType buildAliasedType(
+      LibraryBuilder library,
+      NullabilityBuilder nullabilityBuilder,
+      List<TypeBuilder>? arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments}) {
     return type;
   }
 
   @override
-  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
-      Nullability nullability, List<DartType> arguments) {
+  DartType buildAliasedTypeWithBuiltArguments(
+      LibraryBuilder library,
+      Nullability nullability,
+      List<DartType> arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments}) {
     return type;
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
index ad7bceb..3b977bc 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
@@ -5,9 +5,6 @@
 library fasta.function_type_alias_builder;
 
 import 'package:kernel/ast.dart';
-import 'package:kernel/src/legacy_erasure.dart';
-
-import 'package:kernel/type_algebra.dart' show substitute, uniteNullabilities;
 
 import '../fasta_codes.dart'
     show
@@ -55,12 +52,7 @@
 
   DartType buildThisType();
 
-  /// [arguments] have already been built.
-  @override
-  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
-      Nullability nullability, List<DartType>? arguments);
-
-  List<DartType> buildTypeArguments(
+  List<DartType> buildAliasedTypeArguments(
       LibraryBuilder library, List<TypeBuilder>? arguments);
 
   /// Returns `true` if this typedef is an alias of the `Null` type.
@@ -153,81 +145,50 @@
 
   /// [arguments] have already been built.
   @override
-  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
-      Nullability nullability, List<DartType>? arguments) {
-    DartType thisType = buildThisType();
-    if (const DynamicType() == thisType) return thisType;
-    Nullability adjustedNullability =
-        isNullAlias ? Nullability.nullable : nullability;
-    DartType result = thisType.withDeclaredNullability(adjustedNullability);
-    // TODO(johnniwinther): Couldn't [arguments] be null and
-    // `typedef.typeParameters` be non-empty?
-    if (typedef.typeParameters.isEmpty && arguments == null) return result;
-    Map<TypeParameter, DartType> substitution = <TypeParameter, DartType>{};
-    for (int i = 0; i < typedef.typeParameters.length; i++) {
-      substitution[typedef.typeParameters[i]] = arguments![i];
+  DartType buildAliasedTypeWithBuiltArguments(
+      LibraryBuilder library,
+      Nullability nullability,
+      List<DartType>? arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments}) {
+    buildThisType();
+    TypedefType type = new TypedefType(typedef, nullability, arguments);
+    if (library is SourceLibraryBuilder) {
+      if (typeVariablesCount != 0) {
+        library.registerBoundsCheck(type, fileUri, charOffset, typeUse,
+            inferred: !hasExplicitTypeArguments);
+      }
+      if (!library.libraryFeatures.genericMetadata.isEnabled) {
+        library.registerGenericFunctionTypeCheck(type, fileUri, charOffset);
+      }
     }
-    // The following adds the built type to the list of unchecked typedef types
-    // of the client library. It is needed because the type is built unaliased,
-    // and at the time of the check it wouldn't be possible to see if the type
-    // arguments to the generic typedef conform to the bounds without preserving
-    // the TypedefType for the delayed check.
-    if (library is SourceLibraryBuilder &&
-        arguments!.isNotEmpty &&
-        thisType is! FunctionType) {
-      library.uncheckedTypedefTypes.add(new UncheckedTypedefType(
-          new TypedefType(typedef, nullability, arguments)));
-    }
-    return substitute(result, substitution);
+
+    return type;
   }
 
   @override
-  DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
-    return buildTypeInternal(library, nullabilityBuilder, arguments,
-        performLegacyErasure: true);
-  }
-
-  @override
-  DartType buildTypeLiteralType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
-    return buildTypeInternal(library, nullabilityBuilder, arguments,
-        performLegacyErasure: false);
-  }
-
-  DartType buildTypeInternal(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {required bool performLegacyErasure}) {
+  DartType buildAliasedType(
+      LibraryBuilder library,
+      NullabilityBuilder nullabilityBuilder,
+      List<TypeBuilder>? arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments}) {
     DartType thisType = buildThisType();
     if (thisType is InvalidType) return thisType;
 
-    // The following won't work if the right-hand side of the typedef is a
-    // FutureOr.
-    Nullability nullability;
-    if (isNullAlias) {
-      // Null is always nullable.
-      nullability = Nullability.nullable;
-    } else if (!parent.isNonNullableByDefault ||
-        !library.isNonNullableByDefault) {
-      // The typedef is defined or used in an opt-out library so the nullability
-      // is based on the use site alone.
-      nullability = nullabilityBuilder.build(library);
-    } else {
-      nullability = uniteNullabilities(
-          thisType.declaredNullability, nullabilityBuilder.build(library));
-    }
-    DartType result;
-    if (typedef.typeParameters.isEmpty && arguments == null) {
-      result = thisType.withDeclaredNullability(nullability);
-    } else {
-      // Otherwise, substitute.
-      result = buildTypeWithBuiltArguments(
-          library, nullability, buildTypeArguments(library, arguments));
-    }
-    if (performLegacyErasure && !library.isNonNullableByDefault) {
-      result = legacyErasure(result);
-    }
-    return result;
+    Nullability nullability = nullabilityBuilder.build(library);
+    return buildAliasedTypeWithBuiltArguments(
+        library,
+        nullability,
+        buildAliasedTypeArguments(library, arguments),
+        typeUse,
+        fileUri,
+        charOffset,
+        hasExplicitTypeArguments: hasExplicitTypeArguments);
   }
 
   TypeDeclarationBuilder? _cachedUnaliasedDeclaration;
diff --git a/pkg/front_end/lib/src/fasta/builder/type_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
index 72d12fa..0090e6f 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
@@ -13,6 +13,249 @@
 import 'type_declaration_builder.dart';
 import 'type_variable_builder.dart';
 
+enum TypeUse {
+  /// A type used as the type of a parameter.
+  ///
+  /// For instance `X` and `Y` in
+  ///
+  ///    method(X p, {Y q}) {}
+  ///
+  parameterType,
+
+  /// A type used as the type of a field.
+  ///
+  /// For instance `X` and `Y` in
+  ///
+  ///    X topLevelField;
+  ///    class Class {
+  ///      Y instanceField;
+  ///    }
+  ///
+  fieldType,
+
+  /// A type used as the return type of a function.
+  ///
+  /// For instance `X` in
+  ///
+  ///    X method() { ... }
+  ///
+  returnType,
+
+  /// A type used as a type argument to a constructor invocation.
+  ///
+  /// For instance `X` in
+  ///
+  ///   class Class<T> {}
+  ///   method() => new Class<X>();
+  ///
+  constructorTypeArgument,
+
+  /// A type used as a type argument to a redirecting factory constructor
+  /// declaration.
+  ///
+  /// For instance `X` in
+  ///
+  ///   class Class<T> {
+  ///     Class();
+  ///     factory Class.redirect() = Class<X>;
+  ///   }
+  ///
+  redirectionTypeArgument,
+
+  /// A type used as the bound of a type parameter.
+  ///
+  /// For instance `X` and `Y` in
+  ///
+  ///    method<T extends X>() {}
+  ///    class Class<S extends Y> {}
+  ///
+  typeParameterBound,
+
+  /// A type computed as the default type for a type parameter.
+  ///
+  /// For instance the type `X` computed for `T` and the type `dynamic` computed
+  /// for `S`.
+  ///
+  ///    method<T extends X>() {}
+  ///    class Class<S> {}
+  ///
+  typeParameterDefaultType,
+
+  /// A type used as a type argument in the instantiation of a tear off.
+  ///
+  /// For instance `X` and `Y` in
+  ///
+  ///    class Class<S> {}
+  ///    method<T>() {
+  ///      Class<X>.new;
+  ///      method<Y>;
+  ///    }
+  ///
+  tearOffTypeArgument,
+
+  /// A type used in an extends, with or implements clause.
+  ///
+  /// For instance `X`, `Y`, `Z` in
+  ///
+  ///    class Class extends X with Y implements Z {}
+  ///
+  // TODO(johnniwinther): The probably enclosed the mixin on clause. Is this
+  // a correct handling wrt well-boundedness?
+  superType,
+
+  /// A type used in a with clause.
+  ///
+  /// For instance `X` in
+  ///
+  ///    class Class extends X {}
+  ///
+  /// This type use creates an intermediate type used for mixin inference. The
+  /// type is not check for well-boundedness and contains [UnknownType] where
+  /// type arguments are omitted.
+  mixedInType,
+
+  /// A type used in the on clause of an extension declaration.
+  ///
+  /// For instance `X` in
+  ///
+  ///    extension Extension on X {}
+  ///
+  extensionOnType,
+
+  /// A type used as the definition of a typedef.
+  ///
+  /// For instance `X`, `void Function()` in
+  ///
+  ///    typedef Typedef1 = X;
+  ///    typedef void Typedef2(); // The unaliased type is `void Function()`.
+  ///
+  typedefAlias,
+
+  /// An internally created function type used when build local functions.
+  functionSignature,
+
+  /// The this type of an enum.
+  // TODO(johnniwinther): This is doesn't currently have the correct value
+  // and/or well-boundedness checking.
+  enumSelfType,
+
+  /// A type used as a type literal.
+  ///
+  /// For instance `X` in
+  ///
+  ///    method() => X;
+  ///
+  /// where `X` is the name of a class.
+  typeLiteral,
+
+  /// A type used as a type argument to a literal.
+  ///
+  /// For instance `X`, `Y`, `Z`, and `W` in
+  ///
+  ///    method() {
+  ///      <X>[];
+  ///      <Y>{};
+  ///      <Z, W>{};
+  ///    }
+  ///
+  literalTypeArgument,
+
+  /// A type used as a type argument in an invocation.
+  ///
+  /// For instance `X`, `Y`, and `Z` in
+  ///
+  ///   staticMethod<T>(Class c, void Function<S>() f) {
+  ///     staticMethod<X>(c, f);
+  ///     c.instanceMethod<Y>();
+  ///     f<Z>();
+  ///   }
+  ///   class Class {
+  ///     instanceMethod<U>() {}
+  ///   }
+  invocationTypeArgument,
+
+  /// A type used as the type in an is-test.
+  ///
+  /// For instance `X` in
+  ///
+  ///    method(o) => o is X;
+  ///
+  isType,
+
+  /// A type used as the type in an as-cast.
+  ///
+  /// For instance `X` in
+  ///
+  ///    method(o) => o as X;
+  ///
+  asType,
+
+  /// A type used as the type of local variable.
+  ///
+  /// For instance `X` in
+  ///
+  ///    method() {
+  ///      X local;
+  ///    }
+  ///
+  variableType,
+
+  /// A type used as the catch type in a catch clause.
+  ///
+  /// For instance `X` in
+  ///
+  ///    method() {
+  ///      try {
+  ///      } on X catch (e) {
+  ///      }
+  ///    }
+  ///
+  catchType,
+
+  /// A type used as an instantiation argument.
+  ///
+  /// For instance `X` in
+  ///
+  ///   method(void Function<T>() f) {
+  ///     f<X>;
+  ///   }
+  ///
+  instantiation,
+
+  /// A type used as a type argument within another type.
+  ///
+  /// For instance `X`, `Y`, `Z` and `W` in
+  ///
+  ///   method(List<X> a, Y Function(Z) f) {}
+  ///   class Class implements List<W> {}
+  ///
+  typeArgument,
+
+  /// The default type of a type parameter used as the type argument in a raw
+  /// type.
+  ///
+  /// For instance `X` implicitly inside `Class<X>` in the type of `cls` in
+  ///
+  ///   class Class<T extends X> {}
+  ///   Class cls;
+  ///
+  defaultTypeAsTypeArgument,
+
+  /// A type from a deferred library. This is an error case.
+  ///
+  /// For instance `X` in
+  ///
+  ///   import 'foo.dart' deferred as prefix;
+  ///
+  ///   prefix.X field;
+  ///
+  deferredTypeError,
+
+  /// A type used as a type argument in the construction of a type through the
+  /// macro API.
+  macroTypeArgument,
+}
+
 abstract class TypeBuilder {
   const TypeBuilder();
 
@@ -60,7 +303,23 @@
 
   String get fullNameForErrors => "${printOn(new StringBuffer())}";
 
-  DartType build(LibraryBuilder library);
+  /// Creates the [DartType] from this [TypeBuilder] that doesn't contain
+  /// [TypedefType].
+  ///
+  /// [library] is used to determine nullabilities and for registering well-
+  /// boundedness checks on the created type. [typeUse] describes how the
+  /// type is used which determine which well-boundedness checks are applied.
+  DartType build(LibraryBuilder library, TypeUse typeUse);
+
+  /// Creates the [DartType] from this [TypeBuilder] that contains
+  /// [TypedefType]. This is used to create types internal on which well-
+  /// boundedness checks can be permit. Calls from outside the [TypeBuilder]
+  /// subclasses should generally use [build] instead.
+  ///
+  /// [library] is used to determine nullabilities and for registering well-
+  /// boundedness checks on the created type. [typeUse] describes how the
+  /// type is used which determine which well-boundedness checks are applied.
+  DartType buildAliased(LibraryBuilder library, TypeUse typeUse);
 
   Supertype? buildSupertype(LibraryBuilder library);
 
diff --git a/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart
index 1e51ffb..d8df153 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart
@@ -33,22 +33,32 @@
 
   /// Creates the [DartType] corresponding to this declaration applied with
   /// [arguments] in [library] with the syntactical nullability defined by
-  /// [nullabilityBuilder].
+  /// [nullabilityBuilder]. The created type will contain [TypedefType] instead
+  /// of their unaliased type.
   ///
   /// For instance, if this declaration is a class declaration `C`, then
   /// an occurrence of `C<int>?` in a null safe library `lib1` would call
   /// `buildType(<lib1>, <?>, [<int>])` to create `C<int>?`, or `C<int>` in a
   /// legacy library `lib2` call `buildType(<lib2>, <> [<int>]` to create
   /// `C<int*>*`.
-  DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments);
-
-  DartType buildTypeLiteralType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments);
+  DartType buildAliasedType(
+      LibraryBuilder library,
+      NullabilityBuilder nullabilityBuilder,
+      List<TypeBuilder>? arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments});
 
   /// [arguments] have already been built.
-  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
-      Nullability nullability, List<DartType> arguments);
+  DartType buildAliasedTypeWithBuiltArguments(
+      LibraryBuilder library,
+      Nullability nullability,
+      List<DartType> arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments});
 }
 
 abstract class TypeDeclarationBuilderImpl extends ModifierBuilderImpl
@@ -85,10 +95,4 @@
 
   @override
   int get typeVariablesCount => 0;
-
-  @override
-  DartType buildTypeLiteralType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
-    return buildType(library, nullabilityBuilder, arguments);
-  }
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
index 79a2d15..3cc96e2 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
@@ -15,6 +15,7 @@
 
 import '../scope.dart';
 import '../source/source_library_builder.dart';
+import '../uris.dart';
 import '../util/helpers.dart';
 
 import 'builder.dart';
@@ -119,11 +120,15 @@
   }
 
   @override
-  DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
+  DartType buildAliasedType(
+      LibraryBuilder library,
+      NullabilityBuilder nullabilityBuilder,
+      List<TypeBuilder>? arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments}) {
     if (arguments != null) {
-      int charOffset = -1; // TODO(ahe): Provide these.
-      Uri? fileUri = null; // TODO(ahe): Provide these.
       library.addProblem(
           templateTypeArgumentsOnTypeVariable.withArguments(name),
           charOffset,
@@ -148,26 +153,34 @@
     } else {
       nullability = nullabilityBuilder.build(library);
     }
-    TypeParameterType type =
-        buildTypeWithBuiltArguments(library, nullability, null);
+    TypeParameterType type = buildAliasedTypeWithBuiltArguments(
+        library, nullability, null, typeUse, fileUri, charOffset,
+        hasExplicitTypeArguments: hasExplicitTypeArguments);
     if (needsPostUpdate) {
       if (library is SourceLibraryBuilder) {
-        library.registerPendingNullability(fileUri!, charOffset, type);
+        library.registerPendingNullability(
+            this.fileUri!, this.charOffset, type);
       } else {
         library.addProblem(
             templateInternalProblemUnfinishedTypeVariable.withArguments(
                 name, library.importUri),
-            charOffset,
+            this.charOffset,
             name.length,
-            fileUri);
+            this.fileUri);
       }
     }
     return type;
   }
 
   @override
-  TypeParameterType buildTypeWithBuiltArguments(LibraryBuilder library,
-      Nullability nullability, List<DartType>? arguments) {
+  TypeParameterType buildAliasedTypeWithBuiltArguments(
+      LibraryBuilder library,
+      Nullability nullability,
+      List<DartType>? arguments,
+      TypeUse typeUse,
+      Uri fileUri,
+      int charOffset,
+      {required bool hasExplicitTypeArguments}) {
     if (arguments != null) {
       int charOffset = -1; // TODO(ahe): Provide these.
       Uri? fileUri = null; // TODO(ahe): Provide these.
@@ -183,10 +196,17 @@
   void finish(
       LibraryBuilder library, ClassBuilder object, TypeBuilder dynamicType) {
     if (isPatch) return;
-    DartType objectType =
-        object.buildType(library, library.nullableBuilder, null);
+    DartType objectType = object.buildAliasedType(
+        library,
+        library.nullableBuilder,
+        null,
+        TypeUse.typeParameterBound,
+        fileUri ?? missingUri,
+        charOffset,
+        hasExplicitTypeArguments: false);
     if (identical(parameter.bound, TypeParameter.unsetBoundSentinel)) {
-      parameter.bound = bound?.build(library) ?? objectType;
+      parameter.bound =
+          bound?.build(library, TypeUse.typeParameterBound) ?? objectType;
     }
     // If defaultType is not set, initialize it to dynamic, unless the bound is
     // explicitly specified as Object, in which case defaultType should also be
@@ -194,10 +214,11 @@
     // explicit Object bound results in Object as the instantiated type.
     if (identical(
         parameter.defaultType, TypeParameter.unsetDefaultTypeSentinel)) {
-      parameter.defaultType = defaultType?.build(library) ??
+      parameter.defaultType = defaultType?.build(
+              library, TypeUse.typeParameterDefaultType) ??
           (bound != null && parameter.bound == objectType
               ? objectType
-              : dynamicType.build(library));
+              : dynamicType.build(library, TypeUse.typeParameterDefaultType));
     }
   }
 
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
index 66976b6..b245233 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
@@ -134,20 +134,21 @@
   int get typeVariablesCount => cls.typeParameters.length;
 
   @override
-  List<DartType> buildTypeArguments(
+  List<DartType> buildAliasedTypeArguments(
       LibraryBuilder library, List<TypeBuilder>? arguments) {
     // For performance reasons, [typeVariables] aren't restored from [target].
     // So, if [arguments] is null, the default types should be retrieved from
     // [cls.typeParameters].
     if (arguments == null) {
+      // TODO(johnniwinther): Use i2b here when needed.
       return new List<DartType>.generate(cls.typeParameters.length,
           (int i) => cls.typeParameters[i].defaultType,
           growable: true);
     }
 
     // [arguments] != null
-    return new List<DartType>.generate(
-        arguments.length, (int i) => arguments[i].build(library),
+    return new List<DartType>.generate(arguments.length,
+        (int i) => arguments[i].buildAliased(library, TypeUse.typeArgument),
         growable: true);
   }
 
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
index a1584e3..7c94a5a 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
@@ -282,10 +282,6 @@
   }
 
   void addTypedef(Typedef typedef, Map<Name, Procedure>? tearOffs) {
-    DartType? type = typedef.type;
-    if (type is FunctionType && type.typedefType == null) {
-      unhandled("null", "addTypedef", typedef.fileOffset, typedef.fileUri);
-    }
     _addBuilder(
         typedef.name, new DillTypeAliasBuilder(typedef, tearOffs, this));
   }
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
index 4665e61..bc00908 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
@@ -38,6 +38,8 @@
 
 import '../ticker.dart' show Ticker;
 
+import '../uris.dart';
+
 import 'dill_library_builder.dart' show DillLibraryBuilder;
 
 import 'dill_target.dart' show DillTarget;
@@ -226,6 +228,8 @@
       List<LocatedMessage>? context,
       bool problemOnLibrary: false,
       List<Uri>? involvedFiles}) {
+    assert(
+        fileUri != missingUri, "Message unexpectedly reported on missing uri.");
     severity ??= message.code.severity;
     if (severity == Severity.ignored) return null;
     String trace = """
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
index e777b52..92df2a0 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
@@ -73,12 +73,13 @@
   }
 
   @override
-  List<DartType> buildTypeArguments(
+  List<DartType> buildAliasedTypeArguments(
       LibraryBuilder library, List<TypeBuilder>? arguments) {
     // For performance reasons, [typeVariables] aren't restored from [target].
     // So, if [arguments] is null, the default types should be retrieved from
     // [cls.typeParameters].
     if (arguments == null) {
+      // TODO(johnniwinther): Use i2b here when needed.
       List<DartType> result =
           new List<DartType>.generate(typedef.typeParameters.length, (int i) {
         return typedef.typeParameters[i].defaultType;
@@ -89,7 +90,7 @@
     // [arguments] != null
     List<DartType> result =
         new List<DartType>.generate(arguments.length, (int i) {
-      return arguments[i].build(library);
+      return arguments[i].buildAliased(library, TypeUse.typeArgument);
     }, growable: true);
     return result;
   }
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart
index f786f84..f97e08e 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart
@@ -1346,6 +1346,46 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+        Message Function(
+            DartType _type, DartType _type2, bool isNonNullableByDefault)>
+    templateGenericFunctionTypeAsTypeArgumentThroughTypedef = const Template<
+            Message Function(
+                DartType _type, DartType _type2, bool isNonNullableByDefault)>(
+        problemMessageTemplate:
+            r"""Generic function type '#type' used as a type argument through typedef '#type2'.""",
+        correctionMessageTemplate:
+            r"""Try providing a non-generic function type explicitly.""",
+        withArguments:
+            _withArgumentsGenericFunctionTypeAsTypeArgumentThroughTypedef);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<
+        Message Function(
+            DartType _type, DartType _type2, bool isNonNullableByDefault)>
+    codeGenericFunctionTypeAsTypeArgumentThroughTypedef = const Code<
+            Message Function(
+                DartType _type, DartType _type2, bool isNonNullableByDefault)>(
+        "GenericFunctionTypeAsTypeArgumentThroughTypedef",
+        analyzerCodes: <String>["GENERIC_FUNCTION_CANNOT_BE_TYPE_ARGUMENT"]);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsGenericFunctionTypeAsTypeArgumentThroughTypedef(
+    DartType _type, DartType _type2, bool isNonNullableByDefault) {
+  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
+  List<Object> typeParts = labeler.labelType(_type);
+  List<Object> type2Parts = labeler.labelType(_type2);
+  String type = typeParts.join();
+  String type2 = type2Parts.join();
+  return new Message(codeGenericFunctionTypeAsTypeArgumentThroughTypedef,
+      problemMessage:
+          """Generic function type '${type}' used as a type argument through typedef '${type2}'.""" +
+              labeler.originMessages,
+      correctionMessage: """Try providing a non-generic function type explicitly.""",
+      arguments: {'type': _type, 'type2': _type2});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
     templateGenericFunctionTypeInferredAsActualTypeArgument = const Template<
             Message Function(DartType _type, bool isNonNullableByDefault)>(
@@ -1535,224 +1575,6 @@
 const Template<
         Message Function(DartType _type, DartType _type2, String name,
             String name2, bool isNonNullableByDefault)>
-    templateIncorrectTypeArgumentInReturnType = const Template<
-            Message Function(DartType _type, DartType _type2, String name,
-                String name2, bool isNonNullableByDefault)>(
-        problemMessageTemplate:
-            r"""Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the return type.""",
-        correctionMessageTemplate:
-            r"""Try changing type arguments so that they conform to the bounds.""",
-        withArguments: _withArgumentsIncorrectTypeArgumentInReturnType);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(DartType _type, DartType _type2, String name,
-            String name2, bool isNonNullableByDefault)>
-    codeIncorrectTypeArgumentInReturnType = const Code<
-            Message Function(DartType _type, DartType _type2, String name,
-                String name2, bool isNonNullableByDefault)>(
-        "IncorrectTypeArgumentInReturnType",
-        analyzerCodes: <String>["TYPE_ARGUMENT_NOT_MATCHING_BOUNDS"]);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsIncorrectTypeArgumentInReturnType(DartType _type,
-    DartType _type2, String name, String name2, bool isNonNullableByDefault) {
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  List<Object> type2Parts = labeler.labelType(_type2);
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  if (name2.isEmpty) throw 'No name provided';
-  name2 = demangleMixinApplicationName(name2);
-  String type = typeParts.join();
-  String type2 = type2Parts.join();
-  return new Message(codeIncorrectTypeArgumentInReturnType,
-      problemMessage:
-          """Type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${name2}' in the return type.""" +
-              labeler.originMessages,
-      correctionMessage: """Try changing type arguments so that they conform to the bounds.""",
-      arguments: {
-        'type': _type,
-        'type2': _type2,
-        'name': name,
-        'name2': name2
-      });
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-        Message Function(
-            DartType _type,
-            DartType _type2,
-            String name,
-            String name2,
-            String name3,
-            String name4,
-            bool isNonNullableByDefault)>
-    templateIncorrectTypeArgumentInSupertype = const Template<
-            Message Function(
-                DartType _type,
-                DartType _type2,
-                String name,
-                String name2,
-                String name3,
-                String name4,
-                bool isNonNullableByDefault)>(
-        problemMessageTemplate:
-            r"""Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the supertype '#name3' of class '#name4'.""",
-        correctionMessageTemplate:
-            r"""Try changing type arguments so that they conform to the bounds.""",
-        withArguments: _withArgumentsIncorrectTypeArgumentInSupertype);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(
-            DartType _type,
-            DartType _type2,
-            String name,
-            String name2,
-            String name3,
-            String name4,
-            bool isNonNullableByDefault)> codeIncorrectTypeArgumentInSupertype =
-    const Code<
-            Message Function(
-                DartType _type,
-                DartType _type2,
-                String name,
-                String name2,
-                String name3,
-                String name4,
-                bool isNonNullableByDefault)>(
-        "IncorrectTypeArgumentInSupertype",
-        analyzerCodes: <String>["TYPE_ARGUMENT_NOT_MATCHING_BOUNDS"]);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsIncorrectTypeArgumentInSupertype(
-    DartType _type,
-    DartType _type2,
-    String name,
-    String name2,
-    String name3,
-    String name4,
-    bool isNonNullableByDefault) {
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  List<Object> type2Parts = labeler.labelType(_type2);
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  if (name2.isEmpty) throw 'No name provided';
-  name2 = demangleMixinApplicationName(name2);
-  if (name3.isEmpty) throw 'No name provided';
-  name3 = demangleMixinApplicationName(name3);
-  if (name4.isEmpty) throw 'No name provided';
-  name4 = demangleMixinApplicationName(name4);
-  String type = typeParts.join();
-  String type2 = type2Parts.join();
-  return new Message(codeIncorrectTypeArgumentInSupertype,
-      problemMessage:
-          """Type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${name2}' in the supertype '${name3}' of class '${name4}'.""" +
-              labeler.originMessages,
-      correctionMessage:
-          """Try changing type arguments so that they conform to the bounds.""",
-      arguments: {
-        'type': _type,
-        'type2': _type2,
-        'name': name,
-        'name2': name2,
-        'name3': name3,
-        'name4': name4
-      });
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-        Message Function(
-            DartType _type,
-            DartType _type2,
-            String name,
-            String name2,
-            String name3,
-            String name4,
-            bool isNonNullableByDefault)>
-    templateIncorrectTypeArgumentInSupertypeInferred = const Template<
-            Message Function(
-                DartType _type,
-                DartType _type2,
-                String name,
-                String name2,
-                String name3,
-                String name4,
-                bool isNonNullableByDefault)>(
-        problemMessageTemplate:
-            r"""Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the supertype '#name3' of class '#name4'.""",
-        correctionMessageTemplate:
-            r"""Try specifying type arguments explicitly so that they conform to the bounds.""",
-        withArguments: _withArgumentsIncorrectTypeArgumentInSupertypeInferred);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(
-            DartType _type,
-            DartType _type2,
-            String name,
-            String name2,
-            String name3,
-            String name4,
-            bool isNonNullableByDefault)>
-    codeIncorrectTypeArgumentInSupertypeInferred = const Code<
-            Message Function(
-                DartType _type,
-                DartType _type2,
-                String name,
-                String name2,
-                String name3,
-                String name4,
-                bool isNonNullableByDefault)>(
-        "IncorrectTypeArgumentInSupertypeInferred",
-        analyzerCodes: <String>["TYPE_ARGUMENT_NOT_MATCHING_BOUNDS"]);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsIncorrectTypeArgumentInSupertypeInferred(
-    DartType _type,
-    DartType _type2,
-    String name,
-    String name2,
-    String name3,
-    String name4,
-    bool isNonNullableByDefault) {
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  List<Object> type2Parts = labeler.labelType(_type2);
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  if (name2.isEmpty) throw 'No name provided';
-  name2 = demangleMixinApplicationName(name2);
-  if (name3.isEmpty) throw 'No name provided';
-  name3 = demangleMixinApplicationName(name3);
-  if (name4.isEmpty) throw 'No name provided';
-  name4 = demangleMixinApplicationName(name4);
-  String type = typeParts.join();
-  String type2 = type2Parts.join();
-  return new Message(codeIncorrectTypeArgumentInSupertypeInferred,
-      problemMessage:
-          """Inferred type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${name2}' in the supertype '${name3}' of class '${name4}'.""" +
-              labeler.originMessages,
-      correctionMessage:
-          """Try specifying type arguments explicitly so that they conform to the bounds.""",
-      arguments: {
-        'type': _type,
-        'type2': _type2,
-        'name': name,
-        'name2': name2,
-        'name3': name3,
-        'name4': name4
-      });
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-        Message Function(DartType _type, DartType _type2, String name,
-            String name2, bool isNonNullableByDefault)>
     templateIncorrectTypeArgumentInferred = const Template<
             Message Function(DartType _type, DartType _type2, String name,
                 String name2, bool isNonNullableByDefault)>(
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index e193567..ef54d70 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -135,6 +135,8 @@
 
 import 'util/textual_outline.dart' show textualOutline;
 
+import 'uris.dart' show dartCore;
+
 import 'hybrid_file_system.dart' show HybridFileSystem;
 
 import 'kernel/hierarchy/hierarchy_builder.dart' show ClassHierarchyBuilder;
@@ -655,7 +657,7 @@
           dillLibraryBuilder.exportScope.lookupLocalMember(name, setter: false);
       if (dillBuilder == null) {
         if ((name == 'dynamic' || name == 'Never') &&
-            sourceLibraryBuilder.importUri == Uri.parse('dart:core')) {
+            sourceLibraryBuilder.importUri == dartCore) {
           // The source library builder for dart:core has synthetically
           // injected builders for `dynamic` and `Never` which do not have
           // corresponding classes in the AST.
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index a5fac56..6f25365 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -85,7 +85,7 @@
 import '../source/source_factory_builder.dart';
 import '../source/source_field_builder.dart';
 import '../source/source_function_builder.dart';
-import '../source/source_library_builder.dart' show SourceLibraryBuilder;
+import '../source/source_library_builder.dart';
 import '../source/source_procedure_builder.dart';
 import '../source/stack_listener_impl.dart'
     show StackListenerImpl, offsetForToken;
@@ -1010,7 +1010,8 @@
       // `invalid-type`.
       TypeBuilder? type = pop() as TypeBuilder?;
       if (type != null) {
-        buildDartType(type, allowPotentiallyConstantType: false);
+        buildDartType(type, TypeUse.fieldType,
+            allowPotentiallyConstantType: false);
       }
     }
     pop(); // Annotations.
@@ -1030,7 +1031,7 @@
     _unaliasTypeAliasedConstructorInvocations();
     _unaliasTypeAliasedFactoryInvocations(typeAliasedFactoryInvocations);
     _resolveRedirectingFactoryTargets(redirectingFactoryInvocations);
-    libraryBuilder.checkUncheckedTypedefTypes(typeEnvironment);
+    libraryBuilder.checkPendingBoundsChecks(typeEnvironment);
     if (hasDelayedActions) {
       assert(
           delayedActionPerformers != null,
@@ -2193,7 +2194,7 @@
       assert(forest.argumentsTypeArguments(arguments).isEmpty);
       forest.argumentsSetTypeArguments(
           arguments,
-          buildDartTypeArguments(typeArguments,
+          buildDartTypeArguments(typeArguments, TypeUse.invocationTypeArgument,
               allowPotentiallyConstantType: false));
     } else {
       assert(typeArguments == null ||
@@ -3280,8 +3281,6 @@
       ..fileOffset = identifier.charOffset
       ..fileEqualsOffset = offsetForToken(equalsToken);
     typeInferrer.assignedVariables.declare(variable);
-    libraryBuilder.checkBoundsInVariableDeclaration(
-        variable, typeEnvironment, uri);
     push(variable);
   }
 
@@ -3363,7 +3362,8 @@
     }
     TypeBuilder? unresolvedType = pop(NullValue.TypeBuilder) as TypeBuilder?;
     DartType? type = unresolvedType != null
-        ? buildDartType(unresolvedType, allowPotentiallyConstantType: false)
+        ? buildDartType(unresolvedType, TypeUse.variableType,
+            allowPotentiallyConstantType: false)
         : null;
     int modifiers = (lateToken != null ? lateMask : 0) |
         Modifier.validateVarFinalOrConst(varFinalOrConst?.lexeme);
@@ -3805,7 +3805,8 @@
             lengthOfSpan(leftBracket, leftBracket.endGroup));
         typeArgument = const InvalidType();
       } else {
-        typeArgument = buildDartType(typeArguments.single,
+        typeArgument = buildDartType(
+            typeArguments.single, TypeUse.literalTypeArgument,
             allowPotentiallyConstantType: false);
         typeArgument = instantiateToBounds(
             typeArgument, coreTypes.objectClass, libraryBuilder.library);
@@ -3822,7 +3823,6 @@
         expressions,
         isConst: constKeyword != null ||
             constantContext == ConstantContext.inferred);
-    libraryBuilder.checkBoundsInListLiteral(node, typeEnvironment, uri);
     push(node);
   }
 
@@ -3830,7 +3830,8 @@
       Token leftBrace, List<dynamic>? setOrMapEntries) {
     DartType typeArgument;
     if (typeArguments != null) {
-      typeArgument = buildDartType(typeArguments.single,
+      typeArgument = buildDartType(
+          typeArguments.single, TypeUse.literalTypeArgument,
           allowPotentiallyConstantType: false);
       typeArgument = instantiateToBounds(
           typeArgument, coreTypes.objectClass, libraryBuilder.library);
@@ -3861,7 +3862,6 @@
         expressions,
         isConst: constKeyword != null ||
             constantContext == ConstantContext.inferred);
-    libraryBuilder.checkBoundsInSetLiteral(node, typeEnvironment, uri);
     push(node);
   }
 
@@ -3971,9 +3971,9 @@
         keyType = const InvalidType();
         valueType = const InvalidType();
       } else {
-        keyType = buildDartType(typeArguments[0],
+        keyType = buildDartType(typeArguments[0], TypeUse.literalTypeArgument,
             allowPotentiallyConstantType: false);
-        valueType = buildDartType(typeArguments[1],
+        valueType = buildDartType(typeArguments[1], TypeUse.literalTypeArgument,
             allowPotentiallyConstantType: false);
         keyType = instantiateToBounds(
             keyType, coreTypes.objectClass, libraryBuilder.library);
@@ -3995,7 +3995,6 @@
         entries,
         isConst: constKeyword != null ||
             constantContext == ConstantContext.inferred);
-    libraryBuilder.checkBoundsInMapLiteral(node, typeEnvironment, uri);
     push(node);
   }
 
@@ -4222,10 +4221,8 @@
   @override
   void handleAsOperator(Token operator) {
     debugEvent("AsOperator");
-    DartType type = buildDartType(pop() as TypeBuilder,
+    DartType type = buildDartType(pop() as TypeBuilder, TypeUse.asType,
         allowPotentiallyConstantType: libraryBuilder.isNonNullableByDefault);
-    libraryBuilder.checkBoundsInType(
-        type, typeEnvironment, uri, operator.charOffset);
     Expression expression = popForValue();
     Expression asExpression = forest.createAsExpression(
         offsetForToken(operator), expression, type,
@@ -4246,15 +4243,13 @@
   @override
   void handleIsOperator(Token isOperator, Token? not) {
     debugEvent("IsOperator");
-    DartType type = buildDartType(pop() as TypeBuilder,
+    DartType type = buildDartType(pop() as TypeBuilder, TypeUse.isType,
         allowPotentiallyConstantType: libraryBuilder.isNonNullableByDefault);
     Expression operand = popForValue();
     Expression isExpression = forest.createIsExpression(
         offsetForToken(isOperator), operand, type,
         forNonNullableByDefault: libraryBuilder.isNonNullableByDefault,
         notFileOffset: not != null ? offsetForToken(not) : null);
-    libraryBuilder.checkBoundsInType(
-        type, typeEnvironment, uri, isOperator.charOffset);
     push(isExpression);
   }
 
@@ -4351,16 +4346,6 @@
     }
     Object? nameNode = pop();
     TypeBuilder? type = pop() as TypeBuilder?;
-    if (functionNestingLevel == 0 && type != null) {
-      // TODO(ahe): The type we compute here may be different from what is
-      // computed in the outline phase. We should make sure that the outline
-      // phase computes the same type. See
-      // pkg/front_end/testcases/deferred_type_annotation.dart for an example
-      // where not calling [buildDartType] leads to a missing compile-time
-      // error. Also, notice that the type of the problematic parameter isn't
-      // `invalid-type`.
-      buildDartType(type, allowPotentiallyConstantType: false);
-    }
     Token? varOrFinalOrConst = pop(NullValue.Token) as Token?;
     if (superKeyword != null &&
         varOrFinalOrConst != null &&
@@ -4569,7 +4554,7 @@
         popIfNotNull(onKeyword) as TypeBuilder?;
     DartType exceptionType;
     if (unresolvedExceptionType != null) {
-      exceptionType = buildDartType(unresolvedExceptionType,
+      exceptionType = buildDartType(unresolvedExceptionType, TypeUse.catchType,
           allowPotentiallyConstantType: false);
     } else {
       exceptionType = (libraryBuilder.isNonNullableByDefault
@@ -5285,7 +5270,7 @@
         receiver = forest.createInstantiation(
             instantiationOffset,
             receiver,
-            buildDartTypeArguments(typeArguments,
+            buildDartTypeArguments(typeArguments, TypeUse.tearOffTypeArgument,
                 allowPotentiallyConstantType: true));
       }
       return forest.createMethodInvocation(invocationOffset, receiver,
@@ -5295,7 +5280,8 @@
         assert(forest.argumentsTypeArguments(arguments).isEmpty);
         forest.argumentsSetTypeArguments(
             arguments,
-            buildDartTypeArguments(typeArguments,
+            buildDartTypeArguments(
+                typeArguments, TypeUse.constructorTypeArgument,
                 allowPotentiallyConstantType: false));
       }
       return buildUnresolvedError(
@@ -5437,7 +5423,8 @@
             }
             List<DartType> dartTypeArguments = [];
             for (TypeBuilder typeBuilder in unaliasedTypeArgumentBuilders) {
-              dartTypeArguments.add(typeBuilder.build(libraryBuilder));
+              dartTypeArguments.add(typeBuilder.build(
+                  libraryBuilder, TypeUse.constructorTypeArgument));
             }
             assert(forest.argumentsTypeArguments(arguments).isEmpty);
             forest.argumentsSetTypeArguments(arguments, dartTypeArguments);
@@ -5452,8 +5439,8 @@
             typeArgumentBuilders.length, const DynamicType(),
             growable: false);
         for (int i = 0; i < typeArgumentsToCheck.length; ++i) {
-          typeArgumentsToCheck[i] =
-              typeArgumentBuilders[i].build(libraryBuilder);
+          typeArgumentsToCheck[i] = typeArgumentBuilders[i]
+              .build(libraryBuilder, TypeUse.constructorTypeArgument);
         }
       }
       DartType typeToCheck = new TypedefType(
@@ -5491,7 +5478,8 @@
           }
           List<DartType> dartTypeArguments = [];
           for (TypeBuilder typeBuilder in unaliasedTypeArgumentBuilders) {
-            dartTypeArguments.add(typeBuilder.build(libraryBuilder));
+            dartTypeArguments.add(typeBuilder.build(
+                libraryBuilder, TypeUse.constructorTypeArgument));
           }
           assert(forest.argumentsTypeArguments(arguments).isEmpty);
           forest.argumentsSetTypeArguments(arguments, dartTypeArguments);
@@ -5505,8 +5493,8 @@
               // No type arguments provided to unaliased class, use defaults.
               List<DartType> result = new List<DartType>.generate(
                   cls.typeVariables!.length,
-                  (int i) => cls.typeVariables![i].defaultType!
-                      .build(cls.libraryBuilder),
+                  (int i) => cls.typeVariables![i].defaultType!.build(
+                      cls.libraryBuilder, TypeUse.constructorTypeArgument),
                   growable: true);
               forest.argumentsSetTypeArguments(arguments, result);
             }
@@ -5518,7 +5506,8 @@
         assert(forest.argumentsTypeArguments(arguments).isEmpty);
         forest.argumentsSetTypeArguments(
             arguments,
-            buildDartTypeArguments(typeArguments,
+            buildDartTypeArguments(
+                typeArguments, TypeUse.constructorTypeArgument,
                 allowPotentiallyConstantType: false));
       }
     }
@@ -7195,7 +7184,7 @@
       } else {
         push(new Instantiation(
             toValue(operand),
-            buildDartTypeArguments(typeArguments,
+            buildDartTypeArguments(typeArguments, TypeUse.tearOffTypeArgument,
                 allowPotentiallyConstantType: true))
           ..fileOffset = openAngleBracket.charOffset);
       }
@@ -7425,20 +7414,28 @@
   }
 
   @override
-  DartType buildDartType(TypeBuilder typeBuilder,
+  DartType buildDartType(TypeBuilder typeBuilder, TypeUse typeUse,
       {required bool allowPotentiallyConstantType}) {
     return validateTypeVariableUse(typeBuilder,
             allowPotentiallyConstantType: allowPotentiallyConstantType)
-        .build(libraryBuilder);
+        .build(libraryBuilder, typeUse);
+  }
+
+  DartType buildAliasedDartType(TypeBuilder typeBuilder, TypeUse typeUse,
+      {required bool allowPotentiallyConstantType}) {
+    return validateTypeVariableUse(typeBuilder,
+            allowPotentiallyConstantType: allowPotentiallyConstantType)
+        .buildAliased(libraryBuilder, typeUse);
   }
 
   @override
-  List<DartType> buildDartTypeArguments(List<TypeBuilder>? unresolvedTypes,
+  List<DartType> buildDartTypeArguments(
+      List<TypeBuilder>? unresolvedTypes, TypeUse typeUse,
       {required bool allowPotentiallyConstantType}) {
     if (unresolvedTypes == null) return <DartType>[];
     return new List<DartType>.generate(
         unresolvedTypes.length,
-        (int i) => buildDartType(unresolvedTypes[i],
+        (int i) => buildDartType(unresolvedTypes[i], typeUse,
             allowPotentiallyConstantType: allowPotentiallyConstantType),
         growable: true);
   }
@@ -7652,9 +7649,12 @@
       AsyncMarker asyncModifier,
       Statement body,
       int fileEndOffset) {
+    // TODO(johnniwinther): Avoid creating a FunctionTypeBuilder to create
+    // the function. The function type is not written as a type by the user
+    // and shouldn't be checked as such.
     FunctionType type = toFunctionType(
             returnType, const NullabilityBuilder.omitted(), typeParameters)
-        .build(library) as FunctionType;
+        .build(library, TypeUse.functionSignature) as FunctionType;
     List<VariableDeclaration> positionalParameters = <VariableDeclaration>[];
     List<VariableDeclaration> namedParameters = <VariableDeclaration>[];
     if (parameters != null) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index 927fca16..4d0d98c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -11,6 +11,7 @@
 import 'package:_fe_analyzer_shared/src/scanner/token.dart' show Token;
 
 import 'package:kernel/ast.dart';
+import 'package:kernel/src/unaliasing.dart';
 import 'package:kernel/text/ast_to_text.dart';
 import 'package:kernel/type_algebra.dart';
 
@@ -56,7 +57,6 @@
 
 import '../scope.dart';
 
-import '../source/source_library_builder.dart';
 import '../source/stack_listener_impl.dart' show offsetForToken;
 
 import 'body_builder.dart' show noLocation;
@@ -261,7 +261,8 @@
       int fileOffset, List<TypeBuilder>? typeArguments) {
     return new Instantiation(
         buildSimpleRead(),
-        _helper.buildDartTypeArguments(typeArguments,
+        _helper.buildDartTypeArguments(
+            typeArguments, TypeUse.tearOffTypeArgument,
             allowPotentiallyConstantType: true))
       ..fileOffset = fileOffset;
   }
@@ -2920,7 +2921,7 @@
       int charOffset = offsetForToken(prefixGenerator.token);
       message = templateDeferredTypeAnnotation
           .withArguments(
-              _helper.buildDartType(type,
+              _helper.buildDartType(type, TypeUse.deferredTypeError,
                   allowPotentiallyConstantType: allowPotentiallyConstantType),
               prefixGenerator._plainNameForRead,
               _helper.libraryBuilder.isNonNullableByDefault)
@@ -3084,6 +3085,7 @@
                 buildTypeWithResolvedArguments(
                     _helper.libraryBuilder.nonNullableBuilder, typeArguments,
                     allowPotentiallyConstantType: true, forTypeLiteral: true),
+                TypeUse.typeLiteral,
                 allowPotentiallyConstantType:
                     _helper.libraryFeatures.constructorTearoffs.isEnabled));
       }
@@ -3127,14 +3129,15 @@
       } else {
         if (declarationBuilder is DeclarationBuilder) {
           if (aliasedTypeArguments != null) {
-            _helper.libraryBuilder.uncheckedTypedefTypes.add(
-                new UncheckedTypedefType(new TypedefType(
-                    aliasBuilder.typedef,
-                    _helper.libraryBuilder.nonNullable,
-                    aliasBuilder.buildTypeArguments(
-                        _helper.libraryBuilder, aliasedTypeArguments)))
-                  ..fileUri = _uri
-                  ..offset = fileOffset);
+            new NamedTypeBuilder(
+                aliasBuilder.name, const NullabilityBuilder.omitted(),
+                arguments: aliasedTypeArguments,
+                fileUri: _uri,
+                charOffset: fileOffset,
+                instanceTypeVariableAccess:
+                    _helper.instanceTypeVariableAccessState)
+              ..bind(_helper.libraryBuilder, aliasBuilder)
+              ..build(_helper.libraryBuilder, TypeUse.instantiation);
           }
 
           // If the arguments weren't supplied, the tear off is treated as
@@ -3225,12 +3228,15 @@
                     builtTypeArguments.add(typeParameter.defaultType);
                   }
                 } else {
-                  builtTypeArguments = declarationBuilder.buildTypeArguments(
-                      _helper.libraryBuilder, unaliasedTypeArguments);
+                  builtTypeArguments = unaliasTypes(
+                      declarationBuilder.buildAliasedTypeArguments(
+                          _helper.libraryBuilder, unaliasedTypeArguments),
+                      legacyEraseAliases:
+                          !_helper.libraryBuilder.isNonNullableByDefault)!;
                 }
               } else if (typeArguments != null) {
                 builtTypeArguments = _helper.buildDartTypeArguments(
-                    typeArguments,
+                    typeArguments, TypeUse.tearOffTypeArgument,
                     allowPotentiallyConstantType: true);
               }
               if (isGenericTypedefTearOff) {
@@ -3262,6 +3268,10 @@
                         .add(freshTypeParameters.substitute(builtTypeArgument));
                   }
                 }
+                substitutedTypeArguments = unaliasTypes(
+                    substitutedTypeArguments,
+                    legacyEraseAliases:
+                        !_helper.libraryBuilder.isNonNullableByDefault);
 
                 tearOffExpression = _helper.forest.createTypedefTearOff(
                     token.charOffset,
@@ -3271,6 +3281,10 @@
               } else {
                 if (builtTypeArguments != null &&
                     builtTypeArguments.isNotEmpty) {
+                  builtTypeArguments = unaliasTypes(builtTypeArguments,
+                      legacyEraseAliases:
+                          !_helper.libraryBuilder.isNonNullableByDefault)!;
+
                   tearOffExpression = _helper.forest.createInstantiation(
                       token.charOffset, tearOffExpression, builtTypeArguments);
                 }
@@ -3672,7 +3686,8 @@
       assert(_forest.argumentsTypeArguments(arguments).isEmpty);
       _forest.argumentsSetTypeArguments(
           arguments,
-          _helper.buildDartTypeArguments(typeArguments,
+          _helper.buildDartTypeArguments(
+              typeArguments, TypeUse.constructorTypeArgument,
               allowPotentiallyConstantType: false));
     }
     return buildError(arguments, kind: UnresolvedKind.Constructor);
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
index 41ab864..b10a3ff 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
@@ -150,10 +150,11 @@
   Expression evaluateArgumentsBefore(
       Arguments arguments, Expression expression);
 
-  DartType buildDartType(TypeBuilder typeBuilder,
+  DartType buildDartType(TypeBuilder typeBuilder, TypeUse typeUse,
       {required bool allowPotentiallyConstantType});
 
-  List<DartType> buildDartTypeArguments(List<TypeBuilder>? typeArguments,
+  List<DartType> buildDartTypeArguments(
+      List<TypeBuilder>? typeArguments, TypeUse typeUse,
       {required bool allowPotentiallyConstantType});
 
   void reportDuplicatedDeclaration(
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index 6debbc9..dd68ba0 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -18,7 +18,7 @@
 import '../fasta_codes.dart';
 import '../names.dart';
 import '../problems.dart' show unhandled;
-import '../source/source_library_builder.dart' show SourceLibraryBuilder;
+import '../source/source_library_builder.dart';
 import '../type_inference/type_constraint_gatherer.dart';
 import '../type_inference/type_inference_engine.dart';
 import '../type_inference/type_inferrer.dart';
@@ -274,8 +274,7 @@
         resultType.returnType, resultType.declaredNullability,
         namedParameters: resultType.namedParameters,
         typeParameters: freshTypeParameters.freshTypeParameters,
-        requiredParameterCount: resultType.requiredParameterCount,
-        typedefType: null);
+        requiredParameterCount: resultType.requiredParameterCount);
     ExpressionInferenceResult inferredResult =
         inferrer.instantiateTearOff(resultType, typeContext, node);
     return inferrer.ensureAssignableResult(typeContext, inferredResult);
@@ -1397,8 +1396,6 @@
       inferrer.dataForTesting!.typeInferenceResult.inferredVariableTypes[node] =
           inferredType.returnType;
     }
-    inferrer.libraryBuilder.checkBoundsInFunctionNode(node.function,
-        inferrer.typeSchemaEnvironment, inferrer.libraryBuilder.fileUri);
     node.variable.type = inferredType;
     inferrer.flowAnalysis.functionExpression_end();
     return const StatementInferenceResult();
@@ -1414,11 +1411,6 @@
       inferrer.dataForTesting!.typeInferenceResult.inferredVariableTypes[node] =
           inferredType.returnType;
     }
-    // In anonymous functions the return type isn't declared, so
-    // it shouldn't be checked.
-    inferrer.libraryBuilder.checkBoundsInFunctionNode(node.function,
-        inferrer.typeSchemaEnvironment, inferrer.libraryBuilder.fileUri,
-        skipReturnType: true);
     inferrer.flowAnalysis.functionExpression_end();
     return new ExpressionInferenceResult(inferredType, node);
   }
@@ -2088,9 +2080,10 @@
     if (!inferrer.isTopLevel) {
       SourceLibraryBuilder library = inferrer.libraryBuilder;
       if (inferenceNeeded) {
-        library.checkBoundsInListLiteral(
-            node, inferrer.typeSchemaEnvironment, inferrer.helper!.uri,
-            inferred: true);
+        if (!library.libraryFeatures.genericMetadata.isEnabled) {
+          inferrer.checkGenericFunctionTypeArgument(
+              node.typeArgument, node.fileOffset);
+        }
       }
     }
 
@@ -2885,9 +2878,12 @@
       // Either both [_declaredKeyType] and [_declaredValueType] are omitted or
       // none of them, so we may just check one.
       if (inferenceNeeded) {
-        library.checkBoundsInMapLiteral(
-            node, inferrer.typeSchemaEnvironment, inferrer.helper!.uri,
-            inferred: true);
+        if (!library.libraryFeatures.genericMetadata.isEnabled) {
+          inferrer.checkGenericFunctionTypeArgument(
+              node.keyType, node.fileOffset);
+          inferrer.checkGenericFunctionTypeArgument(
+              node.valueType, node.fileOffset);
+        }
       }
     }
     return new ExpressionInferenceResult(inferredType, node);
@@ -6032,9 +6028,10 @@
     if (!inferrer.isTopLevel) {
       SourceLibraryBuilder library = inferrer.libraryBuilder;
       if (inferenceNeeded) {
-        library.checkBoundsInSetLiteral(
-            node, inferrer.typeSchemaEnvironment, inferrer.helper!.uri,
-            inferred: true);
+        if (!library.libraryFeatures.genericMetadata.isEnabled) {
+          inferrer.checkGenericFunctionTypeArgument(
+              node.typeArgument, node.fileOffset);
+        }
       }
 
       if (!library.loader.target.backendTarget.supportsSetLiterals) {
@@ -6453,13 +6450,6 @@
       TypeLiteral node, DartType typeContext) {
     DartType inferredType =
         inferrer.coreTypes.typeRawType(inferrer.libraryBuilder.nonNullable);
-    if (inferrer.libraryFeatures.constructorTearoffs.isEnabled) {
-      inferrer.libraryBuilder.checkBoundsInType(
-          node.type,
-          inferrer.typeSchemaEnvironment,
-          inferrer.libraryBuilder.fileUri,
-          node.fileOffset);
-    }
     return new ExpressionInferenceResult(inferredType, node);
   }
 
@@ -6592,14 +6582,6 @@
       Expression initializer = initializerResult.expression;
       node.initializer = initializer..parent = node;
     }
-    if (!inferrer.isTopLevel) {
-      SourceLibraryBuilder library = inferrer.libraryBuilder;
-      if (node.isImplicitlyTyped) {
-        library.checkBoundsInVariableDeclaration(
-            node, inferrer.typeSchemaEnvironment, inferrer.helper!.uri,
-            inferred: true);
-      }
-    }
     if (node.isLate &&
         inferrer.libraryBuilder.loader.target.backendTarget
             .isLateLocalLoweringEnabled(
diff --git a/pkg/front_end/lib/src/fasta/kernel/invalid_type.dart b/pkg/front_end/lib/src/fasta/kernel/invalid_type.dart
index 0d49a4e..c2759d1 100644
--- a/pkg/front_end/lib/src/fasta/kernel/invalid_type.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/invalid_type.dart
@@ -89,9 +89,6 @@
     for (NamedType parameter in node.namedParameters) {
       if (parameter.type.accept1(this, visitedTypedefs)) return true;
     }
-    if (node.typedefType != null && visitedTypedefs.add(node.typedefType!)) {
-      if (node.typedefType!.accept1(this, visitedTypedefs)) return true;
-    }
     return false;
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro/identifiers.dart b/pkg/front_end/lib/src/fasta/kernel/macro/identifiers.dart
index 1ecd8aa..75daa98 100644
--- a/pkg/front_end/lib/src/fasta/kernel/macro/identifiers.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/macro/identifiers.dart
@@ -16,6 +16,7 @@
 import '../../builder/type_alias_builder.dart';
 import '../../builder/type_builder.dart';
 import '../../builder/type_declaration_builder.dart';
+import '../../uris.dart';
 import 'macro.dart';
 
 abstract class IdentifierImpl extends macro.IdentifierImpl {
@@ -41,7 +42,7 @@
       } else if (typeDeclarationBuilder is TypeAliasBuilder) {
         uri = typeDeclarationBuilder.libraryBuilder.importUri;
       } else if (name == 'dynamic') {
-        uri = Uri.parse('dart:core');
+        uri = dartCore;
       }
       return new macro.ResolvedIdentifier(
           kind: macro.IdentifierKind.topLevelMember,
@@ -88,8 +89,16 @@
   @override
   DartType buildType(
       NullabilityBuilder nullabilityBuilder, List<DartType> typeArguments) {
-    return typeBuilder.declaration!.buildTypeWithBuiltArguments(libraryBuilder,
-        nullabilityBuilder.build(libraryBuilder), typeArguments);
+    return typeBuilder.declaration!.buildAliasedTypeWithBuiltArguments(
+        libraryBuilder,
+        nullabilityBuilder.build(libraryBuilder),
+        typeArguments,
+        TypeUse.macroTypeArgument,
+        // TODO(johnniwinther): How should handle malbounded types here? Should
+        // we report an error on the annotation?
+        missingUri,
+        TreeNode.noOffset,
+        hasExplicitTypeArguments: true);
   }
 
   @override
@@ -124,8 +133,16 @@
   @override
   DartType buildType(
       NullabilityBuilder nullabilityBuilder, List<DartType> typeArguments) {
-    return typeDeclarationBuilder.buildTypeWithBuiltArguments(libraryBuilder,
-        nullabilityBuilder.build(libraryBuilder), typeArguments);
+    return typeDeclarationBuilder.buildAliasedTypeWithBuiltArguments(
+        libraryBuilder,
+        nullabilityBuilder.build(libraryBuilder),
+        typeArguments,
+        TypeUse.macroTypeArgument,
+        // TODO(johnniwinther): How should handle malbounded types here? Should
+        // we report an error on the annotation?
+        missingUri,
+        TreeNode.noOffset,
+        hasExplicitTypeArguments: true);
   }
 }
 
@@ -219,7 +236,7 @@
         kind: macro.IdentifierKind.topLevelMember,
         name: name,
         staticScope: null,
-        uri: Uri.parse('dart:core'));
+        uri: dartCore);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index fda68ec..9039e6a 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -56,7 +56,7 @@
 import 'source_constructor_builder.dart';
 import 'source_factory_builder.dart';
 import 'source_field_builder.dart';
-import 'source_library_builder.dart' show SourceLibraryBuilder;
+import 'source_library_builder.dart';
 import 'source_member_builder.dart';
 
 Class initializeClass(
@@ -523,15 +523,22 @@
   int get typeVariablesCount => typeVariables?.length ?? 0;
 
   @override
-  List<DartType> buildTypeArguments(
+  List<DartType> buildAliasedTypeArguments(
       LibraryBuilder library, List<TypeBuilder>? arguments) {
     if (arguments == null && typeVariables == null) {
       return <DartType>[];
     }
 
     if (arguments == null && typeVariables != null) {
-      List<DartType> result = new List<DartType>.generate(typeVariables!.length,
-          (int i) => typeVariables![i].defaultType!.build(library),
+      // TODO(johnniwinther): Use i2b here when needed.
+      List<DartType> result = new List<DartType>.generate(
+          typeVariables!.length,
+          (int i) => typeVariables![i]
+              .defaultType!
+              // TODO(johnniwinther): Using [libraryBuilder] here instead of
+              // [library] preserves the nullability of the original
+              // declaration. Should we legacy erase this?
+              .buildAliased(libraryBuilder, TypeUse.defaultTypeAsTypeArgument),
           growable: true);
       if (library is SourceLibraryBuilder) {
         library.inferredTypes.addAll(result);
@@ -551,8 +558,8 @@
     }
 
     assert(arguments!.length == typeVariablesCount);
-    List<DartType> result = new List<DartType>.generate(
-        arguments!.length, (int i) => arguments[i].build(library),
+    List<DartType> result = new List<DartType>.generate(arguments!.length,
+        (int i) => arguments[i].buildAliased(library, TypeUse.typeArgument),
         growable: true);
     return result;
   }
@@ -1321,99 +1328,7 @@
     }
   }
 
-  void checkBoundsInSupertype(
-      Supertype supertype, TypeEnvironment typeEnvironment) {
-    Library library = libraryBuilder.library;
-
-    List<TypeArgumentIssue> issues = findTypeArgumentIssues(
-        new InterfaceType(
-            supertype.classNode, library.nonNullable, supertype.typeArguments),
-        typeEnvironment,
-        libraryBuilder.isNonNullableByDefault
-            ? SubtypeCheckMode.withNullabilities
-            : SubtypeCheckMode.ignoringNullabilities,
-        allowSuperBounded: false,
-        isNonNullableByDefault: library.isNonNullableByDefault,
-        areGenericArgumentsAllowed:
-            libraryBuilder.libraryFeatures.genericMetadata.isEnabled);
-    for (TypeArgumentIssue issue in issues) {
-      DartType argument = issue.argument;
-      TypeParameter typeParameter = issue.typeParameter;
-      bool inferred = libraryBuilder.inferredTypes.contains(argument);
-      if (issue.isGenericTypeAsArgumentIssue) {
-        if (inferred) {
-          // Supertype can't be or contain super-bounded types, so null is
-          // passed for super-bounded hint here.
-          libraryBuilder.reportTypeArgumentIssue(
-              templateGenericFunctionTypeInferredAsActualTypeArgument
-                  .withArguments(argument, library.isNonNullableByDefault),
-              fileUri,
-              charOffset,
-              typeParameter: null,
-              superBoundedAttempt: null,
-              superBoundedAttemptInverted: null);
-        } else {
-          // Supertype can't be or contain super-bounded types, so null is
-          // passed for super-bounded hint here.
-          libraryBuilder.reportTypeArgumentIssue(
-              messageGenericFunctionTypeUsedAsActualTypeArgument,
-              fileUri,
-              charOffset,
-              typeParameter: null,
-              superBoundedAttempt: null,
-              superBoundedAttemptInverted: null);
-        }
-      } else {
-        void reportProblem(
-            Template<
-                    Message Function(DartType, DartType, String, String, String,
-                        String, bool)>
-                template) {
-          // Supertype can't be or contain super-bounded types, so null is
-          // passed for super-bounded hint here.
-          libraryBuilder.reportTypeArgumentIssue(
-              template.withArguments(
-                  argument,
-                  typeParameter.bound,
-                  typeParameter.name!,
-                  getGenericTypeName(issue.enclosingType!),
-                  supertype.classNode.name,
-                  name,
-                  library.isNonNullableByDefault),
-              fileUri,
-              charOffset,
-              typeParameter: typeParameter,
-              superBoundedAttempt: null,
-              superBoundedAttemptInverted: null);
-        }
-
-        if (inferred) {
-          reportProblem(templateIncorrectTypeArgumentInSupertypeInferred);
-        } else {
-          reportProblem(templateIncorrectTypeArgumentInSupertype);
-        }
-      }
-    }
-  }
-
   void checkTypesInOutline(TypeEnvironment typeEnvironment) {
-    libraryBuilder.checkBoundsInTypeParameters(
-        typeEnvironment, cls.typeParameters, fileUri);
-
-    // Check in supers.
-    if (cls.supertype != null) {
-      checkBoundsInSupertype(cls.supertype!, typeEnvironment);
-    }
-    if (cls.mixedInType != null) {
-      checkBoundsInSupertype(cls.mixedInType!, typeEnvironment);
-    }
-    // ignore: unnecessary_null_comparison
-    if (cls.implementedTypes != null) {
-      for (Supertype supertype in cls.implementedTypes) {
-        checkBoundsInSupertype(supertype, typeEnvironment);
-      }
-    }
-
     forEach((String name, Builder builder) {
       if (builder is SourceMemberBuilder) {
         builder.checkVariance(this, typeEnvironment);
diff --git a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
index 10a8838..f2812d0 100644
--- a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
@@ -179,7 +179,9 @@
     List<SourceFieldBuilder> elementBuilders = <SourceFieldBuilder>[];
     NamedTypeBuilder selfType = new NamedTypeBuilder(
         name, const NullabilityBuilder.omitted(),
-        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected,
+        fileUri: fileUri,
+        charOffset: charOffset);
     NamedTypeBuilder listType = new NamedTypeBuilder(
         "List", const NullabilityBuilder.omitted(),
         arguments: <TypeBuilder>[selfType],
@@ -628,7 +630,8 @@
   }
 
   DartType buildElement(SourceFieldBuilder fieldBuilder, CoreTypes coreTypes) {
-    DartType selfType = this.selfType.build(libraryBuilder);
+    DartType selfType =
+        this.selfType.build(libraryBuilder, TypeUse.enumSelfType);
     Builder? builder = firstMemberNamed(fieldBuilder.name);
     if (builder == null || !builder.isField) return selfType;
     fieldBuilder = builder as SourceFieldBuilder;
@@ -674,7 +677,8 @@
     if (typeArgumentBuilders != null) {
       typeArguments = <DartType>[];
       for (TypeBuilder typeBuilder in typeArgumentBuilders) {
-        typeArguments.add(typeBuilder.build(libraryBuilder));
+        typeArguments.add(
+            typeBuilder.build(libraryBuilder, TypeUse.constructorTypeArgument));
       }
     }
     if (libraryBuilder.libraryFeatures.enhancedEnums.isEnabled) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
index 740f9b8..578747e 100644
--- a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
@@ -91,7 +91,7 @@
   /// library.
   Extension build(LibraryBuilder coreLibrary,
       {required bool addMembersToLibrary}) {
-    _extension.onType = onType.build(libraryBuilder);
+    _extension.onType = onType.build(libraryBuilder, TypeUse.extensionOnType);
     extensionTypeShowHideClauseBuilder.buildAndStoreTypes(
         _extension, libraryBuilder);
 
@@ -242,16 +242,6 @@
   }
 
   void checkTypesInOutline(TypeEnvironment typeEnvironment) {
-    libraryBuilder.checkBoundsInTypeParameters(
-        typeEnvironment, extension.typeParameters, fileUri);
-
-    // Check on clause.
-    // ignore: unnecessary_null_comparison
-    if (_extension.onType != null) {
-      libraryBuilder.checkBoundsInType(_extension.onType, typeEnvironment,
-          onType.fileUri!, onType.charOffset!);
-    }
-
     forEach((String name, Builder builder) {
       if (builder is SourceFieldBuilder) {
         // Check fields.
diff --git a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
index 09523b6..7ba09c8 100644
--- a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
@@ -360,7 +360,8 @@
     if (redirectionTarget.typeArguments != null) {
       typeArguments = new List<DartType>.generate(
           redirectionTarget.typeArguments!.length,
-          (int i) => redirectionTarget.typeArguments![i].build(libraryBuilder),
+          (int i) => redirectionTarget.typeArguments![i]
+              .build(libraryBuilder, TypeUse.redirectionTypeArgument),
           growable: false);
     }
     updatePrivateMemberName(_procedureInternal, libraryBuilder);
diff --git a/pkg/front_end/lib/src/fasta/source/source_field_builder.dart b/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
index e5d89e8..cdf803a 100644
--- a/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
@@ -367,7 +367,7 @@
   /// Builds the core AST structures for this field as needed for the outline.
   void build() {
     if (type != null) {
-      fieldType = type!.build(libraryBuilder);
+      fieldType = type!.build(libraryBuilder, TypeUse.fieldType);
     }
     _fieldEncoding.build(libraryBuilder, this);
   }
diff --git a/pkg/front_end/lib/src/fasta/source/source_function_builder.dart b/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
index 1411267..e52c631 100644
--- a/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
@@ -387,7 +387,8 @@
       function.requiredParameterCount = 1;
     }
     if (returnType != null) {
-      function.returnType = returnType!.build(libraryBuilder);
+      function.returnType =
+          returnType!.build(libraryBuilder, TypeUse.returnType);
     }
     if (isExtensionInstanceMember) {
       ExtensionBuilder extensionBuilder = parent as ExtensionBuilder;
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 53fa58e..963b623 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -21,7 +21,8 @@
         TypeArgumentIssue,
         findTypeArgumentIssues,
         findTypeArgumentIssuesForInvocation,
-        getGenericTypeName;
+        getGenericTypeName,
+        hasGenericFunctionTypeAsTypeArgument;
 import 'package:kernel/type_algebra.dart' show Substitution, substitute;
 import 'package:kernel/type_environment.dart'
     show SubtypeCheckMode, TypeEnvironment;
@@ -175,8 +176,8 @@
   final List<TypeVariableBuilder> unboundTypeVariables =
       <TypeVariableBuilder>[];
 
-  final List<UncheckedTypedefType> uncheckedTypedefTypes =
-      <UncheckedTypedefType>[];
+  final List<PendingBoundsCheck> _pendingBoundsChecks = [];
+  final List<GenericFunctionTypeCheck> _pendingGenericFunctionTypeChecks = [];
 
   // A list of alternating forwarders and the procedures they were generated
   // for.  Note that it may not include a forwarder-origin pair in cases when
@@ -3953,7 +3954,7 @@
     addToExportScope(name, member);
   }
 
-  void reportTypeArgumentIssues(
+  void _reportTypeArgumentIssues(
       Iterable<TypeArgumentIssue> issues, Uri fileUri, int offset,
       {bool? inferred,
       TypeArgumentsInfo? typeArgumentsInfo,
@@ -4081,11 +4082,6 @@
 
   void checkTypesInField(
       SourceFieldBuilder fieldBuilder, TypeEnvironment typeEnvironment) {
-    // Check the bounds in the field's type.
-    checkBoundsInType(fieldBuilder.fieldType, typeEnvironment,
-        fieldBuilder.fileUri, fieldBuilder.charOffset,
-        allowSuperBounded: true);
-
     // Check that the field has an initializer if its type is potentially
     // non-nullable.
     if (isNonNullableByDefault) {
@@ -4132,133 +4128,8 @@
     }
   }
 
-  void checkBoundsInTypeParameters(TypeEnvironment typeEnvironment,
-      List<TypeParameter> typeParameters, Uri fileUri) {
-    // Check in bounds of own type variables.
-    for (TypeParameter parameter in typeParameters) {
-      List<TypeArgumentIssue> issues = findTypeArgumentIssues(
-          parameter.bound,
-          typeEnvironment,
-          isNonNullableByDefault
-              ? SubtypeCheckMode.withNullabilities
-              : SubtypeCheckMode.ignoringNullabilities,
-          allowSuperBounded: true,
-          isNonNullableByDefault: library.isNonNullableByDefault,
-          areGenericArgumentsAllowed:
-              libraryFeatures.genericMetadata.isEnabled);
-      for (TypeArgumentIssue issue in issues) {
-        DartType argument = issue.argument;
-        TypeParameter typeParameter = issue.typeParameter;
-        if (inferredTypes.contains(argument)) {
-          // Inference in type expressions in the supertypes boils down to
-          // instantiate-to-bound which shouldn't produce anything that breaks
-          // the bounds after the non-simplicity checks are done.  So, any
-          // violation here is the result of non-simple bounds, and the error
-          // is reported elsewhere.
-          continue;
-        }
-
-        if (issue.isGenericTypeAsArgumentIssue) {
-          reportTypeArgumentIssue(
-              messageGenericFunctionTypeUsedAsActualTypeArgument,
-              fileUri,
-              parameter.fileOffset,
-              typeParameter: null);
-        } else {
-          reportTypeArgumentIssue(
-              templateIncorrectTypeArgument.withArguments(
-                  argument,
-                  typeParameter.bound,
-                  typeParameter.name!,
-                  getGenericTypeName(issue.enclosingType!),
-                  library.isNonNullableByDefault),
-              fileUri,
-              parameter.fileOffset,
-              typeParameter: typeParameter,
-              superBoundedAttempt: issue.enclosingType,
-              superBoundedAttemptInverted: issue.invertedType);
-        }
-      }
-    }
-  }
-
-  void checkBoundsInFunctionNodeParts(
-      TypeEnvironment typeEnvironment, Uri fileUri, int fileOffset,
-      {List<TypeParameter>? typeParameters,
-      List<VariableDeclaration>? positionalParameters,
-      List<VariableDeclaration>? namedParameters,
-      DartType? returnType,
-      int? requiredParameterCount,
-      bool skipReturnType = false}) {
-    if (typeParameters != null) {
-      for (TypeParameter parameter in typeParameters) {
-        checkBoundsInType(
-            parameter.bound, typeEnvironment, fileUri, parameter.fileOffset,
-            allowSuperBounded: true);
-      }
-    }
-    if (positionalParameters != null) {
-      for (int i = 0; i < positionalParameters.length; ++i) {
-        VariableDeclaration parameter = positionalParameters[i];
-        checkBoundsInType(
-            parameter.type, typeEnvironment, fileUri, parameter.fileOffset,
-            allowSuperBounded: true);
-      }
-    }
-    if (namedParameters != null) {
-      for (int i = 0; i < namedParameters.length; ++i) {
-        VariableDeclaration named = namedParameters[i];
-        checkBoundsInType(
-            named.type, typeEnvironment, fileUri, named.fileOffset,
-            allowSuperBounded: true);
-      }
-    }
-    if (!skipReturnType && returnType != null) {
-      List<TypeArgumentIssue> issues = findTypeArgumentIssues(
-          returnType,
-          typeEnvironment,
-          isNonNullableByDefault
-              ? SubtypeCheckMode.withNullabilities
-              : SubtypeCheckMode.ignoringNullabilities,
-          allowSuperBounded: true,
-          isNonNullableByDefault: library.isNonNullableByDefault,
-          areGenericArgumentsAllowed:
-              libraryFeatures.genericMetadata.isEnabled);
-      for (TypeArgumentIssue issue in issues) {
-        DartType argument = issue.argument;
-        TypeParameter typeParameter = issue.typeParameter;
-
-        // We don't need to check if [argument] was inferred or specified
-        // here, because inference in return types boils down to instantiate-
-        // -to-bound, and it can't provide a type that violates the bound.
-        if (issue.isGenericTypeAsArgumentIssue) {
-          reportTypeArgumentIssue(
-              messageGenericFunctionTypeUsedAsActualTypeArgument,
-              fileUri,
-              fileOffset,
-              typeParameter: null);
-        } else {
-          reportTypeArgumentIssue(
-              templateIncorrectTypeArgumentInReturnType.withArguments(
-                  argument,
-                  typeParameter.bound,
-                  typeParameter.name!,
-                  getGenericTypeName(issue.enclosingType!),
-                  isNonNullableByDefault),
-              fileUri,
-              fileOffset,
-              typeParameter: typeParameter,
-              superBoundedAttempt: issue.enclosingType,
-              superBoundedAttemptInverted: issue.invertedType);
-        }
-      }
-    }
-  }
-
   void checkTypesInFunctionBuilder(
       SourceFunctionBuilder procedureBuilder, TypeEnvironment typeEnvironment) {
-    checkBoundsInFunctionNode(
-        procedureBuilder.function, typeEnvironment, procedureBuilder.fileUri!);
     if (procedureBuilder.formals != null &&
         !(procedureBuilder.isAbstract || procedureBuilder.isExternal)) {
       checkInitializersInFormals(procedureBuilder.formals!, typeEnvironment);
@@ -4268,8 +4139,6 @@
   void checkTypesInConstructorBuilder(
       DeclaredSourceConstructorBuilder constructorBuilder,
       TypeEnvironment typeEnvironment) {
-    checkBoundsInFunctionNode(
-        constructorBuilder.constructor.function, typeEnvironment, fileUri);
     if (!constructorBuilder.isExternal && constructorBuilder.formals != null) {
       checkInitializersInFormals(constructorBuilder.formals!, typeEnvironment);
     }
@@ -4278,50 +4147,10 @@
   void checkTypesInRedirectingFactoryBuilder(
       RedirectingFactoryBuilder redirectingFactoryBuilder,
       TypeEnvironment typeEnvironment) {
-    checkBoundsInFunctionNode(redirectingFactoryBuilder.function,
-        typeEnvironment, redirectingFactoryBuilder.fileUri);
     // Default values are not required on redirecting factory constructors so
     // we don't call [checkInitializersInFormals].
   }
 
-  void checkBoundsInFunctionNode(
-      FunctionNode function, TypeEnvironment typeEnvironment, Uri fileUri,
-      {bool skipReturnType = false}) {
-    checkBoundsInFunctionNodeParts(
-        typeEnvironment, fileUri, function.fileOffset,
-        typeParameters: function.typeParameters,
-        positionalParameters: function.positionalParameters,
-        namedParameters: function.namedParameters,
-        returnType: function.returnType,
-        requiredParameterCount: function.requiredParameterCount,
-        skipReturnType: skipReturnType);
-  }
-
-  void checkBoundsInListLiteral(
-      ListLiteral node, TypeEnvironment typeEnvironment, Uri fileUri,
-      {bool inferred = false}) {
-    checkBoundsInType(
-        node.typeArgument, typeEnvironment, fileUri, node.fileOffset,
-        inferred: inferred, allowSuperBounded: true);
-  }
-
-  void checkBoundsInSetLiteral(
-      SetLiteral node, TypeEnvironment typeEnvironment, Uri fileUri,
-      {bool inferred = false}) {
-    checkBoundsInType(
-        node.typeArgument, typeEnvironment, fileUri, node.fileOffset,
-        inferred: inferred, allowSuperBounded: true);
-  }
-
-  void checkBoundsInMapLiteral(
-      MapLiteral node, TypeEnvironment typeEnvironment, Uri fileUri,
-      {bool inferred = false}) {
-    checkBoundsInType(node.keyType, typeEnvironment, fileUri, node.fileOffset,
-        inferred: inferred, allowSuperBounded: true);
-    checkBoundsInType(node.valueType, typeEnvironment, fileUri, node.fileOffset,
-        inferred: inferred, allowSuperBounded: true);
-  }
-
   void checkBoundsInType(
       DartType type, TypeEnvironment typeEnvironment, Uri fileUri, int offset,
       {bool? inferred, bool allowSuperBounded = true}) {
@@ -4334,16 +4163,7 @@
         allowSuperBounded: allowSuperBounded,
         isNonNullableByDefault: library.isNonNullableByDefault,
         areGenericArgumentsAllowed: libraryFeatures.genericMetadata.isEnabled);
-    reportTypeArgumentIssues(issues, fileUri, offset, inferred: inferred);
-  }
-
-  void checkBoundsInVariableDeclaration(
-      VariableDeclaration node, TypeEnvironment typeEnvironment, Uri fileUri,
-      {bool inferred = false}) {
-    // ignore: unnecessary_null_comparison
-    if (node.type == null) return;
-    checkBoundsInType(node.type, typeEnvironment, fileUri, node.fileOffset,
-        inferred: inferred, allowSuperBounded: true);
+    _reportTypeArgumentIssues(issues, fileUri, offset, inferred: inferred);
   }
 
   void checkBoundsInConstructorInvocation(
@@ -4408,7 +4228,7 @@
             new InterfaceType(klass, klass.enclosingLibrary.nonNullable);
       }
       String targetName = node.target.name.text;
-      reportTypeArgumentIssues(issues, fileUri, node.fileOffset,
+      _reportTypeArgumentIssues(issues, fileUri, node.fileOffset,
           typeArgumentsInfo: typeArgumentsInfo,
           targetReceiver: targetReceiver,
           targetName: targetName);
@@ -4487,7 +4307,7 @@
         bottomType,
         isNonNullableByDefault: library.isNonNullableByDefault,
         areGenericArgumentsAllowed: libraryFeatures.genericMetadata.isEnabled);
-    reportTypeArgumentIssues(issues, fileUri, offset,
+    _reportTypeArgumentIssues(issues, fileUri, offset,
         typeArgumentsInfo: getTypeArgumentsInfo(arguments),
         targetReceiver: receiverType,
         targetName: name.text);
@@ -4520,7 +4340,7 @@
         bottomType,
         isNonNullableByDefault: library.isNonNullableByDefault,
         areGenericArgumentsAllowed: libraryFeatures.genericMetadata.isEnabled);
-    reportTypeArgumentIssues(issues, fileUri, offset,
+    _reportTypeArgumentIssues(issues, fileUri, offset,
         typeArgumentsInfo: getTypeArgumentsInfo(arguments),
         // TODO(johnniwinther): Special-case messaging on function type
         //  invocation to avoid reference to 'call' and use the function type
@@ -4557,7 +4377,7 @@
         bottomType,
         isNonNullableByDefault: library.isNonNullableByDefault,
         areGenericArgumentsAllowed: libraryFeatures.genericMetadata.isEnabled);
-    reportTypeArgumentIssues(issues, fileUri, offset,
+    _reportTypeArgumentIssues(issues, fileUri, offset,
         targetReceiver: functionType,
         typeArgumentsInfo: inferred
             ? const AllInferredTypeArgumentsInfo()
@@ -4592,7 +4412,7 @@
       } else if (declaration is SourceExtensionBuilder) {
         declaration.checkTypesInOutline(typeEnvironment);
       } else if (declaration is SourceTypeAliasBuilder) {
-        declaration.checkTypesInOutline(typeEnvironment);
+        // Do nothing.
       } else {
         assert(
             declaration is! TypeDeclarationBuilder ||
@@ -4601,7 +4421,7 @@
       }
     }
     inferredTypes.clear();
-    checkUncheckedTypedefTypes(typeEnvironment);
+    checkPendingBoundsChecks(typeEnvironment);
   }
 
   void computeShowHideElements(ClassMembersBuilder membersBuilder) {
@@ -4906,19 +4726,113 @@
     return type;
   }
 
-  /// Performs delayed bounds checks on [TypedefType]s for the library
-  ///
-  /// As [TypedefType]s are built, they are eagerly unaliased, making it
-  /// impossible to perform the bounds checks on them at the time when the
-  /// checks can be done. To perform the checks, [TypedefType]s are added to
-  /// [uncheckedTypedefTypes] as they are built.  This method performs the
-  /// checks and clears the list of the types for the delayed check.
-  void checkUncheckedTypedefTypes(TypeEnvironment typeEnvironment) {
-    for (UncheckedTypedefType uncheckedTypedefType in uncheckedTypedefTypes) {
-      checkBoundsInType(uncheckedTypedefType.typeToCheck, typeEnvironment,
-          uncheckedTypedefType.fileUri!, uncheckedTypedefType.offset!);
+  void registerBoundsCheck(
+      DartType type, Uri fileUri, int charOffset, TypeUse typeUse,
+      {required bool inferred}) {
+    _pendingBoundsChecks.add(new PendingBoundsCheck(
+        type, fileUri, charOffset, typeUse,
+        inferred: inferred));
+  }
+
+  void registerGenericFunctionTypeCheck(
+      TypedefType type, Uri fileUri, int charOffset) {
+    _pendingGenericFunctionTypeChecks
+        .add(new GenericFunctionTypeCheck(type, fileUri, charOffset));
+  }
+
+  /// Performs delayed bounds checks.
+  void checkPendingBoundsChecks(TypeEnvironment typeEnvironment) {
+    for (PendingBoundsCheck pendingBoundsCheck in _pendingBoundsChecks) {
+      switch (pendingBoundsCheck.typeUse) {
+        case TypeUse.literalTypeArgument:
+        case TypeUse.variableType:
+        case TypeUse.typeParameterBound:
+        case TypeUse.parameterType:
+        case TypeUse.fieldType:
+        case TypeUse.returnType:
+        case TypeUse.isType:
+        case TypeUse.asType:
+        case TypeUse.catchType:
+        case TypeUse.constructorTypeArgument:
+        case TypeUse.redirectionTypeArgument:
+        case TypeUse.tearOffTypeArgument:
+        case TypeUse.invocationTypeArgument:
+        case TypeUse.typeLiteral:
+        case TypeUse.extensionOnType:
+        case TypeUse.typeArgument:
+          checkBoundsInType(pendingBoundsCheck.type, typeEnvironment,
+              pendingBoundsCheck.fileUri, pendingBoundsCheck.charOffset,
+              inferred: pendingBoundsCheck.inferred, allowSuperBounded: true);
+          break;
+        case TypeUse.typedefAlias:
+        case TypeUse.superType:
+        case TypeUse.mixedInType:
+          checkBoundsInType(pendingBoundsCheck.type, typeEnvironment,
+              pendingBoundsCheck.fileUri, pendingBoundsCheck.charOffset,
+              inferred: pendingBoundsCheck.inferred, allowSuperBounded: false);
+          break;
+        case TypeUse.instantiation:
+          // TODO(johnniwinther): Should we allow super bounded tear offs of
+          // non-proper renames?
+          checkBoundsInType(pendingBoundsCheck.type, typeEnvironment,
+              pendingBoundsCheck.fileUri, pendingBoundsCheck.charOffset,
+              inferred: pendingBoundsCheck.inferred, allowSuperBounded: true);
+          break;
+        case TypeUse.enumSelfType:
+          // TODO(johnniwinther): Check/create this type as regular bounded i2b.
+          /*
+            checkBoundsInType(pendingBoundsCheck.type, typeEnvironment,
+                pendingBoundsCheck.fileUri, pendingBoundsCheck.charOffset,
+                inferred: pendingBoundsCheck.inferred,
+                allowSuperBounded: false);
+          */
+          break;
+        case TypeUse.macroTypeArgument:
+        case TypeUse.typeParameterDefaultType:
+        case TypeUse.defaultTypeAsTypeArgument:
+        case TypeUse.deferredTypeError:
+        case TypeUse.functionSignature:
+          break;
+      }
     }
-    uncheckedTypedefTypes.clear();
+    _pendingBoundsChecks.clear();
+
+    for (GenericFunctionTypeCheck genericFunctionTypeCheck
+        in _pendingGenericFunctionTypeChecks) {
+      checkGenericFunctionTypeAsTypeArgumentThroughTypedef(
+          genericFunctionTypeCheck.type,
+          genericFunctionTypeCheck.fileUri,
+          genericFunctionTypeCheck.charOffset);
+    }
+    _pendingGenericFunctionTypeChecks.clear();
+  }
+
+  /// Reports an error if [type] contains is a generic function type used as
+  /// a type argument through its alias.
+  ///
+  /// For instance
+  ///
+  ///   typedef A = B<void Function<T>(T)>;
+  ///
+  /// here `A` doesn't use a generic function as type argument directly, but
+  /// its unaliased value `B<void Function<T>(T)>` does.
+  ///
+  /// This is used for reporting generic function types used as a type argument,
+  /// which was disallowed before the 'generic-metadata' feature was enabled.
+  void checkGenericFunctionTypeAsTypeArgumentThroughTypedef(
+      TypedefType type, Uri fileUri, int fileOffset) {
+    assert(!libraryFeatures.genericMetadata.isEnabled);
+    if (!hasGenericFunctionTypeAsTypeArgument(type)) {
+      DartType unaliased = type.unalias;
+      if (hasGenericFunctionTypeAsTypeArgument(unaliased)) {
+        addProblem(
+            templateGenericFunctionTypeAsTypeArgumentThroughTypedef
+                .withArguments(unaliased, type, isNonNullableByDefault),
+            fileOffset,
+            noLength,
+            fileUri);
+      }
+    }
   }
 
   void installTypedefTearOffs() {
@@ -5459,11 +5373,21 @@
   }
 }
 
-class UncheckedTypedefType {
-  final TypedefType typeToCheck;
+class PendingBoundsCheck {
+  final DartType type;
+  final Uri fileUri;
+  final int charOffset;
+  final TypeUse typeUse;
+  final bool inferred;
 
-  int? offset;
-  Uri? fileUri;
+  PendingBoundsCheck(this.type, this.fileUri, this.charOffset, this.typeUse,
+      {required this.inferred});
+}
 
-  UncheckedTypedefType(this.typeToCheck);
+class GenericFunctionTypeCheck {
+  final TypedefType type;
+  final Uri fileUri;
+  final int charOffset;
+
+  GenericFunctionTypeCheck(this.type, this.fileUri, this.charOffset);
 }
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index c98f659..cf387f5 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -84,6 +84,7 @@
 import '../type_inference/type_inference_engine.dart';
 import '../type_inference/type_inferrer.dart';
 import '../util/helpers.dart';
+import '../uris.dart';
 import 'diet_listener.dart' show DietListener;
 import 'diet_parser.dart' show DietParser, useImplicitCreationExpressionInCfe;
 import 'name_scheme.dart';
@@ -717,6 +718,8 @@
       List<LocatedMessage>? context,
       bool problemOnLibrary: false,
       List<Uri>? involvedFiles}) {
+    assert(
+        fileUri != missingUri, "Message unexpectedly reported on missing uri.");
     severity ??= message.code.severity;
     if (severity == Severity.ignored) return null;
     String trace = """
diff --git a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
index c24455e..8cf8c31 100644
--- a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
@@ -6,7 +6,6 @@
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
-import 'package:kernel/type_environment.dart';
 
 import '../builder/builder.dart';
 import '../builder/class_builder.dart';
@@ -88,7 +87,7 @@
   }
 
   Typedef build() {
-    typedef.type ??= buildThisType();
+    buildThisType();
 
     TypeBuilder? type = this.type;
     if (type is FunctionTypeBuilder ||
@@ -120,38 +119,29 @@
     // detect cycles by detecting recursive calls to this method using an
     // instance of InvalidType that isn't identical to `const InvalidType()`.
     thisType = pendingTypeAliasMarker;
+    DartType builtType = const InvalidType();
     TypeBuilder? type = this.type;
     // ignore: unnecessary_null_comparison
     if (type != null) {
-      DartType builtType = type.build(libraryBuilder);
-      if (builtType is FunctionType) {
-        // Set the `typedefType` if it hasn't already been set. It can already
-        // be set if this type alias is an alias of another typedef, in which
-        // we use the existing value. For instance
-        //
-        //    typedef void F(); // typedefType will be set to `F`.
-        //    typedef G = F; // The typedefType has already been set to `F`.
-        //
-        builtType.typedefType ??= thisTypedefType(typedef, libraryBuilder);
-      }
+      builtType = type.build(libraryBuilder, TypeUse.typedefAlias);
       // ignore: unnecessary_null_comparison
       if (builtType != null) {
         if (typeVariables != null) {
           for (TypeVariableBuilder tv in typeVariables!) {
             // Follow bound in order to find all cycles
-            tv.bound?.build(libraryBuilder);
+            tv.bound?.build(libraryBuilder, TypeUse.typeParameterBound);
           }
         }
         if (identical(thisType, cyclicTypeAliasMarker)) {
-          return thisType = const InvalidType();
+          builtType = const InvalidType();
         } else {
-          return thisType = builtType;
+          builtType = builtType;
         }
       } else {
-        return thisType = const InvalidType();
+        builtType = const InvalidType();
       }
     }
-    return thisType = const InvalidType();
+    return thisType = typedef.type ??= builtType;
   }
 
   TypedefType thisTypedefType(Typedef typedef, LibraryBuilder clientLibrary) {
@@ -190,15 +180,23 @@
   }
 
   @override
-  List<DartType> buildTypeArguments(
+  List<DartType> buildAliasedTypeArguments(
       LibraryBuilder library, List<TypeBuilder>? arguments) {
     if (arguments == null && typeVariables == null) {
       return <DartType>[];
     }
 
     if (arguments == null && typeVariables != null) {
-      List<DartType> result = new List<DartType>.generate(typeVariables!.length,
-          (int i) => typeVariables![i].defaultType!.build(library),
+      // TODO(johnniwinther): Use i2b here when needed.
+      List<DartType> result = new List<DartType>.generate(
+          typeVariables!.length,
+          (int i) => typeVariables![i]
+              .defaultType!
+              // TODO(johnniwinther): Using [libraryBuilder] here instead of
+              // [library] preserves the nullability of the original
+              // declaration. We legacy erase it later, but should we legacy
+              // erase it now also?
+              .buildAliased(libraryBuilder, TypeUse.defaultTypeAsTypeArgument),
           growable: true);
       if (library is SourceLibraryBuilder) {
         library.inferredTypes.addAll(result);
@@ -218,19 +216,11 @@
     }
 
     // arguments.length == typeVariables.length
-    return new List<DartType>.generate(
-        arguments!.length, (int i) => arguments[i].build(library),
+    return new List<DartType>.generate(arguments!.length,
+        (int i) => arguments[i].buildAliased(library, TypeUse.typeArgument),
         growable: true);
   }
 
-  void checkTypesInOutline(TypeEnvironment typeEnvironment) {
-    libraryBuilder.checkBoundsInTypeParameters(
-        typeEnvironment, typedef.typeParameters, fileUri);
-    libraryBuilder.checkBoundsInType(
-        typedef.type!, typeEnvironment, fileUri, type?.charOffset ?? charOffset,
-        allowSuperBounded: false);
-  }
-
   void buildOutlineExpressions(
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_demotion.dart b/pkg/front_end/lib/src/fasta/type_inference/type_demotion.dart
index 9e4a88b..48a0929 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_demotion.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_demotion.dart
@@ -26,10 +26,6 @@
     for (NamedType namedParameterType in node.namedParameters) {
       if (namedParameterType.type.accept(this)) return true;
     }
-    TypedefType? typedefType = node.typedefType;
-    if (typedefType != null && typedefType.accept(this)) {
-      return true;
-    }
     return false;
   }
 
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 609515e..979bf9d 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -10,7 +10,8 @@
 import 'package:kernel/canonical_name.dart' as kernel;
 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
 import 'package:kernel/core_types.dart' show CoreTypes;
-import 'package:kernel/src/bounds_checks.dart' show calculateBounds;
+import 'package:kernel/src/bounds_checks.dart'
+    show calculateBounds, isGenericFunctionTypeOrAlias;
 import 'package:kernel/src/future_value_type.dart';
 import 'package:kernel/src/legacy_erasure.dart';
 import 'package:kernel/type_algebra.dart';
@@ -4875,6 +4876,22 @@
     return new EqualsNull(left)..fileOffset = fileOffset;
   }
 
+  /// Reports an error if [typeArgument] is a generic function type.
+  ///
+  /// This is use for reporting generic function types used as a type argument,
+  /// which was disallowed before the 'generic-metadata' feature was enabled.
+  void checkGenericFunctionTypeArgument(DartType typeArgument, int fileOffset) {
+    assert(!libraryBuilder.libraryFeatures.genericMetadata.isEnabled);
+    if (isGenericFunctionTypeOrAlias(typeArgument)) {
+      libraryBuilder.addProblem(
+          templateGenericFunctionTypeInferredAsActualTypeArgument.withArguments(
+              typeArgument, isNonNullableByDefault),
+          fileOffset,
+          noLength,
+          helper!.uri);
+    }
+  }
+
   DartType _computeInferredType(ExpressionInferenceResult result) =>
       identical(result.inferredType, noInferredType) || isNonNullableByDefault
           ? result.inferredType
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_schema.dart b/pkg/front_end/lib/src/fasta/type_inference/type_schema.dart
index acd6439..54c2b25 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_schema.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_schema.dart
@@ -13,6 +13,7 @@
         NamedType,
         Nullability,
         TypedefType,
+        TypeParameter,
         Visitor;
 import 'package:kernel/src/assumptions.dart';
 import 'package:kernel/src/printer.dart';
@@ -122,8 +123,9 @@
     for (NamedType namedParameterType in node.namedParameters) {
       if (!namedParameterType.type.accept(this)) return false;
     }
-    if (node.typedefType != null && !node.typedefType!.accept(this)) {
-      return false;
+    for (TypeParameter typeParameter in node.typeParameters) {
+      if (!typeParameter.bound.accept(this)) return false;
+      if (!typeParameter.defaultType.accept(this)) return false;
     }
     return true;
   }
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart b/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart
index dd2f233..aeb7072 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart
@@ -49,10 +49,7 @@
               isRequired: named.isRequired))
           .toList(),
       typeParameters: newTypeParameters,
-      requiredParameterCount: type.requiredParameterCount,
-      typedefType: type.typedefType == null
-          ? null
-          : substitution.substituteType(type.typedefType!) as TypedefType);
+      requiredParameterCount: type.requiredParameterCount);
 }
 
 /// Given a [FunctionType], gets the type of the named parameter with the given
diff --git a/pkg/front_end/lib/src/fasta/uris.dart b/pkg/front_end/lib/src/fasta/uris.dart
new file mode 100644
index 0000000..28dc2e2
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/uris.dart
@@ -0,0 +1,6 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+final Uri dartCore = Uri.parse('dart:core');
+final Uri missingUri = Uri.parse('org-dartlang-internal:missing');
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index dae8e71..125a09d 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -429,6 +429,7 @@
 FunctionTypedParameterVar/script1: Fail
 FunctionUsedAsDec/analyzerCode: Fail
 GeneratorReturnsValue/example: Fail
+GenericFunctionTypeAsTypeArgumentThroughTypedef/example: Fail
 GetterNotFound/example: Fail
 GetterWithFormals/example: Fail
 IllegalAssignmentToNonAssignable/part_wrapped_script1: Fail
@@ -467,9 +468,6 @@
 IncompatibleRedirecteeFunctionType/part_wrapped_script6: Fail
 IncompatibleRedirecteeFunctionType/script6: Fail # Triggers multiple errors.
 IncompatibleRedirecteeFunctionTypeWarning/example: Fail
-IncorrectTypeArgumentInReturnTypeWarning/example: Fail
-IncorrectTypeArgumentInSupertypeInferredWarning/example: Fail
-IncorrectTypeArgumentInSupertypeWarning/example: Fail
 IncorrectTypeArgumentInferredWarning/example: Fail
 IncorrectTypeArgumentQualifiedInferredWarning/example: Fail
 IncorrectTypeArgumentQualifiedWarning/example: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index abf6263..745eead 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -4453,22 +4453,6 @@
     class C<T> { foo<U extends num>() {} }
     main() { new C<String>().foo<String>(); }
 
-IncorrectTypeArgumentInSupertype:
-  problemMessage: "Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the supertype '#name3' of class '#name4'."
-  correctionMessage: "Try changing type arguments so that they conform to the bounds."
-  analyzerCode: TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-  script: >
-    class A<T extends num> {}
-    class B extends A<String> {}
-
-IncorrectTypeArgumentInReturnType:
-  problemMessage: "Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the return type."
-  correctionMessage: "Try changing type arguments so that they conform to the bounds."
-  analyzerCode: TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-  script: >
-    class A<T extends num> {}
-    A<String> foo() => throw '';
-
 IncorrectTypeArgumentInferred:
   problemMessage: "Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2'."
   correctionMessage: "Try specifying type arguments explicitly so that they conform to the bounds."
@@ -4485,14 +4469,6 @@
     class C<T> { foo<U extends num>(U u) {} }
     main() { new C<String>().foo(""); }
 
-IncorrectTypeArgumentInSupertypeInferred:
-  problemMessage: "Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the supertype '#name3' of class '#name4'."
-  correctionMessage: "Try specifying type arguments explicitly so that they conform to the bounds."
-  analyzerCode: TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-  script: >
-    class A<T extends A<T>> {}
-    class B extends A {}
-
 IncorrectTypeArgumentInstantiation:
   problemMessage: "Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#type3'."
   correctionMessage: "Try changing type arguments so that they conform to the bounds."
@@ -4560,6 +4536,11 @@
     bar<Y>(Y y) => null;
     main() { foo(bar); }
 
+GenericFunctionTypeAsTypeArgumentThroughTypedef:
+  problemMessage: "Generic function type '#type' used as a type argument through typedef '#type2'."
+  correctionMessage: "Try providing a non-generic function type explicitly."
+  analyzerCode: GENERIC_FUNCTION_CANNOT_BE_TYPE_ARGUMENT
+
 # These two message templates are used for constructing supplemental text
 # about the origins of raw interface types in error messages containing types.
 TypeOrigin:
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index b143afe..268a80e 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -426,6 +426,7 @@
 eq
 equation
 equivalences
+erase
 erased
 es
 establish
@@ -765,6 +766,7 @@
 macro
 macros
 maintaining
+malbounded
 mangled
 manipulation
 manner
diff --git a/pkg/front_end/test/text_representation/data/types.dart b/pkg/front_end/test/text_representation/data/types.dart
index 029481c..4145fe9 100644
--- a/pkg/front_end/test/text_representation/data/types.dart
+++ b/pkg/front_end/test/text_representation/data/types.dart
@@ -155,51 +155,46 @@
 // TODO(johnniwinther): Support interdependent function type variables.
 //genericFunctionType5(T Function<T, S extends T>([T, S]) o) {}
 //genericFunctionType6(T Function<T extends S, S>([T, S]) o) {}
-typedefType1(
-    Typedef1 /*normal|limited.Typedef1*/ /*verbose.test::Typedef1*/ o) {}
+typedefType1(Typedef1 /*void Function()*/ o) {}
 typedefType2(
     Typedef2
-        /*normal|limited.Typedef2<dynamic>*/
-        /*verbose.test::Typedef2<dynamic>*/
+        /*void Function(dynamic)*/
         o) {}
 typedefType3(
     Typedef2<int>
-        /*normal|limited.Typedef2<int>*/
-        /*verbose.test::Typedef2<dart.core::int>*/
+        /*normal|limited.void Function(int)*/
+        /*verbose.void Function(dart.core::int)*/
         o1,
     Typedef2<int?>
-        /*normal|limited.Typedef2<int?>*/
-        /*verbose.test::Typedef2<dart.core::int?>*/
+        /*normal|limited.void Function(int?)*/
+        /*verbose.void Function(dart.core::int?)*/
         o2) {}
-typedefType4(
-    Typedef3 /*normal|limited.Typedef3*/ /*verbose.test::Typedef3*/ o) {}
+typedefType4(Typedef3 /*void Function()*/ o) {}
 typedefType5(
     Typedef4
-        /*normal|limited.Typedef4<dynamic>*/
-/*verbose.test::Typedef4<dynamic>*/
+        /*void Function(dynamic)*/
         o) {}
 typedefType7(
     Typedef4<int>
-        /*normal|limited.Typedef4<int>*/
-        /*verbose.test::Typedef4<dart.core::int>*/
+        /*normal|limited.void Function(int)*/
+        /*verbose.void Function(dart.core::int)*/
         o1,
     Typedef4<int>?
-        /*normal|limited.Typedef4<int>?*/
-        /*verbose.test::Typedef4<dart.core::int>?*/
+        /*normal|limited.void Function(int)?*/
+        /*verbose.void Function(dart.core::int)?*/
         o2) {}
 typedefType8(
     Typedef5
-        /*normal|limited.Typedef5<dynamic>*/
-        /*verbose.test::Typedef5<dynamic>*/
+        /*void Function<S>(dynamic, S%)*/
         o) {}
 typedefType9(
     Typedef5<int>
-        /*normal|limited.Typedef5<int>*/
-        /*verbose.test::Typedef5<dart.core::int>*/
+        /*normal|limited.void Function<S>(int, S%)*/
+        /*verbose.void Function<S>(dart.core::int, S%)*/
         o1,
     Typedef5<int?>?
-        /*normal|limited.Typedef5<int?>?*/
-        /*verbose.test::Typedef5<dart.core::int?>?*/
+        /*normal|limited.void Function<S>(int?, S%)?*/
+        /*verbose.void Function<S>(dart.core::int?, S%)?*/
         o2) {}
 
 method() {
diff --git a/pkg/front_end/test/text_representation/data/types_opt_out.dart b/pkg/front_end/test/text_representation/data/types_opt_out.dart
index b864336..94c86e8 100644
--- a/pkg/front_end/test/text_representation/data/types_opt_out.dart
+++ b/pkg/front_end/test/text_representation/data/types_opt_out.dart
@@ -99,42 +99,37 @@
 // TODO(johnniwinther): Support interdependent function type variables.
 //genericFunctionType5(T Function<T, S extends T>([T, S]) o) {}
 //genericFunctionType6(T Function<T extends S, S>([T, S]) o) {}
-typedefType1(
-    Typedef1 /*normal|limited.Typedef1**/ /*verbose.test::Typedef1**/ o) {}
+typedefType1(Typedef1 /*void Function()**/ o) {}
 typedefType2(
     Typedef2
-        /*normal|limited.Typedef2<dynamic>**/
-        /*verbose.test::Typedef2<dynamic>**/
+        /*void Function(dynamic)**/
         o) {}
 typedefType3(
     Typedef2<int>
-        /*normal|limited.Typedef2<int*>**/
-        /*verbose.test::Typedef2<dart.core::int*>**/
+        /*normal|limited.void Function(int*)**/
+        /*verbose.void Function(dart.core::int*)**/
         o) {}
 typedefType4(
     Typedef3
-        /*normal|limited.Typedef3**/
-        /*verbose.test::Typedef3**/
+        /*void Function()**/
         o) {}
 typedefType5(
     Typedef4
-        /*normal|limited.Typedef4<dynamic>**/
-        /*verbose.test::Typedef4<dynamic>**/
+        /*void Function(dynamic)**/
         o) {}
 typedefType7(
     Typedef4<int>
-        /*normal|limited.Typedef4<int*>**/
-        /*verbose.test::Typedef4<dart.core::int*>**/
+        /*normal|limited.void Function(int*)**/
+        /*verbose.void Function(dart.core::int*)**/
         o) {}
 typedefType8(
     Typedef5
-        /*normal|limited.Typedef5<dynamic>**/
-        /*verbose.test::Typedef5<dynamic>**/
+        /*void Function<S>(dynamic, S*)**/
         o) {}
 typedefType9(
     Typedef5<int>
-        /*normal|limited.Typedef5<int*>**/
-        /*verbose.test::Typedef5<dart.core::int*>**/
+        /*normal|limited.void Function<S>(int*, S*)**/
+        /*verbose.void Function<S>(dart.core::int*, S*)**/
         o) {}
 
 method() {
diff --git a/pkg/front_end/test/text_representation/text_representation_test.dart b/pkg/front_end/test/text_representation/text_representation_test.dart
index 24e5246..b92bd42 100644
--- a/pkg/front_end/test/text_representation/text_representation_test.dart
+++ b/pkg/front_end/test/text_representation/text_representation_test.dart
@@ -181,11 +181,7 @@
       return node.constant.toText(strategy);
     } else if (node is VariableDeclaration) {
       DartType type = node.type;
-      if (type is FunctionType && type.typedefType != null) {
-        return type.typedefType!.toText(strategy);
-      } else {
-        return type.toText(strategy);
-      }
+      return type.toText(strategy);
     }
     return null;
   }
diff --git a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart
new file mode 100644
index 0000000..05a8ef2
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart
@@ -0,0 +1,57 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+// Introduce an aliased type.
+typedef T<X> = X;
+
+// Use the aliased type.
+
+T<int>? v1;
+List<T<void>> v2 = [];
+final T<String> v3 = throw "Anything";
+const List<T<C>> v4 = [];
+const v5 = <Type, Type>{T: T};
+
+abstract class C {
+  static T<C>? v1;
+  static List<T<T>> v2 = [];
+  static final T<Null> v3 = throw "Anything";
+  static const List<T<List>> v4 = [];
+
+  T<D>? v5;
+  List<T<T>> v6 = [];
+  final T<Null> v7;
+
+  C() : v7 = null;
+  C.name1(this.v5, this.v7);
+  factory C.name2(T<D> arg1, T<Null> arg2) = C1.name1;
+
+  T<double> operator +(T<double> other);
+  T<FutureOr<FutureOr<void>>> get g;
+  set g(T<FutureOr<FutureOr<void>>> value);
+  Map<T<C>, T<C>> m1(covariant T<C> arg1, [Set<Set<T<C>>> arg2]);
+  void m2({T arg1, Map<T, T> arg2(T Function(T) arg21, T arg22)});
+}
+
+class C1 implements C {
+  C1.name1(T<D> arg1, T<Null> arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
+class D {}
+
+extension E on T<dynamic> {
+  T<dynamic> foo(T<dynamic> t) => t;
+}
+
+main() {
+  var v8 = <T<C>>[];
+  var v9 = <Set<T<T>>, Set<T<T>>>{{}: {}};
+  var v10 = {v8};
+  v9[{}] = {42};
+  Set<List<T<C>>> v11 = v10;
+  v10 = v11;
+}
diff --git a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.strong.expect b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.strong.expect
new file mode 100644
index 0000000..bc821c9
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.strong.expect
@@ -0,0 +1,99 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef T<X extends core::Object? = dynamic> = X%;
+abstract class C extends core::Object {
+  static field self::C? v1 = null;
+  static field core::List<dynamic> v2 = <dynamic>[];
+  static final field Null v3 = throw "Anything";
+  static const field core::List<core::List<dynamic>> v4 = #C1;
+  field self::D? v5;
+  field core::List<dynamic> v6 = <dynamic>[];
+  final field Null v7;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor •() → self::C
+    : self::C::v5 = null, self::C::v7 = null, super core::Object::•()
+    ;
+  constructor name1(self::D? v5, Null v7) → self::C
+    : self::C::v5 = v5, self::C::v7 = v7, super core::Object::•()
+    ;
+  static factory name2(self::D arg1, Null arg2) → self::C
+    return new self::C1::name1(arg1, arg2);
+  static method _#name2#tearOff(self::D arg1, Null arg2) → self::C
+    return new self::C1::name1(arg1, arg2);
+  abstract operator +(core::double other) → core::double;
+  abstract get g() → FutureOr<FutureOr<void>>?;
+  abstract set g(FutureOr<FutureOr<void>>? value) → void;
+  abstract method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C3]) → core::Map<self::C, self::C>;
+  abstract method m2({dynamic arg1 = #C3, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C3}) → void;
+}
+class C1 extends core::Object implements self::C {
+  constructor name1(self::D arg1, Null arg2) → self::C1
+    : super core::Object::•()
+    ;
+  static method _#name1#tearOff(self::D arg1, Null arg2) → self::C1
+    return new self::C1::name1(arg1, arg2);
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return throw 0;
+  no-such-method-forwarder get v7() → Null
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v7", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} Null;
+  no-such-method-forwarder operator +(core::double other) → core::double
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("+", <dynamic>[], <dynamic>[other], #C4, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::double;
+  no-such-method-forwarder get v6() → core::List<dynamic>
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<dynamic>;
+  no-such-method-forwarder get v5() → self::D?
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v5", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::D?;
+  no-such-method-forwarder method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C3]) → core::Map<self::C, self::C>
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m1", <dynamic>[], <dynamic>[arg1, arg2], #C4, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<self::C, self::C>;
+  no-such-method-forwarder method m2({dynamic arg1 = #C3, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C3}) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m2", <dynamic>[], <dynamic>[], <core::String, dynamic>{"arg1": arg1, "arg2": arg2}, 0)){(core::Invocation) → dynamic};
+  no-such-method-forwarder get g() → FutureOr<FutureOr<void>>?
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<FutureOr<void>>?;
+  no-such-method-forwarder set v6(core::List<dynamic> value) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6=", <dynamic>[], <dynamic>[value], #C4, 2)){(core::Invocation) → dynamic};
+  no-such-method-forwarder set v5(self::D? value) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v5=", <dynamic>[], <dynamic>[value], #C4, 2)){(core::Invocation) → dynamic};
+  no-such-method-forwarder set g(FutureOr<FutureOr<void>>? value) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g=", <dynamic>[], <dynamic>[value], #C4, 2)){(core::Invocation) → dynamic};
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::D
+    return new self::D::•();
+}
+extension E on dynamic {
+  method foo = self::E|foo;
+  tearoff foo = self::E|get#foo;
+}
+static field core::int? v1;
+static field core::List<void> v2 = <void>[];
+static final field core::String v3 = throw "Anything";
+static const field core::List<self::C> v4 = #C5;
+static const field core::Map<core::Type, core::Type> v5 = #C7;
+static method E|foo(lowered final dynamic #this, dynamic t) → dynamic
+  return t;
+static method E|get#foo(lowered final dynamic #this) → (dynamic) → dynamic
+  return (dynamic t) → dynamic => self::E|foo(#this, t);
+static method main() → dynamic {
+  core::List<self::C> v8 = <self::C>[];
+  core::Map<core::Set<dynamic>, core::Set<dynamic>> v9 = <core::Set<dynamic>, core::Set<dynamic>>{<dynamic>{}: <dynamic>{}};
+  core::Set<core::List<self::C>> v10 = <core::List<self::C>>{v8};
+  v9.{core::Map::[]=}(<dynamic>{}, <dynamic>{42}){(core::Set<dynamic>, core::Set<dynamic>) → void};
+  core::Set<core::List<self::C>> v11 = v10;
+  v10 = v11;
+}
+
+constants  {
+  #C1 = <core::List<dynamic>>[]
+  #C2 = constructor-tearoff self::C::name2
+  #C3 = null
+  #C4 = <core::String, dynamic>{)
+  #C5 = <self::C>[]
+  #C6 = TypeLiteralConstant(dynamic)
+  #C7 = <core::Type, core::Type>{#C6:#C6)
+}
diff --git a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.strong.transformed.expect
new file mode 100644
index 0000000..bc821c9
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.strong.transformed.expect
@@ -0,0 +1,99 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef T<X extends core::Object? = dynamic> = X%;
+abstract class C extends core::Object {
+  static field self::C? v1 = null;
+  static field core::List<dynamic> v2 = <dynamic>[];
+  static final field Null v3 = throw "Anything";
+  static const field core::List<core::List<dynamic>> v4 = #C1;
+  field self::D? v5;
+  field core::List<dynamic> v6 = <dynamic>[];
+  final field Null v7;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor •() → self::C
+    : self::C::v5 = null, self::C::v7 = null, super core::Object::•()
+    ;
+  constructor name1(self::D? v5, Null v7) → self::C
+    : self::C::v5 = v5, self::C::v7 = v7, super core::Object::•()
+    ;
+  static factory name2(self::D arg1, Null arg2) → self::C
+    return new self::C1::name1(arg1, arg2);
+  static method _#name2#tearOff(self::D arg1, Null arg2) → self::C
+    return new self::C1::name1(arg1, arg2);
+  abstract operator +(core::double other) → core::double;
+  abstract get g() → FutureOr<FutureOr<void>>?;
+  abstract set g(FutureOr<FutureOr<void>>? value) → void;
+  abstract method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C3]) → core::Map<self::C, self::C>;
+  abstract method m2({dynamic arg1 = #C3, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C3}) → void;
+}
+class C1 extends core::Object implements self::C {
+  constructor name1(self::D arg1, Null arg2) → self::C1
+    : super core::Object::•()
+    ;
+  static method _#name1#tearOff(self::D arg1, Null arg2) → self::C1
+    return new self::C1::name1(arg1, arg2);
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return throw 0;
+  no-such-method-forwarder get v7() → Null
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v7", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} Null;
+  no-such-method-forwarder operator +(core::double other) → core::double
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("+", <dynamic>[], <dynamic>[other], #C4, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::double;
+  no-such-method-forwarder get v6() → core::List<dynamic>
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<dynamic>;
+  no-such-method-forwarder get v5() → self::D?
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v5", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::D?;
+  no-such-method-forwarder method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C3]) → core::Map<self::C, self::C>
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m1", <dynamic>[], <dynamic>[arg1, arg2], #C4, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<self::C, self::C>;
+  no-such-method-forwarder method m2({dynamic arg1 = #C3, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C3}) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m2", <dynamic>[], <dynamic>[], <core::String, dynamic>{"arg1": arg1, "arg2": arg2}, 0)){(core::Invocation) → dynamic};
+  no-such-method-forwarder get g() → FutureOr<FutureOr<void>>?
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<FutureOr<void>>?;
+  no-such-method-forwarder set v6(core::List<dynamic> value) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6=", <dynamic>[], <dynamic>[value], #C4, 2)){(core::Invocation) → dynamic};
+  no-such-method-forwarder set v5(self::D? value) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v5=", <dynamic>[], <dynamic>[value], #C4, 2)){(core::Invocation) → dynamic};
+  no-such-method-forwarder set g(FutureOr<FutureOr<void>>? value) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g=", <dynamic>[], <dynamic>[value], #C4, 2)){(core::Invocation) → dynamic};
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::D
+    return new self::D::•();
+}
+extension E on dynamic {
+  method foo = self::E|foo;
+  tearoff foo = self::E|get#foo;
+}
+static field core::int? v1;
+static field core::List<void> v2 = <void>[];
+static final field core::String v3 = throw "Anything";
+static const field core::List<self::C> v4 = #C5;
+static const field core::Map<core::Type, core::Type> v5 = #C7;
+static method E|foo(lowered final dynamic #this, dynamic t) → dynamic
+  return t;
+static method E|get#foo(lowered final dynamic #this) → (dynamic) → dynamic
+  return (dynamic t) → dynamic => self::E|foo(#this, t);
+static method main() → dynamic {
+  core::List<self::C> v8 = <self::C>[];
+  core::Map<core::Set<dynamic>, core::Set<dynamic>> v9 = <core::Set<dynamic>, core::Set<dynamic>>{<dynamic>{}: <dynamic>{}};
+  core::Set<core::List<self::C>> v10 = <core::List<self::C>>{v8};
+  v9.{core::Map::[]=}(<dynamic>{}, <dynamic>{42}){(core::Set<dynamic>, core::Set<dynamic>) → void};
+  core::Set<core::List<self::C>> v11 = v10;
+  v10 = v11;
+}
+
+constants  {
+  #C1 = <core::List<dynamic>>[]
+  #C2 = constructor-tearoff self::C::name2
+  #C3 = null
+  #C4 = <core::String, dynamic>{)
+  #C5 = <self::C>[]
+  #C6 = TypeLiteralConstant(dynamic)
+  #C7 = <core::Type, core::Type>{#C6:#C6)
+}
diff --git a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.textual_outline.expect b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.textual_outline.expect
new file mode 100644
index 0000000..7421287
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.textual_outline.expect
@@ -0,0 +1,39 @@
+import 'dart:async';
+
+typedef T<X> = X;
+T<int>? v1;
+List<T<void>> v2 = [];
+final T<String> v3 = throw "Anything";
+const List<T<C>> v4 = [];
+const v5 = <Type, Type>{T: T};
+
+abstract class C {
+  static T<C>? v1;
+  static List<T<T>> v2 = [];
+  static final T<Null> v3 = throw "Anything";
+  static const List<T<List>> v4 = [];
+  T<D>? v5;
+  List<T<T>> v6 = [];
+  final T<Null> v7;
+  C() : v7 = null;
+  C.name1(this.v5, this.v7);
+  factory C.name2(T<D> arg1, T<Null> arg2) = C1.name1;
+  T<double> operator +(T<double> other);
+  T<FutureOr<FutureOr<void>>> get g;
+  set g(T<FutureOr<FutureOr<void>>> value);
+  Map<T<C>, T<C>> m1(covariant T<C> arg1, [Set<Set<T<C>>> arg2]);
+  void m2({T arg1, Map<T, T> arg2(T Function(T) arg21, T arg22)});
+}
+
+class C1 implements C {
+  C1.name1(T<D> arg1, T<Null> arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
+class D {}
+
+extension E on T<dynamic> {
+  T<dynamic> foo(T<dynamic> t) => t;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..73acea0
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.textual_outline_modelled.expect
@@ -0,0 +1,40 @@
+import 'dart:async';
+
+List<T<void>> v2 = [];
+T<int>? v1;
+
+abstract class C {
+  C() : v7 = null;
+  C.name1(this.v5, this.v7);
+  List<T<T>> v6 = [];
+  Map<T<C>, T<C>> m1(covariant T<C> arg1, [Set<Set<T<C>>> arg2]);
+  T<D>? v5;
+  T<FutureOr<FutureOr<void>>> get g;
+  T<double> operator +(T<double> other);
+  factory C.name2(T<D> arg1, T<Null> arg2) = C1.name1;
+  final T<Null> v7;
+  set g(T<FutureOr<FutureOr<void>>> value);
+  static List<T<T>> v2 = [];
+  static T<C>? v1;
+  static const List<T<List>> v4 = [];
+  static final T<Null> v3 = throw "Anything";
+  void m2({T arg1, Map<T, T> arg2(T Function(T) arg21, T arg22)});
+}
+
+class C1 implements C {
+  C1.name1(T<D> arg1, T<Null> arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
+class D {}
+
+const List<T<C>> v4 = [];
+const v5 = <Type, Type>{T: T};
+
+extension E on T<dynamic> {
+  T<dynamic> foo(T<dynamic> t) => t;
+}
+
+final T<String> v3 = throw "Anything";
+main() {}
+typedef T<X> = X;
diff --git a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.expect b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.expect
new file mode 100644
index 0000000..5e2354d
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.expect
@@ -0,0 +1,99 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef T<X extends core::Object? = dynamic> = X%;
+abstract class C extends core::Object {
+  static field self::C? v1 = null;
+  static field core::List<dynamic> v2 = <dynamic>[];
+  static final field Null v3 = throw "Anything";
+  static const field core::List<core::List<dynamic>> v4 = #C1;
+  field self::D? v5;
+  field core::List<dynamic> v6 = <dynamic>[];
+  final field Null v7;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor •() → self::C
+    : self::C::v5 = null, self::C::v7 = null, super core::Object::•()
+    ;
+  constructor name1(self::D? v5, Null v7) → self::C
+    : self::C::v5 = v5, self::C::v7 = v7, super core::Object::•()
+    ;
+  static factory name2(self::D arg1, Null arg2) → self::C
+    return new self::C1::name1(arg1, arg2);
+  static method _#name2#tearOff(self::D arg1, Null arg2) → self::C
+    return new self::C1::name1(arg1, arg2);
+  abstract operator +(core::double other) → core::double;
+  abstract get g() → FutureOr<FutureOr<void>>?;
+  abstract set g(FutureOr<FutureOr<void>>? value) → void;
+  abstract method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C3]) → core::Map<self::C, self::C>;
+  abstract method m2({dynamic arg1 = #C3, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C3}) → void;
+}
+class C1 extends core::Object implements self::C {
+  constructor name1(self::D arg1, Null arg2) → self::C1
+    : super core::Object::•()
+    ;
+  static method _#name1#tearOff(self::D arg1, Null arg2) → self::C1
+    return new self::C1::name1(arg1, arg2);
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return throw 0;
+  no-such-method-forwarder get v7() → Null
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v7", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} Null;
+  no-such-method-forwarder operator +(core::double other) → core::double
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("+", <dynamic>[], <dynamic>[other], #C4, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::double;
+  no-such-method-forwarder get v6() → core::List<dynamic>
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<dynamic>;
+  no-such-method-forwarder get v5() → self::D?
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v5", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::D?;
+  no-such-method-forwarder method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C3]) → core::Map<self::C, self::C>
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m1", <dynamic>[], <dynamic>[arg1, arg2], #C4, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<self::C, self::C>;
+  no-such-method-forwarder method m2({dynamic arg1 = #C3, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C3}) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m2", <dynamic>[], <dynamic>[], <core::String, dynamic>{"arg1": arg1, "arg2": arg2}, 0)){(core::Invocation) → dynamic};
+  no-such-method-forwarder get g() → FutureOr<FutureOr<void>>?
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<FutureOr<void>>?;
+  no-such-method-forwarder set v6(core::List<dynamic> value) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6=", <dynamic>[], <dynamic>[value], #C4, 2)){(core::Invocation) → dynamic};
+  no-such-method-forwarder set v5(self::D? value) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v5=", <dynamic>[], <dynamic>[value], #C4, 2)){(core::Invocation) → dynamic};
+  no-such-method-forwarder set g(FutureOr<FutureOr<void>>? value) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g=", <dynamic>[], <dynamic>[value], #C4, 2)){(core::Invocation) → dynamic};
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::D
+    return new self::D::•();
+}
+extension E on dynamic {
+  method foo = self::E|foo;
+  tearoff foo = self::E|get#foo;
+}
+static field core::int? v1;
+static field core::List<void> v2 = <void>[];
+static final field core::String v3 = throw "Anything";
+static const field core::List<self::C> v4 = #C5;
+static const field core::Map<core::Type, core::Type> v5 = #C7;
+static method E|foo(lowered final dynamic #this, dynamic t) → dynamic
+  return t;
+static method E|get#foo(lowered final dynamic #this) → (dynamic) → dynamic
+  return (dynamic t) → dynamic => self::E|foo(#this, t);
+static method main() → dynamic {
+  core::List<self::C> v8 = <self::C>[];
+  core::Map<core::Set<dynamic>, core::Set<dynamic>> v9 = <core::Set<dynamic>, core::Set<dynamic>>{<dynamic>{}: <dynamic>{}};
+  core::Set<core::List<self::C>> v10 = <core::List<self::C>>{v8};
+  v9.{core::Map::[]=}(<dynamic>{}, <dynamic>{42}){(core::Set<dynamic>, core::Set<dynamic>) → void};
+  core::Set<core::List<self::C>> v11 = v10;
+  v10 = v11;
+}
+
+constants  {
+  #C1 = <core::List<dynamic>*>[]
+  #C2 = constructor-tearoff self::C::name2
+  #C3 = null
+  #C4 = <core::String*, dynamic>{)
+  #C5 = <self::C*>[]
+  #C6 = TypeLiteralConstant(dynamic)
+  #C7 = <core::Type*, core::Type*>{#C6:#C6)
+}
diff --git a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.modular.expect
new file mode 100644
index 0000000..5e2354d
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.modular.expect
@@ -0,0 +1,99 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef T<X extends core::Object? = dynamic> = X%;
+abstract class C extends core::Object {
+  static field self::C? v1 = null;
+  static field core::List<dynamic> v2 = <dynamic>[];
+  static final field Null v3 = throw "Anything";
+  static const field core::List<core::List<dynamic>> v4 = #C1;
+  field self::D? v5;
+  field core::List<dynamic> v6 = <dynamic>[];
+  final field Null v7;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor •() → self::C
+    : self::C::v5 = null, self::C::v7 = null, super core::Object::•()
+    ;
+  constructor name1(self::D? v5, Null v7) → self::C
+    : self::C::v5 = v5, self::C::v7 = v7, super core::Object::•()
+    ;
+  static factory name2(self::D arg1, Null arg2) → self::C
+    return new self::C1::name1(arg1, arg2);
+  static method _#name2#tearOff(self::D arg1, Null arg2) → self::C
+    return new self::C1::name1(arg1, arg2);
+  abstract operator +(core::double other) → core::double;
+  abstract get g() → FutureOr<FutureOr<void>>?;
+  abstract set g(FutureOr<FutureOr<void>>? value) → void;
+  abstract method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C3]) → core::Map<self::C, self::C>;
+  abstract method m2({dynamic arg1 = #C3, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C3}) → void;
+}
+class C1 extends core::Object implements self::C {
+  constructor name1(self::D arg1, Null arg2) → self::C1
+    : super core::Object::•()
+    ;
+  static method _#name1#tearOff(self::D arg1, Null arg2) → self::C1
+    return new self::C1::name1(arg1, arg2);
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return throw 0;
+  no-such-method-forwarder get v7() → Null
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v7", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} Null;
+  no-such-method-forwarder operator +(core::double other) → core::double
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("+", <dynamic>[], <dynamic>[other], #C4, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::double;
+  no-such-method-forwarder get v6() → core::List<dynamic>
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<dynamic>;
+  no-such-method-forwarder get v5() → self::D?
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v5", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::D?;
+  no-such-method-forwarder method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C3]) → core::Map<self::C, self::C>
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m1", <dynamic>[], <dynamic>[arg1, arg2], #C4, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<self::C, self::C>;
+  no-such-method-forwarder method m2({dynamic arg1 = #C3, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C3}) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m2", <dynamic>[], <dynamic>[], <core::String, dynamic>{"arg1": arg1, "arg2": arg2}, 0)){(core::Invocation) → dynamic};
+  no-such-method-forwarder get g() → FutureOr<FutureOr<void>>?
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<FutureOr<void>>?;
+  no-such-method-forwarder set v6(core::List<dynamic> value) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6=", <dynamic>[], <dynamic>[value], #C4, 2)){(core::Invocation) → dynamic};
+  no-such-method-forwarder set v5(self::D? value) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v5=", <dynamic>[], <dynamic>[value], #C4, 2)){(core::Invocation) → dynamic};
+  no-such-method-forwarder set g(FutureOr<FutureOr<void>>? value) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g=", <dynamic>[], <dynamic>[value], #C4, 2)){(core::Invocation) → dynamic};
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::D
+    return new self::D::•();
+}
+extension E on dynamic {
+  method foo = self::E|foo;
+  tearoff foo = self::E|get#foo;
+}
+static field core::int? v1;
+static field core::List<void> v2 = <void>[];
+static final field core::String v3 = throw "Anything";
+static const field core::List<self::C> v4 = #C5;
+static const field core::Map<core::Type, core::Type> v5 = #C7;
+static method E|foo(lowered final dynamic #this, dynamic t) → dynamic
+  return t;
+static method E|get#foo(lowered final dynamic #this) → (dynamic) → dynamic
+  return (dynamic t) → dynamic => self::E|foo(#this, t);
+static method main() → dynamic {
+  core::List<self::C> v8 = <self::C>[];
+  core::Map<core::Set<dynamic>, core::Set<dynamic>> v9 = <core::Set<dynamic>, core::Set<dynamic>>{<dynamic>{}: <dynamic>{}};
+  core::Set<core::List<self::C>> v10 = <core::List<self::C>>{v8};
+  v9.{core::Map::[]=}(<dynamic>{}, <dynamic>{42}){(core::Set<dynamic>, core::Set<dynamic>) → void};
+  core::Set<core::List<self::C>> v11 = v10;
+  v10 = v11;
+}
+
+constants  {
+  #C1 = <core::List<dynamic>*>[]
+  #C2 = constructor-tearoff self::C::name2
+  #C3 = null
+  #C4 = <core::String*, dynamic>{)
+  #C5 = <self::C*>[]
+  #C6 = TypeLiteralConstant(dynamic)
+  #C7 = <core::Type*, core::Type*>{#C6:#C6)
+}
diff --git a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.outline.expect b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.outline.expect
new file mode 100644
index 0000000..5ba3b99
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.outline.expect
@@ -0,0 +1,96 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef T<X extends core::Object? = dynamic> = X%;
+abstract class C extends core::Object {
+  static field self::C? v1;
+  static field core::List<dynamic> v2;
+  static final field Null v3;
+  static const field core::List<core::List<dynamic>> v4 = const <core::List<dynamic>>[];
+  field self::D? v5;
+  field core::List<dynamic> v6;
+  final field Null v7;
+  static final field dynamic _redirecting# = <dynamic>[self::C::name2]/*isLegacy*/;
+  constructor •() → self::C
+    ;
+  constructor name1(self::D? v5, Null v7) → self::C
+    ;
+  static factory name2(self::D arg1, Null arg2) → self::C
+    return new self::C1::name1(arg1, arg2);
+  static method _#name2#tearOff(self::D arg1, Null arg2) → self::C
+    return new self::C1::name1(arg1, arg2);
+  abstract operator +(core::double other) → core::double;
+  abstract get g() → FutureOr<FutureOr<void>>?;
+  abstract set g(FutureOr<FutureOr<void>>? value) → void;
+  abstract method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = null]) → core::Map<self::C, self::C>;
+  abstract method m2({dynamic arg1 = null, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = null}) → void;
+}
+class C1 extends core::Object implements self::C {
+  constructor name1(self::D arg1, Null arg2) → self::C1
+    ;
+  static method _#name1#tearOff(self::D arg1, Null arg2) → self::C1
+    return new self::C1::name1(arg1, arg2);
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    ;
+  no-such-method-forwarder get v7() → Null
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v7", <dynamic>[], <dynamic>[], const <core::String, dynamic>{}, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} Null;
+  no-such-method-forwarder operator +(core::double other) → core::double
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("+", <dynamic>[], <dynamic>[other], const <core::String, dynamic>{}, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::double;
+  no-such-method-forwarder get v6() → core::List<dynamic>
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6", <dynamic>[], <dynamic>[], const <core::String, dynamic>{}, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<dynamic>;
+  no-such-method-forwarder get v5() → self::D?
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v5", <dynamic>[], <dynamic>[], const <core::String, dynamic>{}, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::D?;
+  no-such-method-forwarder method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2]) → core::Map<self::C, self::C>
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m1", <dynamic>[], <dynamic>[arg1, arg2], const <core::String, dynamic>{}, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<self::C, self::C>;
+  no-such-method-forwarder method m2({dynamic arg1, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2}) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m2", <dynamic>[], <dynamic>[], <core::String, dynamic>{"arg1": arg1, "arg2": arg2}, 0)){(core::Invocation) → dynamic};
+  no-such-method-forwarder get g() → FutureOr<FutureOr<void>>?
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g", <dynamic>[], <dynamic>[], const <core::String, dynamic>{}, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<FutureOr<void>>?;
+  no-such-method-forwarder set v6(core::List<dynamic> value) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6=", <dynamic>[], <dynamic>[value], const <core::String, dynamic>{}, 2)){(core::Invocation) → dynamic};
+  no-such-method-forwarder set v5(self::D? value) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v5=", <dynamic>[], <dynamic>[value], const <core::String, dynamic>{}, 2)){(core::Invocation) → dynamic};
+  no-such-method-forwarder set g(FutureOr<FutureOr<void>>? value) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g=", <dynamic>[], <dynamic>[value], const <core::String, dynamic>{}, 2)){(core::Invocation) → dynamic};
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D
+    ;
+  static method _#new#tearOff() → self::D
+    return new self::D::•();
+}
+extension E on dynamic {
+  method foo = self::E|foo;
+  tearoff foo = self::E|get#foo;
+}
+static field core::int? v1;
+static field core::List<void> v2;
+static final field core::String v3;
+static const field core::List<self::C> v4 = const <self::C>[];
+static const field core::Map<core::Type, core::Type> v5 = const <core::Type, core::Type>{dynamic: dynamic};
+static method E|foo(lowered final dynamic #this, dynamic t) → dynamic
+  ;
+static method E|get#foo(lowered final dynamic #this) → (dynamic) → dynamic
+  return (dynamic t) → dynamic => self::E|foo(#this, t);
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///generic_usage_type_variable.dart:22:35 -> ListConstant(const <List<dynamic>*>[])
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_usage_type_variable.dart:18:16 -> ConstructorTearOffConstant(C.name2)
+Evaluated: MapLiteral @ org-dartlang-testcase:///generic_usage_type_variable.dart:26:17 -> MapConstant(const <String*, dynamic>{})
+Evaluated: MapLiteral @ org-dartlang-testcase:///generic_usage_type_variable.dart:32:22 -> MapConstant(const <String*, dynamic>{})
+Evaluated: MapLiteral @ org-dartlang-testcase:///generic_usage_type_variable.dart:25:14 -> MapConstant(const <String*, dynamic>{})
+Evaluated: MapLiteral @ org-dartlang-testcase:///generic_usage_type_variable.dart:24:9 -> MapConstant(const <String*, dynamic>{})
+Evaluated: MapLiteral @ org-dartlang-testcase:///generic_usage_type_variable.dart:35:19 -> MapConstant(const <String*, dynamic>{})
+Evaluated: MapLiteral @ org-dartlang-testcase:///generic_usage_type_variable.dart:33:35 -> MapConstant(const <String*, dynamic>{})
+Evaluated: MapLiteral @ org-dartlang-testcase:///generic_usage_type_variable.dart:25:14 -> MapConstant(const <String*, dynamic>{})
+Evaluated: MapLiteral @ org-dartlang-testcase:///generic_usage_type_variable.dart:24:9 -> MapConstant(const <String*, dynamic>{})
+Evaluated: MapLiteral @ org-dartlang-testcase:///generic_usage_type_variable.dart:34:7 -> MapConstant(const <String*, dynamic>{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///generic_usage_type_variable.dart:15:23 -> ListConstant(const <C*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///generic_usage_type_variable.dart:16:24 -> MapConstant(const <Type*, Type*>{dynamic: dynamic})
+Extra constant evaluation: evaluated: 93, effectively constant: 13
diff --git a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.transformed.expect b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.transformed.expect
new file mode 100644
index 0000000..5e2354d
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.transformed.expect
@@ -0,0 +1,99 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef T<X extends core::Object? = dynamic> = X%;
+abstract class C extends core::Object {
+  static field self::C? v1 = null;
+  static field core::List<dynamic> v2 = <dynamic>[];
+  static final field Null v3 = throw "Anything";
+  static const field core::List<core::List<dynamic>> v4 = #C1;
+  field self::D? v5;
+  field core::List<dynamic> v6 = <dynamic>[];
+  final field Null v7;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor •() → self::C
+    : self::C::v5 = null, self::C::v7 = null, super core::Object::•()
+    ;
+  constructor name1(self::D? v5, Null v7) → self::C
+    : self::C::v5 = v5, self::C::v7 = v7, super core::Object::•()
+    ;
+  static factory name2(self::D arg1, Null arg2) → self::C
+    return new self::C1::name1(arg1, arg2);
+  static method _#name2#tearOff(self::D arg1, Null arg2) → self::C
+    return new self::C1::name1(arg1, arg2);
+  abstract operator +(core::double other) → core::double;
+  abstract get g() → FutureOr<FutureOr<void>>?;
+  abstract set g(FutureOr<FutureOr<void>>? value) → void;
+  abstract method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C3]) → core::Map<self::C, self::C>;
+  abstract method m2({dynamic arg1 = #C3, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C3}) → void;
+}
+class C1 extends core::Object implements self::C {
+  constructor name1(self::D arg1, Null arg2) → self::C1
+    : super core::Object::•()
+    ;
+  static method _#name1#tearOff(self::D arg1, Null arg2) → self::C1
+    return new self::C1::name1(arg1, arg2);
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return throw 0;
+  no-such-method-forwarder get v7() → Null
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v7", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} Null;
+  no-such-method-forwarder operator +(core::double other) → core::double
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("+", <dynamic>[], <dynamic>[other], #C4, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::double;
+  no-such-method-forwarder get v6() → core::List<dynamic>
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<dynamic>;
+  no-such-method-forwarder get v5() → self::D?
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v5", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::D?;
+  no-such-method-forwarder method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C3]) → core::Map<self::C, self::C>
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m1", <dynamic>[], <dynamic>[arg1, arg2], #C4, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<self::C, self::C>;
+  no-such-method-forwarder method m2({dynamic arg1 = #C3, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C3}) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m2", <dynamic>[], <dynamic>[], <core::String, dynamic>{"arg1": arg1, "arg2": arg2}, 0)){(core::Invocation) → dynamic};
+  no-such-method-forwarder get g() → FutureOr<FutureOr<void>>?
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g", <dynamic>[], <dynamic>[], #C4, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<FutureOr<void>>?;
+  no-such-method-forwarder set v6(core::List<dynamic> value) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6=", <dynamic>[], <dynamic>[value], #C4, 2)){(core::Invocation) → dynamic};
+  no-such-method-forwarder set v5(self::D? value) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v5=", <dynamic>[], <dynamic>[value], #C4, 2)){(core::Invocation) → dynamic};
+  no-such-method-forwarder set g(FutureOr<FutureOr<void>>? value) → void
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g=", <dynamic>[], <dynamic>[value], #C4, 2)){(core::Invocation) → dynamic};
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::D
+    return new self::D::•();
+}
+extension E on dynamic {
+  method foo = self::E|foo;
+  tearoff foo = self::E|get#foo;
+}
+static field core::int? v1;
+static field core::List<void> v2 = <void>[];
+static final field core::String v3 = throw "Anything";
+static const field core::List<self::C> v4 = #C5;
+static const field core::Map<core::Type, core::Type> v5 = #C7;
+static method E|foo(lowered final dynamic #this, dynamic t) → dynamic
+  return t;
+static method E|get#foo(lowered final dynamic #this) → (dynamic) → dynamic
+  return (dynamic t) → dynamic => self::E|foo(#this, t);
+static method main() → dynamic {
+  core::List<self::C> v8 = <self::C>[];
+  core::Map<core::Set<dynamic>, core::Set<dynamic>> v9 = <core::Set<dynamic>, core::Set<dynamic>>{<dynamic>{}: <dynamic>{}};
+  core::Set<core::List<self::C>> v10 = <core::List<self::C>>{v8};
+  v9.{core::Map::[]=}(<dynamic>{}, <dynamic>{42}){(core::Set<dynamic>, core::Set<dynamic>) → void};
+  core::Set<core::List<self::C>> v11 = v10;
+  v10 = v11;
+}
+
+constants  {
+  #C1 = <core::List<dynamic>*>[]
+  #C2 = constructor-tearoff self::C::name2
+  #C3 = null
+  #C4 = <core::String*, dynamic>{)
+  #C5 = <self::C*>[]
+  #C6 = TypeLiteralConstant(dynamic)
+  #C7 = <core::Type*, core::Type*>{#C6:#C6)
+}
diff --git a/pkg/front_end/testcases/general/bounds_as_is.dart b/pkg/front_end/testcases/general/bounds_as_is.dart
new file mode 100644
index 0000000..419c5ae
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_as_is.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+t1a(o) => o as F; // Ok
+t2a(o) => o as F<dynamic>; // Ok
+t3a(o) => o as F<Class>; // Ok
+t4a(o) => o as F<Class<dynamic>>; // Ok
+t5a(o) => o as F<ConcreteClass>; // Ok
+t6a(o) => o as F<Class<ConcreteClass>>; // Ok
+t7a(o) => o as F<Object>; // Error
+t8a(o) => o as F<int>; // Error
+s1a(o) => o as G; // Ok
+s2a(o) => o as G<dynamic>; // Ok
+s3a(o) => o as G<Class>; // Ok
+s4a(o) => o as G<Class<dynamic>>; // Ok
+s5a(o) => o as G<ConcreteClass>; // Ok
+s6a(o) => o as G<Class<ConcreteClass>>; // Ok
+s7a(o) => o as G<Object>; // Error
+s8a(o) => o as G<int>; // Error
+
+t1b(o) => o is F; // Ok
+t2b(o) => o is F<dynamic>; // Ok
+t3b(o) => o is F<Class>; // Ok
+t4b(o) => o is F<Class<dynamic>>; // Ok
+t5b(o) => o is F<ConcreteClass>; // Ok
+t6b(o) => o is F<Class<ConcreteClass>>; // Ok
+t7b(o) => o is F<Object>; // Error
+t8b(o) => o is F<int>; // Error
+s1b(o) => o is G; // Ok
+s2b(o) => o is G<dynamic>; // Ok
+s3b(o) => o is G<Class>; // Ok
+s4b(o) => o is G<Class<dynamic>>; // Ok
+s5b(o) => o is G<ConcreteClass>; // Ok
+s6b(o) => o is G<Class<ConcreteClass>>; // Ok
+s7b(o) => o is G<Object>; // Error
+s8b(o) => o is G<int>; // Error
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_as_is.dart.textual_outline.expect b/pkg/front_end/testcases/general/bounds_as_is.dart.textual_outline.expect
new file mode 100644
index 0000000..7555a22
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_as_is.dart.textual_outline.expect
@@ -0,0 +1,41 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+t1a(o) => o as F;
+t2a(o) => o as F<dynamic>;
+t3a(o) => o as F<Class>;
+t4a(o) => o as F<Class<dynamic>>;
+t5a(o) => o as F<ConcreteClass>;
+t6a(o) => o as F<Class<ConcreteClass>>;
+t7a(o) => o as F<Object>;
+t8a(o) => o as F<int>;
+s1a(o) => o as G;
+s2a(o) => o as G<dynamic>;
+s3a(o) => o as G<Class>;
+s4a(o) => o as G<Class<dynamic>>;
+s5a(o) => o as G<ConcreteClass>;
+s6a(o) => o as G<Class<ConcreteClass>>;
+s7a(o) => o as G<Object>;
+s8a(o) => o as G<int>;
+t1b(o) => o is F;
+t2b(o) => o is F<dynamic>;
+t3b(o) => o is F<Class>;
+t4b(o) => o is F<Class<dynamic>>;
+t5b(o) => o is F<ConcreteClass>;
+t6b(o) => o is F<Class<ConcreteClass>>;
+t7b(o) => o is F<Object>;
+t8b(o) => o is F<int>;
+s1b(o) => o is G;
+s2b(o) => o is G<dynamic>;
+s3b(o) => o is G<Class>;
+s4b(o) => o is G<Class<dynamic>>;
+s5b(o) => o is G<ConcreteClass>;
+s6b(o) => o is G<Class<ConcreteClass>>;
+s7b(o) => o is G<Object>;
+s8b(o) => o is G<int>;
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_as_is.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bounds_as_is.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..733c503
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_as_is.dart.textual_outline_modelled.expect
@@ -0,0 +1,40 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+class G<X extends Class<X>> {}
+
+main() {}
+s1a(o) => o as G;
+s1b(o) => o is G;
+s2a(o) => o as G<dynamic>;
+s2b(o) => o is G<dynamic>;
+s3a(o) => o as G<Class>;
+s3b(o) => o is G<Class>;
+s4a(o) => o as G<Class<dynamic>>;
+s4b(o) => o is G<Class<dynamic>>;
+s5a(o) => o as G<ConcreteClass>;
+s5b(o) => o is G<ConcreteClass>;
+s6a(o) => o as G<Class<ConcreteClass>>;
+s6b(o) => o is G<Class<ConcreteClass>>;
+s7a(o) => o as G<Object>;
+s7b(o) => o is G<Object>;
+s8a(o) => o as G<int>;
+s8b(o) => o is G<int>;
+t1a(o) => o as F;
+t1b(o) => o is F;
+t2a(o) => o as F<dynamic>;
+t2b(o) => o is F<dynamic>;
+t3a(o) => o as F<Class>;
+t3b(o) => o is F<Class>;
+t4a(o) => o as F<Class<dynamic>>;
+t4b(o) => o is F<Class<dynamic>>;
+t5a(o) => o as F<ConcreteClass>;
+t5b(o) => o is F<ConcreteClass>;
+t6a(o) => o as F<Class<ConcreteClass>>;
+t6b(o) => o is F<Class<ConcreteClass>>;
+t7a(o) => o as F<Object>;
+t7b(o) => o is F<Object>;
+t8a(o) => o as F<int>;
+t8b(o) => o is F<int>;
+typedef F<X extends Class<X>> = X;
diff --git a/pkg/front_end/testcases/general/bounds_as_is.dart.weak.expect b/pkg/front_end/testcases/general/bounds_as_is.dart.weak.expect
new file mode 100644
index 0000000..2156140
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_as_is.dart.weak.expect
@@ -0,0 +1,164 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_as_is.dart:19:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// t7a(o) => o as F<Object>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:20:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// t8a(o) => o as F<int>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:27:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// s7a(o) => o as G<Object>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:28:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// s8a(o) => o as G<int>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:36:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// t7b(o) => o is F<Object>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:37:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// t8b(o) => o is F<int>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:44:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// s7b(o) => o is G<Object>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:45:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// s8b(o) => o is G<int>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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 o) → dynamic
+  return o as{ForNonNullableByDefault} self::Class<dynamic>;
+static method t2a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} dynamic;
+static method t3a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::Class<dynamic>;
+static method t4a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::Class<dynamic>;
+static method t5a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::ConcreteClass;
+static method t6a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::Class<self::ConcreteClass>;
+static method t7a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} core::Object;
+static method t8a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} core::int;
+static method s1a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<self::Class<dynamic>>;
+static method s2a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<dynamic>;
+static method s3a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<self::Class<dynamic>>;
+static method s4a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<self::Class<dynamic>>;
+static method s5a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<self::ConcreteClass>;
+static method s6a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<self::Class<self::ConcreteClass>>;
+static method s7a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<core::Object>;
+static method s8a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<core::int>;
+static method t1b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::Class<dynamic>;
+static method t2b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} dynamic;
+static method t3b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::Class<dynamic>;
+static method t4b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::Class<dynamic>;
+static method t5b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::ConcreteClass;
+static method t6b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::Class<self::ConcreteClass>;
+static method t7b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} core::Object;
+static method t8b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} core::int;
+static method s1b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<self::Class<dynamic>>;
+static method s2b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<dynamic>;
+static method s3b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<self::Class<dynamic>>;
+static method s4b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<self::Class<dynamic>>;
+static method s5b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<self::ConcreteClass>;
+static method s6b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<self::Class<self::ConcreteClass>>;
+static method s7b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<core::Object>;
+static method s8b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<core::int>;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_as_is.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_as_is.dart.weak.modular.expect
new file mode 100644
index 0000000..2156140
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_as_is.dart.weak.modular.expect
@@ -0,0 +1,164 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_as_is.dart:19:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// t7a(o) => o as F<Object>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:20:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// t8a(o) => o as F<int>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:27:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// s7a(o) => o as G<Object>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:28:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// s8a(o) => o as G<int>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:36:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// t7b(o) => o is F<Object>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:37:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// t8b(o) => o is F<int>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:44:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// s7b(o) => o is G<Object>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:45:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// s8b(o) => o is G<int>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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 o) → dynamic
+  return o as{ForNonNullableByDefault} self::Class<dynamic>;
+static method t2a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} dynamic;
+static method t3a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::Class<dynamic>;
+static method t4a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::Class<dynamic>;
+static method t5a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::ConcreteClass;
+static method t6a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::Class<self::ConcreteClass>;
+static method t7a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} core::Object;
+static method t8a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} core::int;
+static method s1a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<self::Class<dynamic>>;
+static method s2a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<dynamic>;
+static method s3a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<self::Class<dynamic>>;
+static method s4a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<self::Class<dynamic>>;
+static method s5a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<self::ConcreteClass>;
+static method s6a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<self::Class<self::ConcreteClass>>;
+static method s7a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<core::Object>;
+static method s8a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<core::int>;
+static method t1b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::Class<dynamic>;
+static method t2b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} dynamic;
+static method t3b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::Class<dynamic>;
+static method t4b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::Class<dynamic>;
+static method t5b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::ConcreteClass;
+static method t6b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::Class<self::ConcreteClass>;
+static method t7b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} core::Object;
+static method t8b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} core::int;
+static method s1b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<self::Class<dynamic>>;
+static method s2b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<dynamic>;
+static method s3b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<self::Class<dynamic>>;
+static method s4b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<self::Class<dynamic>>;
+static method s5b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<self::ConcreteClass>;
+static method s6b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<self::Class<self::ConcreteClass>>;
+static method s7b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<core::Object>;
+static method s8b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<core::int>;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_as_is.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_as_is.dart.weak.outline.expect
new file mode 100644
index 0000000..1dafbce
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_as_is.dart.weak.outline.expect
@@ -0,0 +1,83 @@
+library /*isNonNullableByDefault*/;
+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>
+    ;
+}
+static method t1a(dynamic o) → dynamic
+  ;
+static method t2a(dynamic o) → dynamic
+  ;
+static method t3a(dynamic o) → dynamic
+  ;
+static method t4a(dynamic o) → dynamic
+  ;
+static method t5a(dynamic o) → dynamic
+  ;
+static method t6a(dynamic o) → dynamic
+  ;
+static method t7a(dynamic o) → dynamic
+  ;
+static method t8a(dynamic o) → dynamic
+  ;
+static method s1a(dynamic o) → dynamic
+  ;
+static method s2a(dynamic o) → dynamic
+  ;
+static method s3a(dynamic o) → dynamic
+  ;
+static method s4a(dynamic o) → dynamic
+  ;
+static method s5a(dynamic o) → dynamic
+  ;
+static method s6a(dynamic o) → dynamic
+  ;
+static method s7a(dynamic o) → dynamic
+  ;
+static method s8a(dynamic o) → dynamic
+  ;
+static method t1b(dynamic o) → dynamic
+  ;
+static method t2b(dynamic o) → dynamic
+  ;
+static method t3b(dynamic o) → dynamic
+  ;
+static method t4b(dynamic o) → dynamic
+  ;
+static method t5b(dynamic o) → dynamic
+  ;
+static method t6b(dynamic o) → dynamic
+  ;
+static method t7b(dynamic o) → dynamic
+  ;
+static method t8b(dynamic o) → dynamic
+  ;
+static method s1b(dynamic o) → dynamic
+  ;
+static method s2b(dynamic o) → dynamic
+  ;
+static method s3b(dynamic o) → dynamic
+  ;
+static method s4b(dynamic o) → dynamic
+  ;
+static method s5b(dynamic o) → dynamic
+  ;
+static method s6b(dynamic o) → dynamic
+  ;
+static method s7b(dynamic o) → dynamic
+  ;
+static method s8b(dynamic o) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/bounds_as_is.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_as_is.dart.weak.transformed.expect
new file mode 100644
index 0000000..e45870b
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_as_is.dart.weak.transformed.expect
@@ -0,0 +1,164 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_as_is.dart:19:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// t7a(o) => o as F<Object>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:20:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// t8a(o) => o as F<int>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:27:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// s7a(o) => o as G<Object>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:28:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// s8a(o) => o as G<int>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:36:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// t7b(o) => o is F<Object>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:37:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// t8b(o) => o is F<int>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:44:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// s7b(o) => o is G<Object>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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_as_is.dart:45:16: 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_as_is.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// s8b(o) => o is G<int>; // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_as_is.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 o) → dynamic
+  return o as{ForNonNullableByDefault} self::Class<dynamic>;
+static method t2a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} dynamic;
+static method t3a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::Class<dynamic>;
+static method t4a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::Class<dynamic>;
+static method t5a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::ConcreteClass;
+static method t6a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::Class<self::ConcreteClass>;
+static method t7a(dynamic o) → dynamic
+  return o;
+static method t8a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} core::int;
+static method s1a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<self::Class<dynamic>>;
+static method s2a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<dynamic>;
+static method s3a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<self::Class<dynamic>>;
+static method s4a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<self::Class<dynamic>>;
+static method s5a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<self::ConcreteClass>;
+static method s6a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<self::Class<self::ConcreteClass>>;
+static method s7a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<core::Object>;
+static method s8a(dynamic o) → dynamic
+  return o as{ForNonNullableByDefault} self::G<core::int>;
+static method t1b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::Class<dynamic>;
+static method t2b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} dynamic;
+static method t3b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::Class<dynamic>;
+static method t4b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::Class<dynamic>;
+static method t5b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::ConcreteClass;
+static method t6b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::Class<self::ConcreteClass>;
+static method t7b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} core::Object;
+static method t8b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} core::int;
+static method s1b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<self::Class<dynamic>>;
+static method s2b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<dynamic>;
+static method s3b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<self::Class<dynamic>>;
+static method s4b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<self::Class<dynamic>>;
+static method s5b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<self::ConcreteClass>;
+static method s6b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<self::Class<self::ConcreteClass>>;
+static method s7b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<core::Object>;
+static method s8b(dynamic o) → dynamic
+  return o is{ForNonNullableByDefault} self::G<core::int>;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_catch.dart b/pkg/front_end/testcases/general/bounds_catch.dart
new file mode 100644
index 0000000..84f78bd
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_catch.dart
@@ -0,0 +1,205 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+t1a() {
+  try {} on F catch (e) {
+    // Ok
+  }
+}
+
+t2a() {
+  try {} on F<dynamic> catch (e) {
+    // Ok
+  }
+}
+
+t3a() {
+  try {} on F<Class> catch (e) {
+    // Ok
+  }
+}
+
+t4a() {
+  try {} on F<Class<dynamic>> catch (e) {
+    // Ok
+  }
+}
+
+t5a() {
+  try {} on F<ConcreteClass> catch (e) {
+    // Ok
+  }
+}
+
+t6a() {
+  try {} on F<Class<ConcreteClass>> catch (e) {
+    // Ok
+  }
+}
+
+t7a() {
+  try {} on F<Object> catch (e) {
+    // Error
+  }
+}
+
+t8a() {
+  try {} on F<int> catch (e) {
+    // Error
+  }
+}
+
+s1a() {
+  try {} on G catch (e) {
+    // Ok
+  }
+}
+
+s2a() {
+  try {} on G<dynamic> catch (e) {
+    // Ok
+  }
+}
+
+s3a() {
+  try {} on G<Class> catch (e) {
+    // Ok
+  }
+}
+
+s4a() {
+  try {} on G<Class<dynamic>> catch (e) {
+    // Ok
+  }
+}
+
+s5a() {
+  try {} on G<ConcreteClass> catch (e) {
+    // Ok
+  }
+}
+
+s6a() {
+  try {} on G<Class<ConcreteClass>> catch (e) {
+    // Ok
+  }
+}
+
+s7a() {
+  try {} on G<Object> catch (e) {
+    // Error
+  }
+}
+
+s8a() {
+  try {} on G<int> catch (e) {
+    // Error
+  }
+}
+
+t1b() {
+  try {} on F catch (e) {
+    // Ok
+  }
+}
+
+t2b() {
+  try {} on F<dynamic> catch (e) {
+    // Ok
+  }
+}
+
+t3b() {
+  try {} on F<Class> catch (e) {
+    // Ok
+  }
+}
+
+t4b() {
+  try {} on F<Class<dynamic>> catch (e) {
+    // Ok
+  }
+}
+
+t5b() {
+  try {} on F<ConcreteClass> catch (e) {
+    // Ok
+  }
+}
+
+t6b() {
+  try {} on F<Class<ConcreteClass>> catch (e) {
+    // Ok
+  }
+}
+
+t7b() {
+  try {} on F<Object> catch (e) {
+    // Error
+  }
+}
+
+t8b() {
+  try {} on F<int> catch (e) {
+    // Error
+  }
+}
+
+s1b() {
+  try {} on G catch (e) {
+    // Ok
+  }
+}
+
+s2b() {
+  try {} on G<dynamic> catch (e) {
+    // Ok
+  }
+}
+
+s3b() {
+  try {} on G<Class> catch (e) {
+    // Ok
+  }
+}
+
+s4b() {
+  try {} on G<Class<dynamic>> catch (e) {
+    // Ok
+  }
+}
+
+s5b() {
+  try {} on G<ConcreteClass> catch (e) {
+    // Ok
+  }
+}
+
+s6b() {
+  try {} on G<Class<ConcreteClass>> catch (e) {
+    // Ok
+  }
+}
+
+s7b() {
+  try {} on G<Object> catch (e) {
+    // Error
+  }
+}
+
+s8b() {
+  try {} on G<int> catch (e) {
+    // Error
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_catch.dart.textual_outline.expect b/pkg/front_end/testcases/general/bounds_catch.dart.textual_outline.expect
new file mode 100644
index 0000000..986be5e
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_catch.dart.textual_outline.expect
@@ -0,0 +1,41 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+t1a() {}
+t2a() {}
+t3a() {}
+t4a() {}
+t5a() {}
+t6a() {}
+t7a() {}
+t8a() {}
+s1a() {}
+s2a() {}
+s3a() {}
+s4a() {}
+s5a() {}
+s6a() {}
+s7a() {}
+s8a() {}
+t1b() {}
+t2b() {}
+t3b() {}
+t4b() {}
+t5b() {}
+t6b() {}
+t7b() {}
+t8b() {}
+s1b() {}
+s2b() {}
+s3b() {}
+s4b() {}
+s5b() {}
+s6b() {}
+s7b() {}
+s8b() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_catch.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bounds_catch.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..ff62b0a
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_catch.dart.textual_outline_modelled.expect
@@ -0,0 +1,40 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+class G<X extends Class<X>> {}
+
+main() {}
+s1a() {}
+s1b() {}
+s2a() {}
+s2b() {}
+s3a() {}
+s3b() {}
+s4a() {}
+s4b() {}
+s5a() {}
+s5b() {}
+s6a() {}
+s6b() {}
+s7a() {}
+s7b() {}
+s8a() {}
+s8b() {}
+t1a() {}
+t1b() {}
+t2a() {}
+t2b() {}
+t3a() {}
+t3b() {}
+t4a() {}
+t4b() {}
+t5a() {}
+t5b() {}
+t6a() {}
+t6b() {}
+t7a() {}
+t7b() {}
+t8a() {}
+t8b() {}
+typedef F<X extends Class<X>> = X;
diff --git a/pkg/front_end/testcases/general/bounds_catch.dart.weak.expect b/pkg/front_end/testcases/general/bounds_catch.dart.weak.expect
new file mode 100644
index 0000000..d56af17
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_catch.dart.weak.expect
@@ -0,0 +1,292 @@
+library /*isNonNullableByDefault*/;
+//
+// 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:56: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:98: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:104: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:146: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:152: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:194: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:200: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 {}
diff --git a/pkg/front_end/testcases/general/bounds_catch.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_catch.dart.weak.modular.expect
new file mode 100644
index 0000000..d56af17
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_catch.dart.weak.modular.expect
@@ -0,0 +1,292 @@
+library /*isNonNullableByDefault*/;
+//
+// 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:56: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:98: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:104: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:146: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:152: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:194: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:200: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 {}
diff --git a/pkg/front_end/testcases/general/bounds_catch.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_catch.dart.weak.outline.expect
new file mode 100644
index 0000000..1bd5e4a
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_catch.dart.weak.outline.expect
@@ -0,0 +1,83 @@
+library /*isNonNullableByDefault*/;
+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>
+    ;
+}
+static method t1a() → dynamic
+  ;
+static method t2a() → dynamic
+  ;
+static method t3a() → dynamic
+  ;
+static method t4a() → dynamic
+  ;
+static method t5a() → dynamic
+  ;
+static method t6a() → dynamic
+  ;
+static method t7a() → dynamic
+  ;
+static method t8a() → dynamic
+  ;
+static method s1a() → dynamic
+  ;
+static method s2a() → dynamic
+  ;
+static method s3a() → dynamic
+  ;
+static method s4a() → dynamic
+  ;
+static method s5a() → dynamic
+  ;
+static method s6a() → dynamic
+  ;
+static method s7a() → dynamic
+  ;
+static method s8a() → dynamic
+  ;
+static method t1b() → dynamic
+  ;
+static method t2b() → dynamic
+  ;
+static method t3b() → dynamic
+  ;
+static method t4b() → dynamic
+  ;
+static method t5b() → dynamic
+  ;
+static method t6b() → dynamic
+  ;
+static method t7b() → dynamic
+  ;
+static method t8b() → dynamic
+  ;
+static method s1b() → dynamic
+  ;
+static method s2b() → dynamic
+  ;
+static method s3b() → dynamic
+  ;
+static method s4b() → dynamic
+  ;
+static method s5b() → dynamic
+  ;
+static method s6b() → dynamic
+  ;
+static method s7b() → dynamic
+  ;
+static method s8b() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/bounds_catch.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_catch.dart.weak.transformed.expect
new file mode 100644
index 0000000..d56af17
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_catch.dart.weak.transformed.expect
@@ -0,0 +1,292 @@
+library /*isNonNullableByDefault*/;
+//
+// 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:56: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:98: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:104: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:146: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:152: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:194: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:200: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 {}
diff --git a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.expect b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.expect
index 3cebc8b..3b587bb 100644
--- a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.expect
@@ -2,18 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:7:40: Error: Type argument 'Y' doesn't conform to the bound 'String' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:7:32: Error: Type argument 'Y' doesn't conform to the bound 'String' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef F = Function<Z extends A<Y>>() Function<Y extends num>();
-//                                        ^
+//                                ^
 // pkg/front_end/testcases/general/bounds_check_in_typedef.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends String> {}
 //         ^
 //
-// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:8:18: Error: Type argument 'Y' doesn't conform to the bound 'String' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:8:61: Error: Type argument 'Y' doesn't conform to the bound 'String' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef G = void Function<Y extends num>(Function<Z extends A<Y>>());
-//                  ^
+//                                                             ^
 // pkg/front_end/testcases/general/bounds_check_in_typedef.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends String> {}
 //         ^
diff --git a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.modular.expect
index 3cebc8b..3b587bb 100644
--- a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.modular.expect
@@ -2,18 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:7:40: Error: Type argument 'Y' doesn't conform to the bound 'String' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:7:32: Error: Type argument 'Y' doesn't conform to the bound 'String' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef F = Function<Z extends A<Y>>() Function<Y extends num>();
-//                                        ^
+//                                ^
 // pkg/front_end/testcases/general/bounds_check_in_typedef.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends String> {}
 //         ^
 //
-// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:8:18: Error: Type argument 'Y' doesn't conform to the bound 'String' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:8:61: Error: Type argument 'Y' doesn't conform to the bound 'String' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef G = void Function<Y extends num>(Function<Z extends A<Y>>());
-//                  ^
+//                                                             ^
 // pkg/front_end/testcases/general/bounds_check_in_typedef.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends String> {}
 //         ^
diff --git a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.outline.expect
index d778825..9a4c7c1 100644
--- a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.outline.expect
@@ -2,18 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:7:40: Error: Type argument 'Y' doesn't conform to the bound 'String' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:7:32: Error: Type argument 'Y' doesn't conform to the bound 'String' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef F = Function<Z extends A<Y>>() Function<Y extends num>();
-//                                        ^
+//                                ^
 // pkg/front_end/testcases/general/bounds_check_in_typedef.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends String> {}
 //         ^
 //
-// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:8:18: Error: Type argument 'Y' doesn't conform to the bound 'String' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:8:61: Error: Type argument 'Y' doesn't conform to the bound 'String' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef G = void Function<Y extends num>(Function<Z extends A<Y>>());
-//                  ^
+//                                                             ^
 // pkg/front_end/testcases/general/bounds_check_in_typedef.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends String> {}
 //         ^
diff --git a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.transformed.expect
index 3cebc8b..3b587bb 100644
--- a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.transformed.expect
@@ -2,18 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:7:40: Error: Type argument 'Y' doesn't conform to the bound 'String' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:7:32: Error: Type argument 'Y' doesn't conform to the bound 'String' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef F = Function<Z extends A<Y>>() Function<Y extends num>();
-//                                        ^
+//                                ^
 // pkg/front_end/testcases/general/bounds_check_in_typedef.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends String> {}
 //         ^
 //
-// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:8:18: Error: Type argument 'Y' doesn't conform to the bound 'String' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:8:61: Error: Type argument 'Y' doesn't conform to the bound 'String' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef G = void Function<Y extends num>(Function<Z extends A<Y>>());
-//                  ^
+//                                                             ^
 // pkg/front_end/testcases/general/bounds_check_in_typedef.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends String> {}
 //         ^
diff --git a/pkg/front_end/testcases/general/bounds_enums.dart b/pkg/front_end/testcases/general/bounds_enums.dart
new file mode 100644
index 0000000..d773c42
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_enums.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// TODO(johnniwinther): Check/create this type as regular bounded i2b.
+
+typedef A<X> = X Function(X);
+
+class B<X> {}
+
+enum E1<Y extends A<Y>> /* Error */ {
+  e1<Never>() // Ok
+}
+
+enum E2<Y extends B<Y>> /* Error */ {
+  e2<Never>() // Ok
+}
+
+enum E3<Y extends E3<Y>> /* Error */ {
+  e3<Never>() // Ok
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_enums.dart.textual_outline.expect b/pkg/front_end/testcases/general/bounds_enums.dart.textual_outline.expect
new file mode 100644
index 0000000..1fb4a64
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_enums.dart.textual_outline.expect
@@ -0,0 +1,11 @@
+typedef A<X> = X Function(X);
+
+class B<X> {}
+
+enum E1<Y extends A<Y>> { e1<Never>() }
+
+enum E2<Y extends B<Y>> { e2<Never>() }
+
+enum E3<Y extends E3<Y>> { e3<Never>() }
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_enums.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bounds_enums.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..2dba339
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_enums.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+class B<X> {}
+
+enum E1<Y extends A<Y>> { e1<Never>() }
+
+enum E2<Y extends B<Y>> { e2<Never>() }
+
+enum E3<Y extends E3<Y>> { e3<Never>() }
+
+main() {}
+typedef A<X> = X Function(X);
diff --git a/pkg/front_end/testcases/general/bounds_enums.dart.weak.expect b/pkg/front_end/testcases/general/bounds_enums.dart.weak.expect
new file mode 100644
index 0000000..0ac15942
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_enums.dart.weak.expect
@@ -0,0 +1,75 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_enums.dart:11:6: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'Y Function(Y)' of the type variable 'Y' on 'E1'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum E1<Y extends A<Y>> /* Error */ {
+//      ^
+// pkg/front_end/testcases/general/bounds_enums.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// enum E1<Y extends A<Y>> /* Error */ {
+//         ^
+// pkg/front_end/testcases/general/bounds_enums.dart:11:6: Context: If you want 'E1<A<dynamic>>' to be a super-bounded type, note that the inverted type 'E1<A<Never>>' must then satisfy its bounds, which it does not.
+//  - 'E1' is from 'pkg/front_end/testcases/general/bounds_enums.dart'.
+// enum E1<Y extends A<Y>> /* Error */ {
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef A<invariant X extends core::Object? = dynamic> = (X%) → X%;
+class B<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+}
+class E1<Y extends (self::E1::Y) → self::E1::Y = (dynamic) → dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1<(dynamic) → dynamic>> values = #C4;
+  static const field self::E1<Never> e1 = #C3;
+  const constructor •(core::int index, core::String name) → self::E1<self::E1::Y>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2<Y extends self::B<self::E2::Y> = self::B<dynamic>> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2<self::B<dynamic>>> values = #C7;
+  static const field self::E2<Never> e2 = #C6;
+  const constructor •(core::int index, core::String name) → self::E2<self::E2::Y>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3<Y extends self::E3<self::E3::Y> = self::E3<dynamic>> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3<self::E3<dynamic>>> values = #C10;
+  static const field self::E3<Never> e3 = #C9;
+  const constructor •(core::int index, core::String name) → self::E3<self::E3::Y>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::E1<Never*> {index:#C1, _name:#C2}
+  #C4 = <self::E1<dynamic>*>[#C3]
+  #C5 = "e2"
+  #C6 = self::E2<Never*> {index:#C1, _name:#C5}
+  #C7 = <self::E2<dynamic>*>[#C6]
+  #C8 = "e3"
+  #C9 = self::E3<Never*> {index:#C1, _name:#C8}
+  #C10 = <self::E3<dynamic>*>[#C9]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///bounds_enums.dart:
+- E1. (from org-dartlang-testcase:///bounds_enums.dart:11:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///bounds_enums.dart:15:6)
+- E3. (from org-dartlang-testcase:///bounds_enums.dart:19:6)
diff --git a/pkg/front_end/testcases/general/bounds_enums.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_enums.dart.weak.modular.expect
new file mode 100644
index 0000000..0ac15942
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_enums.dart.weak.modular.expect
@@ -0,0 +1,75 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_enums.dart:11:6: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'Y Function(Y)' of the type variable 'Y' on 'E1'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum E1<Y extends A<Y>> /* Error */ {
+//      ^
+// pkg/front_end/testcases/general/bounds_enums.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// enum E1<Y extends A<Y>> /* Error */ {
+//         ^
+// pkg/front_end/testcases/general/bounds_enums.dart:11:6: Context: If you want 'E1<A<dynamic>>' to be a super-bounded type, note that the inverted type 'E1<A<Never>>' must then satisfy its bounds, which it does not.
+//  - 'E1' is from 'pkg/front_end/testcases/general/bounds_enums.dart'.
+// enum E1<Y extends A<Y>> /* Error */ {
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef A<invariant X extends core::Object? = dynamic> = (X%) → X%;
+class B<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+}
+class E1<Y extends (self::E1::Y) → self::E1::Y = (dynamic) → dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1<(dynamic) → dynamic>> values = #C4;
+  static const field self::E1<Never> e1 = #C3;
+  const constructor •(core::int index, core::String name) → self::E1<self::E1::Y>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2<Y extends self::B<self::E2::Y> = self::B<dynamic>> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2<self::B<dynamic>>> values = #C7;
+  static const field self::E2<Never> e2 = #C6;
+  const constructor •(core::int index, core::String name) → self::E2<self::E2::Y>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3<Y extends self::E3<self::E3::Y> = self::E3<dynamic>> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3<self::E3<dynamic>>> values = #C10;
+  static const field self::E3<Never> e3 = #C9;
+  const constructor •(core::int index, core::String name) → self::E3<self::E3::Y>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::E1<Never*> {index:#C1, _name:#C2}
+  #C4 = <self::E1<dynamic>*>[#C3]
+  #C5 = "e2"
+  #C6 = self::E2<Never*> {index:#C1, _name:#C5}
+  #C7 = <self::E2<dynamic>*>[#C6]
+  #C8 = "e3"
+  #C9 = self::E3<Never*> {index:#C1, _name:#C8}
+  #C10 = <self::E3<dynamic>*>[#C9]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///bounds_enums.dart:
+- E1. (from org-dartlang-testcase:///bounds_enums.dart:11:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///bounds_enums.dart:15:6)
+- E3. (from org-dartlang-testcase:///bounds_enums.dart:19:6)
diff --git a/pkg/front_end/testcases/general/bounds_enums.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_enums.dart.weak.outline.expect
new file mode 100644
index 0000000..8034688
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_enums.dart.weak.outline.expect
@@ -0,0 +1,63 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_enums.dart:11:6: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'Y Function(Y)' of the type variable 'Y' on 'E1'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum E1<Y extends A<Y>> /* Error */ {
+//      ^
+// pkg/front_end/testcases/general/bounds_enums.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// enum E1<Y extends A<Y>> /* Error */ {
+//         ^
+// pkg/front_end/testcases/general/bounds_enums.dart:11:6: Context: If you want 'E1<A<dynamic>>' to be a super-bounded type, note that the inverted type 'E1<A<Never>>' must then satisfy its bounds, which it does not.
+//  - 'E1' is from 'pkg/front_end/testcases/general/bounds_enums.dart'.
+// enum E1<Y extends A<Y>> /* Error */ {
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef A<invariant X extends core::Object? = dynamic> = (X%) → X%;
+class B<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%>
+    ;
+}
+class E1<Y extends (self::E1::Y) → self::E1::Y = (dynamic) → dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1<(dynamic) → dynamic>> values = const <self::E1<dynamic>>[self::E1::e1];
+  static const field self::E1<Never> e1 = const self::E1::•<Never>(0, "e1");
+  const constructor •(core::int index, core::String name) → self::E1<self::E1::Y>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2<Y extends self::B<self::E2::Y> = self::B<dynamic>> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2<self::B<dynamic>>> values = const <self::E2<dynamic>>[self::E2::e2];
+  static const field self::E2<Never> e2 = const self::E2::•<Never>(0, "e2");
+  const constructor •(core::int index, core::String name) → self::E2<self::E2::Y>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3<Y extends self::E3<self::E3::Y> = self::E3<dynamic>> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3<self::E3<dynamic>>> values = const <self::E3<dynamic>>[self::E3::e3];
+  static const field self::E3<Never> e3 = const self::E3::•<Never>(0, "e3");
+  const constructor •(core::int index, core::String name) → self::E3<self::E3::Y>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_enums.dart:11:6 -> ListConstant(const <E1<dynamic>*>[const E1<Never*>{_Enum.index: 0, _Enum._name: "e1"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_enums.dart:12:3 -> InstanceConstant(const E1<Never*>{_Enum.index: 0, _Enum._name: "e1"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_enums.dart:15:6 -> ListConstant(const <E2<dynamic>*>[const E2<Never*>{_Enum.index: 0, _Enum._name: "e2"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_enums.dart:16:3 -> InstanceConstant(const E2<Never*>{_Enum.index: 0, _Enum._name: "e2"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_enums.dart:19:6 -> ListConstant(const <E3<dynamic>*>[const E3<Never*>{_Enum.index: 0, _Enum._name: "e3"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_enums.dart:20:3 -> InstanceConstant(const E3<Never*>{_Enum.index: 0, _Enum._name: "e3"})
+Extra constant evaluation: evaluated: 21, effectively constant: 6
diff --git a/pkg/front_end/testcases/general/bounds_enums.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_enums.dart.weak.transformed.expect
new file mode 100644
index 0000000..0ac15942
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_enums.dart.weak.transformed.expect
@@ -0,0 +1,75 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_enums.dart:11:6: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'Y Function(Y)' of the type variable 'Y' on 'E1'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum E1<Y extends A<Y>> /* Error */ {
+//      ^
+// pkg/front_end/testcases/general/bounds_enums.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// enum E1<Y extends A<Y>> /* Error */ {
+//         ^
+// pkg/front_end/testcases/general/bounds_enums.dart:11:6: Context: If you want 'E1<A<dynamic>>' to be a super-bounded type, note that the inverted type 'E1<A<Never>>' must then satisfy its bounds, which it does not.
+//  - 'E1' is from 'pkg/front_end/testcases/general/bounds_enums.dart'.
+// enum E1<Y extends A<Y>> /* Error */ {
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef A<invariant X extends core::Object? = dynamic> = (X%) → X%;
+class B<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+}
+class E1<Y extends (self::E1::Y) → self::E1::Y = (dynamic) → dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1<(dynamic) → dynamic>> values = #C4;
+  static const field self::E1<Never> e1 = #C3;
+  const constructor •(core::int index, core::String name) → self::E1<self::E1::Y>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2<Y extends self::B<self::E2::Y> = self::B<dynamic>> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2<self::B<dynamic>>> values = #C7;
+  static const field self::E2<Never> e2 = #C6;
+  const constructor •(core::int index, core::String name) → self::E2<self::E2::Y>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3<Y extends self::E3<self::E3::Y> = self::E3<dynamic>> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3<self::E3<dynamic>>> values = #C10;
+  static const field self::E3<Never> e3 = #C9;
+  const constructor •(core::int index, core::String name) → self::E3<self::E3::Y>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::E1<Never*> {index:#C1, _name:#C2}
+  #C4 = <self::E1<dynamic>*>[#C3]
+  #C5 = "e2"
+  #C6 = self::E2<Never*> {index:#C1, _name:#C5}
+  #C7 = <self::E2<dynamic>*>[#C6]
+  #C8 = "e3"
+  #C9 = self::E3<Never*> {index:#C1, _name:#C8}
+  #C10 = <self::E3<dynamic>*>[#C9]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///bounds_enums.dart:
+- E1. (from org-dartlang-testcase:///bounds_enums.dart:11:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///bounds_enums.dart:15:6)
+- E3. (from org-dartlang-testcase:///bounds_enums.dart:19:6)
diff --git a/pkg/front_end/testcases/general/bounds_fields.dart b/pkg/front_end/testcases/general/bounds_fields.dart
new file mode 100644
index 0000000..b840fce
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_fields.dart
@@ -0,0 +1,68 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+F? field1a, field1b; // Ok
+F<dynamic>? field2a, field2b; // Ok
+F<Class>? field3a, field3b; // Ok
+F<Class<dynamic>>? field4a, field4b; // Ok
+F<ConcreteClass>? field5a, field5b; // Ok
+F<Class<ConcreteClass>>? field6a, field6b; // Ok
+F<Object>? field7a, field7b; // Error
+F<int>? field8a, field8b; // Error
+G? field1c, field1d; // Ok
+G<dynamic>? field2c, field2d; // Ok
+G<Class>? field3c, field3d; // Ok
+G<Class<dynamic>>? field4c, field4d; // Ok
+G<ConcreteClass>? field5c, field5d; // Ok
+G<Class<ConcreteClass>>? field6c, field6d; // Ok
+G<Object>? field7c, field8d; // Error
+G<int>? field8c, field7d; // Error
+
+class Class1 {
+  F? field1a, field1b; // Ok
+  F<dynamic>? field2a, field2b; // Ok
+  F<Class>? field3a, field3b; // Ok
+  F<Class<dynamic>>? field4a, field4b; // Ok
+  F<ConcreteClass>? field5a, field5b; // Ok
+  F<Class<ConcreteClass>>? field6a, field6b; // Ok
+  F<Object>? field7a, field7b; // Error
+  F<int>? field8a, field8b; // Error
+  G? field1c, field1d; // Ok
+  G<dynamic>? field2c, field2d; // Ok
+  G<Class>? field3c, field3d; // Ok
+  G<Class<dynamic>>? field4c, field4d; // Ok
+  G<ConcreteClass>? field5c, field5d; // Ok
+  G<Class<ConcreteClass>>? field6c, field6d; // Ok
+  G<Object>? field7c, field8d; // Error
+  G<int>? field8c, field7d; // Error
+}
+
+extension Extension1 on int {
+  static F? field1a, field1b; // Ok
+  static F<dynamic>? field2a, field2b; // Ok
+  static F<Class>? field3a, field3b; // Ok
+  static F<Class<dynamic>>? field4a, field4b; // Ok
+  static F<ConcreteClass>? field5a, field5b; // Ok
+  static F<Class<ConcreteClass>>? field6a, field6b; // Ok
+  static F<Object>? field7a, field7b; // Error
+  static F<int>? field8a, field8b; // Error
+  static G? field1c, field1d; // Ok
+  static G<dynamic>? field2c, field2d; // Ok
+  static G<Class>? field3c, field3d; // Ok
+  static G<Class<dynamic>>? field4c, field4d; // Ok
+  static G<ConcreteClass>? field5c, field5d; // Ok
+  static G<Class<ConcreteClass>>? field6c, field6d; // Ok
+  static G<Object>? field7c, field8d; // Error
+  static G<int>? field8c, field7d; // Error
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_fields.dart.textual_outline.expect b/pkg/front_end/testcases/general/bounds_fields.dart.textual_outline.expect
new file mode 100644
index 0000000..827a05b
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_fields.dart.textual_outline.expect
@@ -0,0 +1,64 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+F? field1a, field1b;
+F<dynamic>? field2a, field2b;
+F<Class>? field3a, field3b;
+F<Class<dynamic>>? field4a, field4b;
+F<ConcreteClass>? field5a, field5b;
+F<Class<ConcreteClass>>? field6a, field6b;
+F<Object>? field7a, field7b;
+F<int>? field8a, field8b;
+G? field1c, field1d;
+G<dynamic>? field2c, field2d;
+G<Class>? field3c, field3d;
+G<Class<dynamic>>? field4c, field4d;
+G<ConcreteClass>? field5c, field5d;
+G<Class<ConcreteClass>>? field6c, field6d;
+G<Object>? field7c, field8d;
+G<int>? field8c, field7d;
+
+class Class1 {
+  F? field1a, field1b;
+  F<dynamic>? field2a, field2b;
+  F<Class>? field3a, field3b;
+  F<Class<dynamic>>? field4a, field4b;
+  F<ConcreteClass>? field5a, field5b;
+  F<Class<ConcreteClass>>? field6a, field6b;
+  F<Object>? field7a, field7b;
+  F<int>? field8a, field8b;
+  G? field1c, field1d;
+  G<dynamic>? field2c, field2d;
+  G<Class>? field3c, field3d;
+  G<Class<dynamic>>? field4c, field4d;
+  G<ConcreteClass>? field5c, field5d;
+  G<Class<ConcreteClass>>? field6c, field6d;
+  G<Object>? field7c, field8d;
+  G<int>? field8c, field7d;
+}
+
+extension Extension1 on int {
+  static F? field1a, field1b;
+  static F<dynamic>? field2a, field2b;
+  static F<Class>? field3a, field3b;
+  static F<Class<dynamic>>? field4a, field4b;
+  static F<ConcreteClass>? field5a, field5b;
+  static F<Class<ConcreteClass>>? field6a, field6b;
+  static F<Object>? field7a, field7b;
+  static F<int>? field8a, field8b;
+  static G? field1c, field1d;
+  static G<dynamic>? field2c, field2d;
+  static G<Class>? field3c, field3d;
+  static G<Class<dynamic>>? field4c, field4d;
+  static G<ConcreteClass>? field5c, field5d;
+  static G<Class<ConcreteClass>>? field6c, field6d;
+  static G<Object>? field7c, field8d;
+  static G<int>? field8c, field7d;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_fields.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bounds_fields.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..064b48e
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_fields.dart.textual_outline_modelled.expect
@@ -0,0 +1,63 @@
+F<Class<ConcreteClass>>? field6a, field6b;
+F<Class<dynamic>>? field4a, field4b;
+F<Class>? field3a, field3b;
+F<ConcreteClass>? field5a, field5b;
+F<Object>? field7a, field7b;
+F<dynamic>? field2a, field2b;
+F<int>? field8a, field8b;
+F? field1a, field1b;
+G<Class<ConcreteClass>>? field6c, field6d;
+G<Class<dynamic>>? field4c, field4d;
+G<Class>? field3c, field3d;
+G<ConcreteClass>? field5c, field5d;
+G<Object>? field7c, field8d;
+G<dynamic>? field2c, field2d;
+G<int>? field8c, field7d;
+G? field1c, field1d;
+
+class Class<T> {}
+
+class Class1 {
+  F<Class<ConcreteClass>>? field6a, field6b;
+  F<Class<dynamic>>? field4a, field4b;
+  F<Class>? field3a, field3b;
+  F<ConcreteClass>? field5a, field5b;
+  F<Object>? field7a, field7b;
+  F<dynamic>? field2a, field2b;
+  F<int>? field8a, field8b;
+  F? field1a, field1b;
+  G<Class<ConcreteClass>>? field6c, field6d;
+  G<Class<dynamic>>? field4c, field4d;
+  G<Class>? field3c, field3d;
+  G<ConcreteClass>? field5c, field5d;
+  G<Object>? field7c, field8d;
+  G<dynamic>? field2c, field2d;
+  G<int>? field8c, field7d;
+  G? field1c, field1d;
+}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+class G<X extends Class<X>> {}
+
+extension Extension1 on int {
+  static F<Class<ConcreteClass>>? field6a, field6b;
+  static F<Class<dynamic>>? field4a, field4b;
+  static F<Class>? field3a, field3b;
+  static F<ConcreteClass>? field5a, field5b;
+  static F<Object>? field7a, field7b;
+  static F<dynamic>? field2a, field2b;
+  static F<int>? field8a, field8b;
+  static F? field1a, field1b;
+  static G<Class<ConcreteClass>>? field6c, field6d;
+  static G<Class<dynamic>>? field4c, field4d;
+  static G<Class>? field3c, field3d;
+  static G<ConcreteClass>? field5c, field5d;
+  static G<Object>? field7c, field8d;
+  static G<dynamic>? field2c, field2d;
+  static G<int>? field8c, field7d;
+  static G? field1c, field1d;
+}
+
+main() {}
+typedef F<X extends Class<X>> = X;
diff --git a/pkg/front_end/testcases/general/bounds_fields.dart.weak.expect b/pkg/front_end/testcases/general/bounds_fields.dart.weak.expect
new file mode 100644
index 0000000..19cb0c7
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_fields.dart.weak.expect
@@ -0,0 +1,273 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// F<Object>? field7a, field7b; // Error
+// ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// F<int>? field8a, field8b; // Error
+// ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// G<Object>? field7c, field8d; // Error
+// ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// G<int>? field8c, field7d; // Error
+// ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<Object>? field7a, field7b; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<int>? field8a, field8b; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<Object>? field7c, field8d; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<int>? field8c, field7d; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart:56:10: 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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   static F<Object>? field7a, field7b; // Error
+//          ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart:57:10: 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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   static F<int>? field8a, field8b; // Error
+//          ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart:64:10: 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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   static G<Object>? field7c, field8d; // Error
+//          ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart:65:10: 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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   static G<int>? field8c, field7d; // Error
+//          ^
+// pkg/front_end/testcases/general/bounds_fields.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 {
+  field self::Class<dynamic>? field1a = null;
+  field self::Class<dynamic>? field1b = null;
+  field dynamic field2a = null;
+  field dynamic field2b = null;
+  field self::Class<dynamic>? field3a = null;
+  field self::Class<dynamic>? field3b = null;
+  field self::Class<dynamic>? field4a = null;
+  field self::Class<dynamic>? field4b = null;
+  field self::ConcreteClass? field5a = null;
+  field self::ConcreteClass? field5b = null;
+  field self::Class<self::ConcreteClass>? field6a = null;
+  field self::Class<self::ConcreteClass>? field6b = null;
+  field core::Object? field7a = null;
+  field core::Object? field7b = null;
+  field core::int? field8a = null;
+  field core::int? field8b = null;
+  field self::G<self::Class<dynamic>>? field1c = null;
+  field self::G<self::Class<dynamic>>? field1d = null;
+  field self::G<dynamic>? field2c = null;
+  field self::G<dynamic>? field2d = null;
+  field self::G<self::Class<dynamic>>? field3c = null;
+  field self::G<self::Class<dynamic>>? field3d = null;
+  field self::G<self::Class<dynamic>>? field4c = null;
+  field self::G<self::Class<dynamic>>? field4d = null;
+  field self::G<self::ConcreteClass>? field5c = null;
+  field self::G<self::ConcreteClass>? field5d = null;
+  field self::G<self::Class<self::ConcreteClass>>? field6c = null;
+  field self::G<self::Class<self::ConcreteClass>>? field6d = null;
+  field self::G<core::Object>? field7c = null;
+  field self::G<core::Object>? field8d = null;
+  field self::G<core::int>? field8c = null;
+  field self::G<core::int>? field7d = null;
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+extension Extension1 on core::int {
+  static field field1a = self::Extension1|field1a;
+  static field field1b = self::Extension1|field1b;
+  static field field2a = self::Extension1|field2a;
+  static field field2b = self::Extension1|field2b;
+  static field field3a = self::Extension1|field3a;
+  static field field3b = self::Extension1|field3b;
+  static field field4a = self::Extension1|field4a;
+  static field field4b = self::Extension1|field4b;
+  static field field5a = self::Extension1|field5a;
+  static field field5b = self::Extension1|field5b;
+  static field field6a = self::Extension1|field6a;
+  static field field6b = self::Extension1|field6b;
+  static field field7a = self::Extension1|field7a;
+  static field field7b = self::Extension1|field7b;
+  static field field8a = self::Extension1|field8a;
+  static field field8b = self::Extension1|field8b;
+  static field field1c = self::Extension1|field1c;
+  static field field1d = self::Extension1|field1d;
+  static field field2c = self::Extension1|field2c;
+  static field field2d = self::Extension1|field2d;
+  static field field3c = self::Extension1|field3c;
+  static field field3d = self::Extension1|field3d;
+  static field field4c = self::Extension1|field4c;
+  static field field4d = self::Extension1|field4d;
+  static field field5c = self::Extension1|field5c;
+  static field field5d = self::Extension1|field5d;
+  static field field6c = self::Extension1|field6c;
+  static field field6d = self::Extension1|field6d;
+  static field field7c = self::Extension1|field7c;
+  static field field8d = self::Extension1|field8d;
+  static field field8c = self::Extension1|field8c;
+  static field field7d = self::Extension1|field7d;
+}
+static field self::Class<dynamic>? field1a;
+static field self::Class<dynamic>? field1b;
+static field dynamic field2a;
+static field dynamic field2b;
+static field self::Class<dynamic>? field3a;
+static field self::Class<dynamic>? field3b;
+static field self::Class<dynamic>? field4a;
+static field self::Class<dynamic>? field4b;
+static field self::ConcreteClass? field5a;
+static field self::ConcreteClass? field5b;
+static field self::Class<self::ConcreteClass>? field6a;
+static field self::Class<self::ConcreteClass>? field6b;
+static field core::Object? field7a;
+static field core::Object? field7b;
+static field core::int? field8a;
+static field core::int? field8b;
+static field self::G<self::Class<dynamic>>? field1c;
+static field self::G<self::Class<dynamic>>? field1d;
+static field self::G<dynamic>? field2c;
+static field self::G<dynamic>? field2d;
+static field self::G<self::Class<dynamic>>? field3c;
+static field self::G<self::Class<dynamic>>? field3d;
+static field self::G<self::Class<dynamic>>? field4c;
+static field self::G<self::Class<dynamic>>? field4d;
+static field self::G<self::ConcreteClass>? field5c;
+static field self::G<self::ConcreteClass>? field5d;
+static field self::G<self::Class<self::ConcreteClass>>? field6c;
+static field self::G<self::Class<self::ConcreteClass>>? field6d;
+static field self::G<core::Object>? field7c;
+static field self::G<core::Object>? field8d;
+static field self::G<core::int>? field8c;
+static field self::G<core::int>? field7d;
+static field self::Class<dynamic>? Extension1|field1a;
+static field self::Class<dynamic>? Extension1|field1b;
+static field dynamic Extension1|field2a;
+static field dynamic Extension1|field2b;
+static field self::Class<dynamic>? Extension1|field3a;
+static field self::Class<dynamic>? Extension1|field3b;
+static field self::Class<dynamic>? Extension1|field4a;
+static field self::Class<dynamic>? Extension1|field4b;
+static field self::ConcreteClass? Extension1|field5a;
+static field self::ConcreteClass? Extension1|field5b;
+static field self::Class<self::ConcreteClass>? Extension1|field6a;
+static field self::Class<self::ConcreteClass>? Extension1|field6b;
+static field core::Object? Extension1|field7a;
+static field core::Object? Extension1|field7b;
+static field core::int? Extension1|field8a;
+static field core::int? Extension1|field8b;
+static field self::G<self::Class<dynamic>>? Extension1|field1c;
+static field self::G<self::Class<dynamic>>? Extension1|field1d;
+static field self::G<dynamic>? Extension1|field2c;
+static field self::G<dynamic>? Extension1|field2d;
+static field self::G<self::Class<dynamic>>? Extension1|field3c;
+static field self::G<self::Class<dynamic>>? Extension1|field3d;
+static field self::G<self::Class<dynamic>>? Extension1|field4c;
+static field self::G<self::Class<dynamic>>? Extension1|field4d;
+static field self::G<self::ConcreteClass>? Extension1|field5c;
+static field self::G<self::ConcreteClass>? Extension1|field5d;
+static field self::G<self::Class<self::ConcreteClass>>? Extension1|field6c;
+static field self::G<self::Class<self::ConcreteClass>>? Extension1|field6d;
+static field self::G<core::Object>? Extension1|field7c;
+static field self::G<core::Object>? Extension1|field8d;
+static field self::G<core::int>? Extension1|field8c;
+static field self::G<core::int>? Extension1|field7d;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_fields.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_fields.dart.weak.modular.expect
new file mode 100644
index 0000000..19cb0c7
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_fields.dart.weak.modular.expect
@@ -0,0 +1,273 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// F<Object>? field7a, field7b; // Error
+// ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// F<int>? field8a, field8b; // Error
+// ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// G<Object>? field7c, field8d; // Error
+// ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// G<int>? field8c, field7d; // Error
+// ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<Object>? field7a, field7b; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<int>? field8a, field8b; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<Object>? field7c, field8d; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<int>? field8c, field7d; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart:56:10: 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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   static F<Object>? field7a, field7b; // Error
+//          ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart:57:10: 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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   static F<int>? field8a, field8b; // Error
+//          ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart:64:10: 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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   static G<Object>? field7c, field8d; // Error
+//          ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart:65:10: 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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   static G<int>? field8c, field7d; // Error
+//          ^
+// pkg/front_end/testcases/general/bounds_fields.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 {
+  field self::Class<dynamic>? field1a = null;
+  field self::Class<dynamic>? field1b = null;
+  field dynamic field2a = null;
+  field dynamic field2b = null;
+  field self::Class<dynamic>? field3a = null;
+  field self::Class<dynamic>? field3b = null;
+  field self::Class<dynamic>? field4a = null;
+  field self::Class<dynamic>? field4b = null;
+  field self::ConcreteClass? field5a = null;
+  field self::ConcreteClass? field5b = null;
+  field self::Class<self::ConcreteClass>? field6a = null;
+  field self::Class<self::ConcreteClass>? field6b = null;
+  field core::Object? field7a = null;
+  field core::Object? field7b = null;
+  field core::int? field8a = null;
+  field core::int? field8b = null;
+  field self::G<self::Class<dynamic>>? field1c = null;
+  field self::G<self::Class<dynamic>>? field1d = null;
+  field self::G<dynamic>? field2c = null;
+  field self::G<dynamic>? field2d = null;
+  field self::G<self::Class<dynamic>>? field3c = null;
+  field self::G<self::Class<dynamic>>? field3d = null;
+  field self::G<self::Class<dynamic>>? field4c = null;
+  field self::G<self::Class<dynamic>>? field4d = null;
+  field self::G<self::ConcreteClass>? field5c = null;
+  field self::G<self::ConcreteClass>? field5d = null;
+  field self::G<self::Class<self::ConcreteClass>>? field6c = null;
+  field self::G<self::Class<self::ConcreteClass>>? field6d = null;
+  field self::G<core::Object>? field7c = null;
+  field self::G<core::Object>? field8d = null;
+  field self::G<core::int>? field8c = null;
+  field self::G<core::int>? field7d = null;
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+extension Extension1 on core::int {
+  static field field1a = self::Extension1|field1a;
+  static field field1b = self::Extension1|field1b;
+  static field field2a = self::Extension1|field2a;
+  static field field2b = self::Extension1|field2b;
+  static field field3a = self::Extension1|field3a;
+  static field field3b = self::Extension1|field3b;
+  static field field4a = self::Extension1|field4a;
+  static field field4b = self::Extension1|field4b;
+  static field field5a = self::Extension1|field5a;
+  static field field5b = self::Extension1|field5b;
+  static field field6a = self::Extension1|field6a;
+  static field field6b = self::Extension1|field6b;
+  static field field7a = self::Extension1|field7a;
+  static field field7b = self::Extension1|field7b;
+  static field field8a = self::Extension1|field8a;
+  static field field8b = self::Extension1|field8b;
+  static field field1c = self::Extension1|field1c;
+  static field field1d = self::Extension1|field1d;
+  static field field2c = self::Extension1|field2c;
+  static field field2d = self::Extension1|field2d;
+  static field field3c = self::Extension1|field3c;
+  static field field3d = self::Extension1|field3d;
+  static field field4c = self::Extension1|field4c;
+  static field field4d = self::Extension1|field4d;
+  static field field5c = self::Extension1|field5c;
+  static field field5d = self::Extension1|field5d;
+  static field field6c = self::Extension1|field6c;
+  static field field6d = self::Extension1|field6d;
+  static field field7c = self::Extension1|field7c;
+  static field field8d = self::Extension1|field8d;
+  static field field8c = self::Extension1|field8c;
+  static field field7d = self::Extension1|field7d;
+}
+static field self::Class<dynamic>? field1a;
+static field self::Class<dynamic>? field1b;
+static field dynamic field2a;
+static field dynamic field2b;
+static field self::Class<dynamic>? field3a;
+static field self::Class<dynamic>? field3b;
+static field self::Class<dynamic>? field4a;
+static field self::Class<dynamic>? field4b;
+static field self::ConcreteClass? field5a;
+static field self::ConcreteClass? field5b;
+static field self::Class<self::ConcreteClass>? field6a;
+static field self::Class<self::ConcreteClass>? field6b;
+static field core::Object? field7a;
+static field core::Object? field7b;
+static field core::int? field8a;
+static field core::int? field8b;
+static field self::G<self::Class<dynamic>>? field1c;
+static field self::G<self::Class<dynamic>>? field1d;
+static field self::G<dynamic>? field2c;
+static field self::G<dynamic>? field2d;
+static field self::G<self::Class<dynamic>>? field3c;
+static field self::G<self::Class<dynamic>>? field3d;
+static field self::G<self::Class<dynamic>>? field4c;
+static field self::G<self::Class<dynamic>>? field4d;
+static field self::G<self::ConcreteClass>? field5c;
+static field self::G<self::ConcreteClass>? field5d;
+static field self::G<self::Class<self::ConcreteClass>>? field6c;
+static field self::G<self::Class<self::ConcreteClass>>? field6d;
+static field self::G<core::Object>? field7c;
+static field self::G<core::Object>? field8d;
+static field self::G<core::int>? field8c;
+static field self::G<core::int>? field7d;
+static field self::Class<dynamic>? Extension1|field1a;
+static field self::Class<dynamic>? Extension1|field1b;
+static field dynamic Extension1|field2a;
+static field dynamic Extension1|field2b;
+static field self::Class<dynamic>? Extension1|field3a;
+static field self::Class<dynamic>? Extension1|field3b;
+static field self::Class<dynamic>? Extension1|field4a;
+static field self::Class<dynamic>? Extension1|field4b;
+static field self::ConcreteClass? Extension1|field5a;
+static field self::ConcreteClass? Extension1|field5b;
+static field self::Class<self::ConcreteClass>? Extension1|field6a;
+static field self::Class<self::ConcreteClass>? Extension1|field6b;
+static field core::Object? Extension1|field7a;
+static field core::Object? Extension1|field7b;
+static field core::int? Extension1|field8a;
+static field core::int? Extension1|field8b;
+static field self::G<self::Class<dynamic>>? Extension1|field1c;
+static field self::G<self::Class<dynamic>>? Extension1|field1d;
+static field self::G<dynamic>? Extension1|field2c;
+static field self::G<dynamic>? Extension1|field2d;
+static field self::G<self::Class<dynamic>>? Extension1|field3c;
+static field self::G<self::Class<dynamic>>? Extension1|field3d;
+static field self::G<self::Class<dynamic>>? Extension1|field4c;
+static field self::G<self::Class<dynamic>>? Extension1|field4d;
+static field self::G<self::ConcreteClass>? Extension1|field5c;
+static field self::G<self::ConcreteClass>? Extension1|field5d;
+static field self::G<self::Class<self::ConcreteClass>>? Extension1|field6c;
+static field self::G<self::Class<self::ConcreteClass>>? Extension1|field6d;
+static field self::G<core::Object>? Extension1|field7c;
+static field self::G<core::Object>? Extension1|field8d;
+static field self::G<core::int>? Extension1|field8c;
+static field self::G<core::int>? Extension1|field7d;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_fields.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_fields.dart.weak.outline.expect
new file mode 100644
index 0000000..58b2e77
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_fields.dart.weak.outline.expect
@@ -0,0 +1,270 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// F<Object>? field7a, field7b; // Error
+// ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// F<int>? field8a, field8b; // Error
+// ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// G<Object>? field7c, field8d; // Error
+// ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// G<int>? field8c, field7d; // Error
+// ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<Object>? field7a, field7b; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<int>? field8a, field8b; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<Object>? field7c, field8d; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<int>? field8c, field7d; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart:56:10: 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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   static F<Object>? field7a, field7b; // Error
+//          ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart:57:10: 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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   static F<int>? field8a, field8b; // Error
+//          ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart:64:10: 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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   static G<Object>? field7c, field8d; // Error
+//          ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart:65:10: 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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   static G<int>? field8c, field7d; // Error
+//          ^
+// pkg/front_end/testcases/general/bounds_fields.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 {
+  field self::Class<dynamic>? field1a;
+  field self::Class<dynamic>? field1b;
+  field dynamic field2a;
+  field dynamic field2b;
+  field self::Class<dynamic>? field3a;
+  field self::Class<dynamic>? field3b;
+  field self::Class<dynamic>? field4a;
+  field self::Class<dynamic>? field4b;
+  field self::ConcreteClass? field5a;
+  field self::ConcreteClass? field5b;
+  field self::Class<self::ConcreteClass>? field6a;
+  field self::Class<self::ConcreteClass>? field6b;
+  field core::Object? field7a;
+  field core::Object? field7b;
+  field core::int? field8a;
+  field core::int? field8b;
+  field self::G<self::Class<dynamic>>? field1c;
+  field self::G<self::Class<dynamic>>? field1d;
+  field self::G<dynamic>? field2c;
+  field self::G<dynamic>? field2d;
+  field self::G<self::Class<dynamic>>? field3c;
+  field self::G<self::Class<dynamic>>? field3d;
+  field self::G<self::Class<dynamic>>? field4c;
+  field self::G<self::Class<dynamic>>? field4d;
+  field self::G<self::ConcreteClass>? field5c;
+  field self::G<self::ConcreteClass>? field5d;
+  field self::G<self::Class<self::ConcreteClass>>? field6c;
+  field self::G<self::Class<self::ConcreteClass>>? field6d;
+  field self::G<core::Object>? field7c;
+  field self::G<core::Object>? field8d;
+  field self::G<core::int>? field8c;
+  field self::G<core::int>? field7d;
+  synthetic constructor •() → self::Class1
+    ;
+}
+extension Extension1 on core::int {
+  static field field1a = self::Extension1|field1a;
+  static field field1b = self::Extension1|field1b;
+  static field field2a = self::Extension1|field2a;
+  static field field2b = self::Extension1|field2b;
+  static field field3a = self::Extension1|field3a;
+  static field field3b = self::Extension1|field3b;
+  static field field4a = self::Extension1|field4a;
+  static field field4b = self::Extension1|field4b;
+  static field field5a = self::Extension1|field5a;
+  static field field5b = self::Extension1|field5b;
+  static field field6a = self::Extension1|field6a;
+  static field field6b = self::Extension1|field6b;
+  static field field7a = self::Extension1|field7a;
+  static field field7b = self::Extension1|field7b;
+  static field field8a = self::Extension1|field8a;
+  static field field8b = self::Extension1|field8b;
+  static field field1c = self::Extension1|field1c;
+  static field field1d = self::Extension1|field1d;
+  static field field2c = self::Extension1|field2c;
+  static field field2d = self::Extension1|field2d;
+  static field field3c = self::Extension1|field3c;
+  static field field3d = self::Extension1|field3d;
+  static field field4c = self::Extension1|field4c;
+  static field field4d = self::Extension1|field4d;
+  static field field5c = self::Extension1|field5c;
+  static field field5d = self::Extension1|field5d;
+  static field field6c = self::Extension1|field6c;
+  static field field6d = self::Extension1|field6d;
+  static field field7c = self::Extension1|field7c;
+  static field field8d = self::Extension1|field8d;
+  static field field8c = self::Extension1|field8c;
+  static field field7d = self::Extension1|field7d;
+}
+static field self::Class<dynamic>? field1a;
+static field self::Class<dynamic>? field1b;
+static field dynamic field2a;
+static field dynamic field2b;
+static field self::Class<dynamic>? field3a;
+static field self::Class<dynamic>? field3b;
+static field self::Class<dynamic>? field4a;
+static field self::Class<dynamic>? field4b;
+static field self::ConcreteClass? field5a;
+static field self::ConcreteClass? field5b;
+static field self::Class<self::ConcreteClass>? field6a;
+static field self::Class<self::ConcreteClass>? field6b;
+static field core::Object? field7a;
+static field core::Object? field7b;
+static field core::int? field8a;
+static field core::int? field8b;
+static field self::G<self::Class<dynamic>>? field1c;
+static field self::G<self::Class<dynamic>>? field1d;
+static field self::G<dynamic>? field2c;
+static field self::G<dynamic>? field2d;
+static field self::G<self::Class<dynamic>>? field3c;
+static field self::G<self::Class<dynamic>>? field3d;
+static field self::G<self::Class<dynamic>>? field4c;
+static field self::G<self::Class<dynamic>>? field4d;
+static field self::G<self::ConcreteClass>? field5c;
+static field self::G<self::ConcreteClass>? field5d;
+static field self::G<self::Class<self::ConcreteClass>>? field6c;
+static field self::G<self::Class<self::ConcreteClass>>? field6d;
+static field self::G<core::Object>? field7c;
+static field self::G<core::Object>? field8d;
+static field self::G<core::int>? field8c;
+static field self::G<core::int>? field7d;
+static field self::Class<dynamic>? Extension1|field1a;
+static field self::Class<dynamic>? Extension1|field1b;
+static field dynamic Extension1|field2a;
+static field dynamic Extension1|field2b;
+static field self::Class<dynamic>? Extension1|field3a;
+static field self::Class<dynamic>? Extension1|field3b;
+static field self::Class<dynamic>? Extension1|field4a;
+static field self::Class<dynamic>? Extension1|field4b;
+static field self::ConcreteClass? Extension1|field5a;
+static field self::ConcreteClass? Extension1|field5b;
+static field self::Class<self::ConcreteClass>? Extension1|field6a;
+static field self::Class<self::ConcreteClass>? Extension1|field6b;
+static field core::Object? Extension1|field7a;
+static field core::Object? Extension1|field7b;
+static field core::int? Extension1|field8a;
+static field core::int? Extension1|field8b;
+static field self::G<self::Class<dynamic>>? Extension1|field1c;
+static field self::G<self::Class<dynamic>>? Extension1|field1d;
+static field self::G<dynamic>? Extension1|field2c;
+static field self::G<dynamic>? Extension1|field2d;
+static field self::G<self::Class<dynamic>>? Extension1|field3c;
+static field self::G<self::Class<dynamic>>? Extension1|field3d;
+static field self::G<self::Class<dynamic>>? Extension1|field4c;
+static field self::G<self::Class<dynamic>>? Extension1|field4d;
+static field self::G<self::ConcreteClass>? Extension1|field5c;
+static field self::G<self::ConcreteClass>? Extension1|field5d;
+static field self::G<self::Class<self::ConcreteClass>>? Extension1|field6c;
+static field self::G<self::Class<self::ConcreteClass>>? Extension1|field6d;
+static field self::G<core::Object>? Extension1|field7c;
+static field self::G<core::Object>? Extension1|field8d;
+static field self::G<core::int>? Extension1|field8c;
+static field self::G<core::int>? Extension1|field7d;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/bounds_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_fields.dart.weak.transformed.expect
new file mode 100644
index 0000000..19cb0c7
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_fields.dart.weak.transformed.expect
@@ -0,0 +1,273 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// F<Object>? field7a, field7b; // Error
+// ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// F<int>? field8a, field8b; // Error
+// ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// G<Object>? field7c, field8d; // Error
+// ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// G<int>? field8c, field7d; // Error
+// ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<Object>? field7a, field7b; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<int>? field8a, field8b; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<Object>? field7c, field8d; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<int>? field8c, field7d; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart:56:10: 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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   static F<Object>? field7a, field7b; // Error
+//          ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart:57:10: 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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   static F<int>? field8a, field8b; // Error
+//          ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart:64:10: 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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   static G<Object>? field7c, field8d; // Error
+//          ^
+// pkg/front_end/testcases/general/bounds_fields.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_fields.dart:65:10: 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_fields.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   static G<int>? field8c, field7d; // Error
+//          ^
+// pkg/front_end/testcases/general/bounds_fields.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 {
+  field self::Class<dynamic>? field1a = null;
+  field self::Class<dynamic>? field1b = null;
+  field dynamic field2a = null;
+  field dynamic field2b = null;
+  field self::Class<dynamic>? field3a = null;
+  field self::Class<dynamic>? field3b = null;
+  field self::Class<dynamic>? field4a = null;
+  field self::Class<dynamic>? field4b = null;
+  field self::ConcreteClass? field5a = null;
+  field self::ConcreteClass? field5b = null;
+  field self::Class<self::ConcreteClass>? field6a = null;
+  field self::Class<self::ConcreteClass>? field6b = null;
+  field core::Object? field7a = null;
+  field core::Object? field7b = null;
+  field core::int? field8a = null;
+  field core::int? field8b = null;
+  field self::G<self::Class<dynamic>>? field1c = null;
+  field self::G<self::Class<dynamic>>? field1d = null;
+  field self::G<dynamic>? field2c = null;
+  field self::G<dynamic>? field2d = null;
+  field self::G<self::Class<dynamic>>? field3c = null;
+  field self::G<self::Class<dynamic>>? field3d = null;
+  field self::G<self::Class<dynamic>>? field4c = null;
+  field self::G<self::Class<dynamic>>? field4d = null;
+  field self::G<self::ConcreteClass>? field5c = null;
+  field self::G<self::ConcreteClass>? field5d = null;
+  field self::G<self::Class<self::ConcreteClass>>? field6c = null;
+  field self::G<self::Class<self::ConcreteClass>>? field6d = null;
+  field self::G<core::Object>? field7c = null;
+  field self::G<core::Object>? field8d = null;
+  field self::G<core::int>? field8c = null;
+  field self::G<core::int>? field7d = null;
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+extension Extension1 on core::int {
+  static field field1a = self::Extension1|field1a;
+  static field field1b = self::Extension1|field1b;
+  static field field2a = self::Extension1|field2a;
+  static field field2b = self::Extension1|field2b;
+  static field field3a = self::Extension1|field3a;
+  static field field3b = self::Extension1|field3b;
+  static field field4a = self::Extension1|field4a;
+  static field field4b = self::Extension1|field4b;
+  static field field5a = self::Extension1|field5a;
+  static field field5b = self::Extension1|field5b;
+  static field field6a = self::Extension1|field6a;
+  static field field6b = self::Extension1|field6b;
+  static field field7a = self::Extension1|field7a;
+  static field field7b = self::Extension1|field7b;
+  static field field8a = self::Extension1|field8a;
+  static field field8b = self::Extension1|field8b;
+  static field field1c = self::Extension1|field1c;
+  static field field1d = self::Extension1|field1d;
+  static field field2c = self::Extension1|field2c;
+  static field field2d = self::Extension1|field2d;
+  static field field3c = self::Extension1|field3c;
+  static field field3d = self::Extension1|field3d;
+  static field field4c = self::Extension1|field4c;
+  static field field4d = self::Extension1|field4d;
+  static field field5c = self::Extension1|field5c;
+  static field field5d = self::Extension1|field5d;
+  static field field6c = self::Extension1|field6c;
+  static field field6d = self::Extension1|field6d;
+  static field field7c = self::Extension1|field7c;
+  static field field8d = self::Extension1|field8d;
+  static field field8c = self::Extension1|field8c;
+  static field field7d = self::Extension1|field7d;
+}
+static field self::Class<dynamic>? field1a;
+static field self::Class<dynamic>? field1b;
+static field dynamic field2a;
+static field dynamic field2b;
+static field self::Class<dynamic>? field3a;
+static field self::Class<dynamic>? field3b;
+static field self::Class<dynamic>? field4a;
+static field self::Class<dynamic>? field4b;
+static field self::ConcreteClass? field5a;
+static field self::ConcreteClass? field5b;
+static field self::Class<self::ConcreteClass>? field6a;
+static field self::Class<self::ConcreteClass>? field6b;
+static field core::Object? field7a;
+static field core::Object? field7b;
+static field core::int? field8a;
+static field core::int? field8b;
+static field self::G<self::Class<dynamic>>? field1c;
+static field self::G<self::Class<dynamic>>? field1d;
+static field self::G<dynamic>? field2c;
+static field self::G<dynamic>? field2d;
+static field self::G<self::Class<dynamic>>? field3c;
+static field self::G<self::Class<dynamic>>? field3d;
+static field self::G<self::Class<dynamic>>? field4c;
+static field self::G<self::Class<dynamic>>? field4d;
+static field self::G<self::ConcreteClass>? field5c;
+static field self::G<self::ConcreteClass>? field5d;
+static field self::G<self::Class<self::ConcreteClass>>? field6c;
+static field self::G<self::Class<self::ConcreteClass>>? field6d;
+static field self::G<core::Object>? field7c;
+static field self::G<core::Object>? field8d;
+static field self::G<core::int>? field8c;
+static field self::G<core::int>? field7d;
+static field self::Class<dynamic>? Extension1|field1a;
+static field self::Class<dynamic>? Extension1|field1b;
+static field dynamic Extension1|field2a;
+static field dynamic Extension1|field2b;
+static field self::Class<dynamic>? Extension1|field3a;
+static field self::Class<dynamic>? Extension1|field3b;
+static field self::Class<dynamic>? Extension1|field4a;
+static field self::Class<dynamic>? Extension1|field4b;
+static field self::ConcreteClass? Extension1|field5a;
+static field self::ConcreteClass? Extension1|field5b;
+static field self::Class<self::ConcreteClass>? Extension1|field6a;
+static field self::Class<self::ConcreteClass>? Extension1|field6b;
+static field core::Object? Extension1|field7a;
+static field core::Object? Extension1|field7b;
+static field core::int? Extension1|field8a;
+static field core::int? Extension1|field8b;
+static field self::G<self::Class<dynamic>>? Extension1|field1c;
+static field self::G<self::Class<dynamic>>? Extension1|field1d;
+static field self::G<dynamic>? Extension1|field2c;
+static field self::G<dynamic>? Extension1|field2d;
+static field self::G<self::Class<dynamic>>? Extension1|field3c;
+static field self::G<self::Class<dynamic>>? Extension1|field3d;
+static field self::G<self::Class<dynamic>>? Extension1|field4c;
+static field self::G<self::Class<dynamic>>? Extension1|field4d;
+static field self::G<self::ConcreteClass>? Extension1|field5c;
+static field self::G<self::ConcreteClass>? Extension1|field5d;
+static field self::G<self::Class<self::ConcreteClass>>? Extension1|field6c;
+static field self::G<self::Class<self::ConcreteClass>>? Extension1|field6d;
+static field self::G<core::Object>? Extension1|field7c;
+static field self::G<core::Object>? Extension1|field8d;
+static field self::G<core::int>? Extension1|field8c;
+static field self::G<core::int>? Extension1|field7d;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_instances.dart b/pkg/front_end/testcases/general/bounds_instances.dart
new file mode 100644
index 0000000..b583f06
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_instances.dart
@@ -0,0 +1,51 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = Class1;
+
+class G<X extends Class<X>> {}
+
+class Class1 {}
+
+test() {
+  new F(); // Error
+  new F<dynamic>(); // Error
+  new F<Class>(); // Error
+  new F<Class<dynamic>>(); // Error
+  new F<ConcreteClass>(); // Ok
+  new F<Class<ConcreteClass>>(); // Ok
+  new F<Object>(); // Error
+  new F<int>(); // Error
+  new G(); // Error
+  new G<dynamic>(); // Error
+  new G<Class>(); // Error
+  new G<Class<dynamic>>(); // Error
+  new G<ConcreteClass>(); // Ok
+  new G<Class<ConcreteClass>>(); // Ok
+  new G<Object>(); // Error
+  new G<int>(); // Error
+
+  F.new; // Ok
+  F<dynamic>.new; // Ok
+  F<Class>.new; // Ok
+  F<Class<dynamic>>.new; // Ok
+  F<ConcreteClass>.new; // Ok
+  F<Class<ConcreteClass>>.new; // Ok
+  F<Object>.new; // Error
+  F<int>.new; // Error
+  G.new; // Ok
+  G<dynamic>.new; // Error
+  G<Class>.new; // Error
+  G<Class<dynamic>>.new; // Error
+  G<ConcreteClass>.new; // Ok
+  G<Class<ConcreteClass>>.new; // Ok
+  G<Object>.new; // Error
+  G<int>.new; // Error
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_instances.dart.textual_outline.expect b/pkg/front_end/testcases/general/bounds_instances.dart.textual_outline.expect
new file mode 100644
index 0000000..b507840
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_instances.dart.textual_outline.expect
@@ -0,0 +1,12 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = Class1;
+
+class G<X extends Class<X>> {}
+
+class Class1 {}
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_instances.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bounds_instances.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..731451e
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_instances.dart.textual_outline_modelled.expect
@@ -0,0 +1,11 @@
+class Class<T> {}
+
+class Class1 {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+class G<X extends Class<X>> {}
+
+main() {}
+test() {}
+typedef F<X extends Class<X>> = Class1;
diff --git a/pkg/front_end/testcases/general/bounds_instances.dart.weak.expect b/pkg/front_end/testcases/general/bounds_instances.dart.weak.expect
new file mode 100644
index 0000000..d236cbc
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_instances.dart.weak.expect
@@ -0,0 +1,244 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:17:7: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new F<dynamic>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class1;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:18:7: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new F<Class>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class1;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:19:7: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new F<Class<dynamic>>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class1;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:22:7: 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_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new F<Object>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class1;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:23:7: 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_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new F<int>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class1;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:25:7: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new G<dynamic>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.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_instances.dart:26:7: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new G<Class>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.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_instances.dart:27:7: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new G<Class<dynamic>>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.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_instances.dart:30:7: 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_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new G<Object>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.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_instances.dart:31:7: 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_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new G<int>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.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_instances.dart:24:7: Error: Inferred type argument 'Class<Object?>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   new G(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.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_instances.dart:42:3: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G<X> Function<X extends Class<X>>()'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+//  - 'G' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<dynamic>.new; // Error
+//   ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:43:3: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G<X> Function<X extends Class<X>>()'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+//  - 'G' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<Class>.new; // Error
+//   ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:44:3: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G<X> Function<X extends Class<X>>()'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+//  - 'G' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<Class<dynamic>>.new; // Error
+//   ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:47:3: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G<X> Function<X extends Class<X>>()'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+//  - 'G' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<Object>.new; // Error
+//   ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:48:3: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G<X> Function<X extends Class<X>>()'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+//  - 'G' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<int>.new; // Error
+//   ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:16:7: Error: Inferred type argument 'Class<Object?>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   new F(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class1;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:39: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_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<Object>.new; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_instances.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class1;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:40: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_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<int>.new; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_instances.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class1;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<unrelated X extends self::Class<X> = self::Class<dynamic>> = self::Class1;
+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::•()
+    ;
+}
+static method test() → dynamic {
+  new self::Class1::•();
+  new self::Class1::•();
+  new self::Class1::•();
+  new self::Class1::•();
+  new self::Class1::•();
+  new self::Class1::•();
+  new self::Class1::•();
+  new self::Class1::•();
+  new self::G::•<self::Class<core::Object?>>();
+  new self::G::•<dynamic>();
+  new self::G::•<self::Class<dynamic>>();
+  new self::G::•<self::Class<dynamic>>();
+  new self::G::•<self::ConcreteClass>();
+  new self::G::•<self::Class<self::ConcreteClass>>();
+  new self::G::•<core::Object>();
+  new self::G::•<core::int>();
+  #C1;
+  #C2;
+  #C2;
+  #C2;
+  #C2;
+  #C2;
+  #C2;
+  #C2;
+  #C3;
+  #C4;
+  #C5;
+  #C5;
+  #C6;
+  #C7;
+  #C8;
+  #C9;
+}
+static method main() → dynamic {}
+static method _#F#new#tearOff<unrelated X extends self::Class<self::_#F#new#tearOff::X> = self::Class<dynamic>>() → self::Class1
+  return new self::Class1::•();
+
+constants  {
+  #C1 = static-tearoff self::_#F#new#tearOff
+  #C2 = constructor-tearoff self::Class1::•
+  #C3 = constructor-tearoff self::G::•
+  #C4 = instantiation #C3 <dynamic>
+  #C5 = instantiation #C3 <self::Class<dynamic>*>
+  #C6 = instantiation #C3 <self::ConcreteClass*>
+  #C7 = instantiation #C3 <self::Class<self::ConcreteClass*>*>
+  #C8 = instantiation #C3 <core::Object*>
+  #C9 = instantiation #C3 <core::int*>
+}
diff --git a/pkg/front_end/testcases/general/bounds_instances.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_instances.dart.weak.modular.expect
new file mode 100644
index 0000000..d236cbc
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_instances.dart.weak.modular.expect
@@ -0,0 +1,244 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:17:7: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new F<dynamic>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class1;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:18:7: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new F<Class>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class1;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:19:7: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new F<Class<dynamic>>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class1;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:22:7: 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_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new F<Object>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class1;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:23:7: 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_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new F<int>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class1;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:25:7: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new G<dynamic>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.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_instances.dart:26:7: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new G<Class>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.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_instances.dart:27:7: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new G<Class<dynamic>>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.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_instances.dart:30:7: 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_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new G<Object>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.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_instances.dart:31:7: 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_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new G<int>(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.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_instances.dart:24:7: Error: Inferred type argument 'Class<Object?>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   new G(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.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_instances.dart:42:3: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G<X> Function<X extends Class<X>>()'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+//  - 'G' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<dynamic>.new; // Error
+//   ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:43:3: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G<X> Function<X extends Class<X>>()'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+//  - 'G' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<Class>.new; // Error
+//   ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:44:3: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G<X> Function<X extends Class<X>>()'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+//  - 'G' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<Class<dynamic>>.new; // Error
+//   ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:47:3: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G<X> Function<X extends Class<X>>()'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+//  - 'G' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<Object>.new; // Error
+//   ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:48:3: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G<X> Function<X extends Class<X>>()'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+//  - 'G' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<int>.new; // Error
+//   ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:16:7: Error: Inferred type argument 'Class<Object?>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_instances.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   new F(); // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_instances.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class1;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:39: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_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<Object>.new; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_instances.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class1;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_instances.dart:40: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_instances.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<int>.new; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_instances.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class1;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<unrelated X extends self::Class<X> = self::Class<dynamic>> = self::Class1;
+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::•()
+    ;
+}
+static method test() → dynamic {
+  new self::Class1::•();
+  new self::Class1::•();
+  new self::Class1::•();
+  new self::Class1::•();
+  new self::Class1::•();
+  new self::Class1::•();
+  new self::Class1::•();
+  new self::Class1::•();
+  new self::G::•<self::Class<core::Object?>>();
+  new self::G::•<dynamic>();
+  new self::G::•<self::Class<dynamic>>();
+  new self::G::•<self::Class<dynamic>>();
+  new self::G::•<self::ConcreteClass>();
+  new self::G::•<self::Class<self::ConcreteClass>>();
+  new self::G::•<core::Object>();
+  new self::G::•<core::int>();
+  #C1;
+  #C2;
+  #C2;
+  #C2;
+  #C2;
+  #C2;
+  #C2;
+  #C2;
+  #C3;
+  #C4;
+  #C5;
+  #C5;
+  #C6;
+  #C7;
+  #C8;
+  #C9;
+}
+static method main() → dynamic {}
+static method _#F#new#tearOff<unrelated X extends self::Class<self::_#F#new#tearOff::X> = self::Class<dynamic>>() → self::Class1
+  return new self::Class1::•();
+
+constants  {
+  #C1 = static-tearoff self::_#F#new#tearOff
+  #C2 = constructor-tearoff self::Class1::•
+  #C3 = constructor-tearoff self::G::•
+  #C4 = instantiation #C3 <dynamic>
+  #C5 = instantiation #C3 <self::Class<dynamic>*>
+  #C6 = instantiation #C3 <self::ConcreteClass*>
+  #C7 = instantiation #C3 <self::Class<self::ConcreteClass*>*>
+  #C8 = instantiation #C3 <core::Object*>
+  #C9 = instantiation #C3 <core::int*>
+}
diff --git a/pkg/front_end/testcases/general/bounds_instances.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_instances.dart.weak.outline.expect
new file mode 100644
index 0000000..714445f
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_instances.dart.weak.outline.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<unrelated X extends self::Class<X> = self::Class<dynamic>> = self::Class1;
+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
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
+static method _#F#new#tearOff<unrelated X extends self::Class<self::_#F#new#tearOff::X> = self::Class<dynamic>>() → self::Class1
+  return new self::Class1::•();
diff --git a/pkg/front_end/testcases/general/bounds_literals.dart b/pkg/front_end/testcases/general/bounds_literals.dart
new file mode 100644
index 0000000..1e9e2aa
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_literals.dart
@@ -0,0 +1,58 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+test() {
+  <F, F<dynamic>>{}; // Ok
+  <F<Class>, F<Class<dynamic>>>{}; // Ok
+  <F<ConcreteClass>, F<Class<ConcreteClass>>>{}; // Ok
+  <F<Object>, F<int>>{}; // Error
+  <G, G<dynamic>>{}; // Ok
+  <G<Class>, G<Class<dynamic>>>{}; // Ok
+  <G<ConcreteClass>, G<Class<ConcreteClass>>>{}; // Ok
+  <G<Object>, G<int>>{}; // Error
+
+  <F>{}; // Ok
+  <F<dynamic>>{}; // Ok
+  <F<Class>>{}; // Ok
+  <F<Class<dynamic>>>{}; // Ok
+  <F<Object>>{}; // Error
+  <F<int>>{}; // Error
+  <F<ConcreteClass>>{}; // Ok
+  <F<Class<ConcreteClass>>>{}; // Ok
+  <G>{}; // Ok
+  <G<dynamic>>{}; // Ok
+  <G<Class>>{}; // Ok
+  <G<Class<dynamic>>>{}; // Ok
+  <G<ConcreteClass>>{}; // Ok
+  <G<Class<ConcreteClass>>>{}; // Ok
+  <G<Object>>{}; // Error
+  <G<int>>{}; // Error
+
+  <F>[]; // Ok
+  <F<dynamic>>[]; // Ok
+  <F<Class>>[]; // Ok
+  <F<Class<dynamic>>>[]; // Ok
+  <F<ConcreteClass>>[]; // Ok
+  <F<Class<ConcreteClass>>>[]; // Ok
+  <F<Object>>[]; // Error
+  <F<int>>[]; // Error
+  <G>[]; // Ok
+  <G<dynamic>>[]; // Ok
+  <G<Class>>[]; // Ok
+  <G<Class<dynamic>>>[]; // Ok
+  <G<ConcreteClass>>[]; // Ok
+  <G<Class<ConcreteClass>>>[]; // Ok
+  <G<Object>>[]; // Error
+  <G<int>>[]; // Error
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_literals.dart.textual_outline.expect b/pkg/front_end/testcases/general/bounds_literals.dart.textual_outline.expect
new file mode 100644
index 0000000..903ffb2
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_literals.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_literals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bounds_literals.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..a5aa923
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_literals.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+class G<X extends Class<X>> {}
+
+main() {}
+test() {}
+typedef F<X extends Class<X>> = X;
diff --git a/pkg/front_end/testcases/general/bounds_literals.dart.weak.expect b/pkg/front_end/testcases/general/bounds_literals.dart.weak.expect
new file mode 100644
index 0000000..fc49d81
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_literals.dart.weak.expect
@@ -0,0 +1,213 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_literals.dart:17:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <F<Object>, F<int>>{}; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:17:15: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <F<Object>, F<int>>{}; // Error
+//               ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:21:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <G<Object>, G<int>>{}; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:21:15: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <G<Object>, G<int>>{}; // Error
+//               ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:27:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <F<Object>>{}; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:28:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <F<int>>{}; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:37:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <G<Object>>{}; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:38:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <G<int>>{}; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:46:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <F<Object>>[]; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:47:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <F<int>>[]; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:54:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <G<Object>>[]; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:55:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <G<int>>[]; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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;
+import "dart:collection" as col;
+
+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 test() → dynamic {
+  <self::Class<dynamic>, dynamic>{};
+  <self::Class<dynamic>, self::Class<dynamic>>{};
+  <self::ConcreteClass, self::Class<self::ConcreteClass>>{};
+  <core::Object, core::int>{};
+  <self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>>{};
+  <self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>>{};
+  <self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>>{};
+  <self::G<core::Object>, self::G<core::int>>{};
+  block {
+    final core::Set<self::Class<dynamic>> #t1 = col::LinkedHashSet::•<self::Class<dynamic>>();
+  } =>#t1;
+  block {
+    final core::Set<dynamic> #t2 = col::LinkedHashSet::•<dynamic>();
+  } =>#t2;
+  block {
+    final core::Set<self::Class<dynamic>> #t3 = col::LinkedHashSet::•<self::Class<dynamic>>();
+  } =>#t3;
+  block {
+    final core::Set<self::Class<dynamic>> #t4 = col::LinkedHashSet::•<self::Class<dynamic>>();
+  } =>#t4;
+  block {
+    final core::Set<core::Object> #t5 = col::LinkedHashSet::•<core::Object>();
+  } =>#t5;
+  block {
+    final core::Set<core::int> #t6 = col::LinkedHashSet::•<core::int>();
+  } =>#t6;
+  block {
+    final core::Set<self::ConcreteClass> #t7 = col::LinkedHashSet::•<self::ConcreteClass>();
+  } =>#t7;
+  block {
+    final core::Set<self::Class<self::ConcreteClass>> #t8 = col::LinkedHashSet::•<self::Class<self::ConcreteClass>>();
+  } =>#t8;
+  block {
+    final core::Set<self::G<self::Class<dynamic>>> #t9 = col::LinkedHashSet::•<self::G<self::Class<dynamic>>>();
+  } =>#t9;
+  block {
+    final core::Set<self::G<self::Class<dynamic>>> #t10 = col::LinkedHashSet::•<self::G<self::Class<dynamic>>>();
+  } =>#t10;
+  block {
+    final core::Set<self::G<self::Class<dynamic>>> #t11 = col::LinkedHashSet::•<self::G<self::Class<dynamic>>>();
+  } =>#t11;
+  block {
+    final core::Set<self::G<self::Class<dynamic>>> #t12 = col::LinkedHashSet::•<self::G<self::Class<dynamic>>>();
+  } =>#t12;
+  block {
+    final core::Set<self::G<self::ConcreteClass>> #t13 = col::LinkedHashSet::•<self::G<self::ConcreteClass>>();
+  } =>#t13;
+  block {
+    final core::Set<self::G<self::Class<self::ConcreteClass>>> #t14 = col::LinkedHashSet::•<self::G<self::Class<self::ConcreteClass>>>();
+  } =>#t14;
+  block {
+    final core::Set<self::G<core::Object>> #t15 = col::LinkedHashSet::•<self::G<core::Object>>();
+  } =>#t15;
+  block {
+    final core::Set<self::G<core::int>> #t16 = col::LinkedHashSet::•<self::G<core::int>>();
+  } =>#t16;
+  <self::Class<dynamic>>[];
+  <dynamic>[];
+  <self::Class<dynamic>>[];
+  <self::Class<dynamic>>[];
+  <self::ConcreteClass>[];
+  <self::Class<self::ConcreteClass>>[];
+  <core::Object>[];
+  <core::int>[];
+  <self::G<self::Class<dynamic>>>[];
+  <self::G<self::Class<dynamic>>>[];
+  <self::G<self::Class<dynamic>>>[];
+  <self::G<self::Class<dynamic>>>[];
+  <self::G<self::ConcreteClass>>[];
+  <self::G<self::Class<self::ConcreteClass>>>[];
+  <self::G<core::Object>>[];
+  <self::G<core::int>>[];
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_literals.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_literals.dart.weak.modular.expect
new file mode 100644
index 0000000..fc49d81
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_literals.dart.weak.modular.expect
@@ -0,0 +1,213 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_literals.dart:17:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <F<Object>, F<int>>{}; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:17:15: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <F<Object>, F<int>>{}; // Error
+//               ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:21:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <G<Object>, G<int>>{}; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:21:15: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <G<Object>, G<int>>{}; // Error
+//               ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:27:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <F<Object>>{}; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:28:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <F<int>>{}; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:37:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <G<Object>>{}; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:38:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <G<int>>{}; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:46:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <F<Object>>[]; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:47:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <F<int>>[]; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:54:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <G<Object>>[]; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:55:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <G<int>>[]; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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;
+import "dart:collection" as col;
+
+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 test() → dynamic {
+  <self::Class<dynamic>, dynamic>{};
+  <self::Class<dynamic>, self::Class<dynamic>>{};
+  <self::ConcreteClass, self::Class<self::ConcreteClass>>{};
+  <core::Object, core::int>{};
+  <self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>>{};
+  <self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>>{};
+  <self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>>{};
+  <self::G<core::Object>, self::G<core::int>>{};
+  block {
+    final core::Set<self::Class<dynamic>> #t1 = col::LinkedHashSet::•<self::Class<dynamic>>();
+  } =>#t1;
+  block {
+    final core::Set<dynamic> #t2 = col::LinkedHashSet::•<dynamic>();
+  } =>#t2;
+  block {
+    final core::Set<self::Class<dynamic>> #t3 = col::LinkedHashSet::•<self::Class<dynamic>>();
+  } =>#t3;
+  block {
+    final core::Set<self::Class<dynamic>> #t4 = col::LinkedHashSet::•<self::Class<dynamic>>();
+  } =>#t4;
+  block {
+    final core::Set<core::Object> #t5 = col::LinkedHashSet::•<core::Object>();
+  } =>#t5;
+  block {
+    final core::Set<core::int> #t6 = col::LinkedHashSet::•<core::int>();
+  } =>#t6;
+  block {
+    final core::Set<self::ConcreteClass> #t7 = col::LinkedHashSet::•<self::ConcreteClass>();
+  } =>#t7;
+  block {
+    final core::Set<self::Class<self::ConcreteClass>> #t8 = col::LinkedHashSet::•<self::Class<self::ConcreteClass>>();
+  } =>#t8;
+  block {
+    final core::Set<self::G<self::Class<dynamic>>> #t9 = col::LinkedHashSet::•<self::G<self::Class<dynamic>>>();
+  } =>#t9;
+  block {
+    final core::Set<self::G<self::Class<dynamic>>> #t10 = col::LinkedHashSet::•<self::G<self::Class<dynamic>>>();
+  } =>#t10;
+  block {
+    final core::Set<self::G<self::Class<dynamic>>> #t11 = col::LinkedHashSet::•<self::G<self::Class<dynamic>>>();
+  } =>#t11;
+  block {
+    final core::Set<self::G<self::Class<dynamic>>> #t12 = col::LinkedHashSet::•<self::G<self::Class<dynamic>>>();
+  } =>#t12;
+  block {
+    final core::Set<self::G<self::ConcreteClass>> #t13 = col::LinkedHashSet::•<self::G<self::ConcreteClass>>();
+  } =>#t13;
+  block {
+    final core::Set<self::G<self::Class<self::ConcreteClass>>> #t14 = col::LinkedHashSet::•<self::G<self::Class<self::ConcreteClass>>>();
+  } =>#t14;
+  block {
+    final core::Set<self::G<core::Object>> #t15 = col::LinkedHashSet::•<self::G<core::Object>>();
+  } =>#t15;
+  block {
+    final core::Set<self::G<core::int>> #t16 = col::LinkedHashSet::•<self::G<core::int>>();
+  } =>#t16;
+  <self::Class<dynamic>>[];
+  <dynamic>[];
+  <self::Class<dynamic>>[];
+  <self::Class<dynamic>>[];
+  <self::ConcreteClass>[];
+  <self::Class<self::ConcreteClass>>[];
+  <core::Object>[];
+  <core::int>[];
+  <self::G<self::Class<dynamic>>>[];
+  <self::G<self::Class<dynamic>>>[];
+  <self::G<self::Class<dynamic>>>[];
+  <self::G<self::Class<dynamic>>>[];
+  <self::G<self::ConcreteClass>>[];
+  <self::G<self::Class<self::ConcreteClass>>>[];
+  <self::G<core::Object>>[];
+  <self::G<core::int>>[];
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_literals.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_literals.dart.weak.outline.expect
new file mode 100644
index 0000000..3215dc6
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_literals.dart.weak.outline.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+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>
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/bounds_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_literals.dart.weak.transformed.expect
new file mode 100644
index 0000000..5c630d7
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_literals.dart.weak.transformed.expect
@@ -0,0 +1,213 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_literals.dart:17:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <F<Object>, F<int>>{}; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:17:15: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <F<Object>, F<int>>{}; // Error
+//               ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:21:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <G<Object>, G<int>>{}; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:21:15: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <G<Object>, G<int>>{}; // Error
+//               ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:27:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <F<Object>>{}; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:28:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <F<int>>{}; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:37:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <G<Object>>{}; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:38:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <G<int>>{}; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:46:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <F<Object>>[]; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:47:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <F<int>>[]; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:54:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <G<Object>>[]; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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_literals.dart:55:4: 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_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   <G<int>>[]; // Error
+//    ^
+// pkg/front_end/testcases/general/bounds_literals.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;
+import "dart:collection" as col;
+
+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 test() → dynamic {
+  <self::Class<dynamic>, dynamic>{};
+  <self::Class<dynamic>, self::Class<dynamic>>{};
+  <self::ConcreteClass, self::Class<self::ConcreteClass>>{};
+  <core::Object, core::int>{};
+  <self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>>{};
+  <self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>>{};
+  <self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>>{};
+  <self::G<core::Object>, self::G<core::int>>{};
+  block {
+    final core::Set<self::Class<dynamic>> #t1 = new col::_CompactLinkedHashSet::•<self::Class<dynamic>>();
+  } =>#t1;
+  block {
+    final core::Set<dynamic> #t2 = new col::_CompactLinkedHashSet::•<dynamic>();
+  } =>#t2;
+  block {
+    final core::Set<self::Class<dynamic>> #t3 = new col::_CompactLinkedHashSet::•<self::Class<dynamic>>();
+  } =>#t3;
+  block {
+    final core::Set<self::Class<dynamic>> #t4 = new col::_CompactLinkedHashSet::•<self::Class<dynamic>>();
+  } =>#t4;
+  block {
+    final core::Set<core::Object> #t5 = new col::_CompactLinkedHashSet::•<core::Object>();
+  } =>#t5;
+  block {
+    final core::Set<core::int> #t6 = new col::_CompactLinkedHashSet::•<core::int>();
+  } =>#t6;
+  block {
+    final core::Set<self::ConcreteClass> #t7 = new col::_CompactLinkedHashSet::•<self::ConcreteClass>();
+  } =>#t7;
+  block {
+    final core::Set<self::Class<self::ConcreteClass>> #t8 = new col::_CompactLinkedHashSet::•<self::Class<self::ConcreteClass>>();
+  } =>#t8;
+  block {
+    final core::Set<self::G<self::Class<dynamic>>> #t9 = new col::_CompactLinkedHashSet::•<self::G<self::Class<dynamic>>>();
+  } =>#t9;
+  block {
+    final core::Set<self::G<self::Class<dynamic>>> #t10 = new col::_CompactLinkedHashSet::•<self::G<self::Class<dynamic>>>();
+  } =>#t10;
+  block {
+    final core::Set<self::G<self::Class<dynamic>>> #t11 = new col::_CompactLinkedHashSet::•<self::G<self::Class<dynamic>>>();
+  } =>#t11;
+  block {
+    final core::Set<self::G<self::Class<dynamic>>> #t12 = new col::_CompactLinkedHashSet::•<self::G<self::Class<dynamic>>>();
+  } =>#t12;
+  block {
+    final core::Set<self::G<self::ConcreteClass>> #t13 = new col::_CompactLinkedHashSet::•<self::G<self::ConcreteClass>>();
+  } =>#t13;
+  block {
+    final core::Set<self::G<self::Class<self::ConcreteClass>>> #t14 = new col::_CompactLinkedHashSet::•<self::G<self::Class<self::ConcreteClass>>>();
+  } =>#t14;
+  block {
+    final core::Set<self::G<core::Object>> #t15 = new col::_CompactLinkedHashSet::•<self::G<core::Object>>();
+  } =>#t15;
+  block {
+    final core::Set<self::G<core::int>> #t16 = new col::_CompactLinkedHashSet::•<self::G<core::int>>();
+  } =>#t16;
+  core::_GrowableList::•<self::Class<dynamic>>(0);
+  core::_GrowableList::•<dynamic>(0);
+  core::_GrowableList::•<self::Class<dynamic>>(0);
+  core::_GrowableList::•<self::Class<dynamic>>(0);
+  core::_GrowableList::•<self::ConcreteClass>(0);
+  core::_GrowableList::•<self::Class<self::ConcreteClass>>(0);
+  core::_GrowableList::•<core::Object>(0);
+  core::_GrowableList::•<core::int>(0);
+  core::_GrowableList::•<self::G<self::Class<dynamic>>>(0);
+  core::_GrowableList::•<self::G<self::Class<dynamic>>>(0);
+  core::_GrowableList::•<self::G<self::Class<dynamic>>>(0);
+  core::_GrowableList::•<self::G<self::Class<dynamic>>>(0);
+  core::_GrowableList::•<self::G<self::ConcreteClass>>(0);
+  core::_GrowableList::•<self::G<self::Class<self::ConcreteClass>>>(0);
+  core::_GrowableList::•<self::G<core::Object>>(0);
+  core::_GrowableList::•<self::G<core::int>>(0);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_parameters.dart b/pkg/front_end/testcases/general/bounds_parameters.dart
new file mode 100644
index 0000000..98d74d7
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_parameters.dart
@@ -0,0 +1,135 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+void method1(
+  F t1, // Ok
+  F<dynamic> t2, // Ok
+  F<Class> t3, // Ok
+  F<Class<dynamic>> t4, // Ok
+  F<ConcreteClass> t5, // Ok
+  F<Class<ConcreteClass>> t6, // Ok
+  F<Object> t7, // Error
+  F<int> t8, // Error
+  {
+  required G s1, // Ok
+  required G<dynamic> s2, // Ok
+  required G<Class> s3, // Ok
+  required G<Class<dynamic>> s4, // Ok
+  required G<ConcreteClass> s5, // Ok
+  required G<Class<ConcreteClass>> s6, // Ok
+  required G<Object> s7, // Error
+  required G<int> s8, // Error
+}) {
+  void local(
+    F t1, // Ok
+    F<dynamic> t2, // Ok
+    F<Class> t3, // Ok
+    F<Class<dynamic>> t4, // Ok
+    F<ConcreteClass> t5, // Ok
+    F<Class<ConcreteClass>> t6, // Ok
+    F<Object> t7, // Error
+    F<int> t8, // Error
+    {
+    required G s1, // Ok
+    required G<dynamic> s2, // Ok
+    required G<Class> s3, // Ok
+    required G<Class<dynamic>> s4, // Ok
+    required G<ConcreteClass> s5, // Ok
+    required G<Class<ConcreteClass>> s6, // Ok
+    required G<Object> s7, // Error
+    required G<int> s8, // Error
+  }) {}
+  (
+    F t1, // Ok
+    F<dynamic> t2, // Ok
+    F<Class> t3, // Ok
+    F<Class<dynamic>> t4, // Ok
+    F<ConcreteClass> t5, // Ok
+    F<Class<ConcreteClass>> t6, // Ok
+    F<Object> t7, // Error
+    F<int> t8, // Error
+    {
+    required G s1, // Ok
+    required G<dynamic> s2, // Ok
+    required G<Class> s3, // Ok
+    required G<Class<dynamic>> s4, // Ok
+    required G<ConcreteClass> s5, // Ok
+    required G<Class<ConcreteClass>> s6, // Ok
+    required G<Object> s7, // Error
+    required G<int> s8, // Error
+  }) {};
+}
+
+class Class1 {
+  Class1(
+    F t1, // Ok
+    F<dynamic> t2, // Ok
+    F<Class> t3, // Ok
+    F<Class<dynamic>> t4, // Ok
+    F<ConcreteClass> t5, // Ok
+    F<Class<ConcreteClass>> t6, // Ok
+    F<Object> t7, // Error
+    F<int> t8, // Error
+    {
+    required G s1, // Ok
+    required G<dynamic> s2, // Ok
+    required G<Class> s3, // Ok
+    required G<Class<dynamic>> s4, // Ok
+    required G<ConcreteClass> s5, // Ok
+    required G<Class<ConcreteClass>> s6, // Ok
+    required G<Object> s7, // Error
+    required G<int> s8, // Error
+  });
+  void method2(
+    F t1, // Ok
+    F<dynamic> t2, // Ok
+    F<Class> t3, // Ok
+    F<Class<dynamic>> t4, // Ok
+    F<ConcreteClass> t5, // Ok
+    F<Class<ConcreteClass>> t6, // Ok
+    F<Object> t7, // Error
+    F<int> t8, // Error
+    {
+    required G s1, // Ok
+    required G<dynamic> s2, // Ok
+    required G<Class> s3, // Ok
+    required G<Class<dynamic>> s4, // Ok
+    required G<ConcreteClass> s5, // Ok
+    required G<Class<ConcreteClass>> s6, // Ok
+    required G<Object> s7, // Error
+    required G<int> s8, // Error
+  }) {}
+}
+
+extension Extension1 on int {
+  void method3(
+    F t1, // Ok
+    F<dynamic> t2, // Ok
+    F<Class> t3, // Ok
+    F<Class<dynamic>> t4, // Ok
+    F<ConcreteClass> t5, // Ok
+    F<Class<ConcreteClass>> t6, // Ok
+    F<Object> t7, // Error
+    F<int> t8, // Error
+    {
+    required G s1, // Ok
+    required G<dynamic> s2, // Ok
+    required G<Class> s3, // Ok
+    required G<Class<dynamic>> s4, // Ok
+    required G<ConcreteClass> s5, // Ok
+    required G<Class<ConcreteClass>> s6, // Ok
+    required G<Object> s7, // Error
+    required G<int> s8, // Error
+  }) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/general/bounds_parameters.dart.textual_outline.expect
new file mode 100644
index 0000000..27b2f52
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_parameters.dart.textual_outline.expect
@@ -0,0 +1,88 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+void method1(
+  F t1,
+  F<dynamic> t2,
+  F<Class> t3,
+  F<Class<dynamic>> t4,
+  F<ConcreteClass> t5,
+  F<Class<ConcreteClass>> t6,
+  F<Object> t7,
+  F<int> t8, {
+  required G s1,
+  required G<dynamic> s2,
+  required G<Class> s3,
+  required G<Class<dynamic>> s4,
+  required G<ConcreteClass> s5,
+  required G<Class<ConcreteClass>> s6,
+  required G<Object> s7,
+  required G<int> s8,
+}) {}
+
+class Class1 {
+  Class1(
+    F t1,
+    F<dynamic> t2,
+    F<Class> t3,
+    F<Class<dynamic>> t4,
+    F<ConcreteClass> t5,
+    F<Class<ConcreteClass>> t6,
+    F<Object> t7,
+    F<int> t8, {
+    required G s1,
+    required G<dynamic> s2,
+    required G<Class> s3,
+    required G<Class<dynamic>> s4,
+    required G<ConcreteClass> s5,
+    required G<Class<ConcreteClass>> s6,
+    required G<Object> s7,
+    required G<int> s8,
+  });
+  void method2(
+    F t1,
+    F<dynamic> t2,
+    F<Class> t3,
+    F<Class<dynamic>> t4,
+    F<ConcreteClass> t5,
+    F<Class<ConcreteClass>> t6,
+    F<Object> t7,
+    F<int> t8, {
+    required G s1,
+    required G<dynamic> s2,
+    required G<Class> s3,
+    required G<Class<dynamic>> s4,
+    required G<ConcreteClass> s5,
+    required G<Class<ConcreteClass>> s6,
+    required G<Object> s7,
+    required G<int> s8,
+  }) {}
+}
+
+extension Extension1 on int {
+  void method3(
+    F t1,
+    F<dynamic> t2,
+    F<Class> t3,
+    F<Class<dynamic>> t4,
+    F<ConcreteClass> t5,
+    F<Class<ConcreteClass>> t6,
+    F<Object> t7,
+    F<int> t8, {
+    required G s1,
+    required G<dynamic> s2,
+    required G<Class> s3,
+    required G<Class<dynamic>> s4,
+    required G<ConcreteClass> s5,
+    required G<Class<ConcreteClass>> s6,
+    required G<Object> s7,
+    required G<int> s8,
+  }) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bounds_parameters.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..443433c
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_parameters.dart.textual_outline_modelled.expect
@@ -0,0 +1,86 @@
+class Class<T> {}
+
+class Class1 {
+  Class1(
+    F t1,
+    F<dynamic> t2,
+    F<Class> t3,
+    F<Class<dynamic>> t4,
+    F<ConcreteClass> t5,
+    F<Class<ConcreteClass>> t6,
+    F<Object> t7,
+    F<int> t8, {
+    required G s1,
+    required G<dynamic> s2,
+    required G<Class> s3,
+    required G<Class<dynamic>> s4,
+    required G<ConcreteClass> s5,
+    required G<Class<ConcreteClass>> s6,
+    required G<Object> s7,
+    required G<int> s8,
+  });
+  void method2(
+    F t1,
+    F<dynamic> t2,
+    F<Class> t3,
+    F<Class<dynamic>> t4,
+    F<ConcreteClass> t5,
+    F<Class<ConcreteClass>> t6,
+    F<Object> t7,
+    F<int> t8, {
+    required G s1,
+    required G<dynamic> s2,
+    required G<Class> s3,
+    required G<Class<dynamic>> s4,
+    required G<ConcreteClass> s5,
+    required G<Class<ConcreteClass>> s6,
+    required G<Object> s7,
+    required G<int> s8,
+  }) {}
+}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+class G<X extends Class<X>> {}
+
+extension Extension1 on int {
+  void method3(
+    F t1,
+    F<dynamic> t2,
+    F<Class> t3,
+    F<Class<dynamic>> t4,
+    F<ConcreteClass> t5,
+    F<Class<ConcreteClass>> t6,
+    F<Object> t7,
+    F<int> t8, {
+    required G s1,
+    required G<dynamic> s2,
+    required G<Class> s3,
+    required G<Class<dynamic>> s4,
+    required G<ConcreteClass> s5,
+    required G<Class<ConcreteClass>> s6,
+    required G<Object> s7,
+    required G<int> s8,
+  }) {}
+}
+
+main() {}
+typedef F<X extends Class<X>> = X;
+void method1(
+  F t1,
+  F<dynamic> t2,
+  F<Class> t3,
+  F<Class<dynamic>> t4,
+  F<ConcreteClass> t5,
+  F<Class<ConcreteClass>> t6,
+  F<Object> t7,
+  F<int> t8, {
+  required G s1,
+  required G<dynamic> s2,
+  required G<Class> s3,
+  required G<Class<dynamic>> s4,
+  required G<ConcreteClass> s5,
+  required G<Class<ConcreteClass>> s6,
+  required G<Object> s7,
+  required G<int> s8,
+}) {}
diff --git a/pkg/front_end/testcases/general/bounds_parameters.dart.weak.expect b/pkg/front_end/testcases/general/bounds_parameters.dart.weak.expect
new file mode 100644
index 0000000..da70b89
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_parameters.dart.weak.expect
@@ -0,0 +1,273 @@
+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
+}
diff --git a/pkg/front_end/testcases/general/bounds_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_parameters.dart.weak.modular.expect
new file mode 100644
index 0000000..da70b89
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_parameters.dart.weak.modular.expect
@@ -0,0 +1,273 @@
+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
+}
diff --git a/pkg/front_end/testcases/general/bounds_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_parameters.dart.weak.outline.expect
new file mode 100644
index 0000000..841b07a
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_parameters.dart.weak.outline.expect
@@ -0,0 +1,190 @@
+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
+  ;
diff --git a/pkg/front_end/testcases/general/bounds_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_parameters.dart.weak.transformed.expect
new file mode 100644
index 0000000..da70b89
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_parameters.dart.weak.transformed.expect
@@ -0,0 +1,273 @@
+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
+}
diff --git a/pkg/front_end/testcases/general/bounds_return_types.dart b/pkg/front_end/testcases/general/bounds_return_types.dart
new file mode 100644
index 0000000..54e4b2f
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_return_types.dart
@@ -0,0 +1,87 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+F t1() => throw ''; // Ok
+F<dynamic> t2() => throw ''; // Ok
+F<Class> t3() => throw ''; // Ok
+F<Class<dynamic>> t4() => throw ''; // Ok
+F<ConcreteClass> t5() => throw ''; // Ok
+F<Class<ConcreteClass>> t6() => throw ''; // Ok
+F<Object> t7() => throw ''; // Error
+F<int> t8() => throw ''; // Error
+G s1() => throw ''; // Ok
+G<dynamic> s2() => throw ''; // Ok
+G<Class> s3() => throw ''; // Ok
+G<Class<dynamic>> s4() => throw ''; // Ok
+G<ConcreteClass> s5() => throw ''; // Ok
+G<Class<ConcreteClass>> s6() => throw ''; // Ok
+G<Object> s7() => throw ''; // Error
+G<int> s8() => throw ''; // Error
+
+method1() {
+  F t1() => throw ''; // Ok
+  F<dynamic> t2() => throw ''; // Ok
+  F<Class> t3() => throw ''; // Ok
+  F<Class<dynamic>> t4() => throw ''; // Ok
+  F<ConcreteClass> t5() => throw ''; // Ok
+  F<Class<ConcreteClass>> t6() => throw ''; // Ok
+  F<Object> t7() => throw ''; // Error
+  F<int> t8() => throw ''; // Error
+  G s1() => throw ''; // Ok
+  G<dynamic> s2() => throw ''; // Ok
+  G<Class> s3() => throw ''; // Ok
+  G<Class<dynamic>> s4() => throw ''; // Ok
+  G<ConcreteClass> s5() => throw ''; // Ok
+  G<Class<ConcreteClass>> s6() => throw ''; // Ok
+  G<Object> s7() => throw ''; // Error
+  G<int> s8() => throw ''; // Error
+}
+
+class Class1 {
+  F t1() => throw ''; // Ok
+  F<dynamic> t2() => throw ''; // Ok
+  F<Class> t3() => throw ''; // Ok
+  F<Class<dynamic>> t4() => throw ''; // Ok
+  F<ConcreteClass> t5() => throw ''; // Ok
+  F<Class<ConcreteClass>> t6() => throw ''; // Ok
+  F<Object> t7() => throw ''; // Error
+  F<int> t8() => throw ''; // Error
+  G s1() => throw ''; // Ok
+  G<dynamic> s2() => throw ''; // Ok
+  G<Class> s3() => throw ''; // Ok
+  G<Class<dynamic>> s4() => throw ''; // Ok
+  G<ConcreteClass> s5() => throw ''; // Ok
+  G<Class<ConcreteClass>> s6() => throw ''; // Ok
+  G<Object> s7() => throw ''; // Error
+  G<int> s8() => throw ''; // Error
+}
+
+extension Extension1 on int {
+  F t1() => throw ''; // Ok
+  F<dynamic> t2() => throw ''; // Ok
+  F<Class> t3() => throw ''; // Ok
+  F<Class<dynamic>> t4() => throw ''; // Ok
+  F<ConcreteClass> t5() => throw ''; // Ok
+  F<Class<ConcreteClass>> t6() => throw ''; // Ok
+  F<Object> t7() => throw ''; // Error
+  F<int> t8() => throw ''; // Error
+  G s1() => throw ''; // Ok
+  G<dynamic> s2() => throw ''; // Ok
+  G<Class> s3() => throw ''; // Ok
+  G<Class<dynamic>> s4() => throw ''; // Ok
+  G<ConcreteClass> s5() => throw ''; // Ok
+  G<Class<ConcreteClass>> s6() => throw ''; // Ok
+  G<Object> s7() => throw ''; // Error
+  G<int> s8() => throw ''; // Error
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_return_types.dart.textual_outline.expect b/pkg/front_end/testcases/general/bounds_return_types.dart.textual_outline.expect
new file mode 100644
index 0000000..0e5dcfa
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_return_types.dart.textual_outline.expect
@@ -0,0 +1,65 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+F t1() => throw '';
+F<dynamic> t2() => throw '';
+F<Class> t3() => throw '';
+F<Class<dynamic>> t4() => throw '';
+F<ConcreteClass> t5() => throw '';
+F<Class<ConcreteClass>> t6() => throw '';
+F<Object> t7() => throw '';
+F<int> t8() => throw '';
+G s1() => throw '';
+G<dynamic> s2() => throw '';
+G<Class> s3() => throw '';
+G<Class<dynamic>> s4() => throw '';
+G<ConcreteClass> s5() => throw '';
+G<Class<ConcreteClass>> s6() => throw '';
+G<Object> s7() => throw '';
+G<int> s8() => throw '';
+method1() {}
+
+class Class1 {
+  F t1() => throw '';
+  F<dynamic> t2() => throw '';
+  F<Class> t3() => throw '';
+  F<Class<dynamic>> t4() => throw '';
+  F<ConcreteClass> t5() => throw '';
+  F<Class<ConcreteClass>> t6() => throw '';
+  F<Object> t7() => throw '';
+  F<int> t8() => throw '';
+  G s1() => throw '';
+  G<dynamic> s2() => throw '';
+  G<Class> s3() => throw '';
+  G<Class<dynamic>> s4() => throw '';
+  G<ConcreteClass> s5() => throw '';
+  G<Class<ConcreteClass>> s6() => throw '';
+  G<Object> s7() => throw '';
+  G<int> s8() => throw '';
+}
+
+extension Extension1 on int {
+  F t1() => throw '';
+  F<dynamic> t2() => throw '';
+  F<Class> t3() => throw '';
+  F<Class<dynamic>> t4() => throw '';
+  F<ConcreteClass> t5() => throw '';
+  F<Class<ConcreteClass>> t6() => throw '';
+  F<Object> t7() => throw '';
+  F<int> t8() => throw '';
+  G s1() => throw '';
+  G<dynamic> s2() => throw '';
+  G<Class> s3() => throw '';
+  G<Class<dynamic>> s4() => throw '';
+  G<ConcreteClass> s5() => throw '';
+  G<Class<ConcreteClass>> s6() => throw '';
+  G<Object> s7() => throw '';
+  G<int> s8() => throw '';
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_return_types.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bounds_return_types.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d6ea412
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_return_types.dart.textual_outline_modelled.expect
@@ -0,0 +1,64 @@
+F<Class<ConcreteClass>> t6() => throw '';
+F<Class<dynamic>> t4() => throw '';
+F<Class> t3() => throw '';
+F<ConcreteClass> t5() => throw '';
+F<Object> t7() => throw '';
+F<dynamic> t2() => throw '';
+F<int> t8() => throw '';
+F t1() => throw '';
+G<Class<ConcreteClass>> s6() => throw '';
+G<Class<dynamic>> s4() => throw '';
+G<Class> s3() => throw '';
+G<ConcreteClass> s5() => throw '';
+G<Object> s7() => throw '';
+G<dynamic> s2() => throw '';
+G<int> s8() => throw '';
+G s1() => throw '';
+
+class Class<T> {}
+
+class Class1 {
+  F<Class<ConcreteClass>> t6() => throw '';
+  F<Class<dynamic>> t4() => throw '';
+  F<Class> t3() => throw '';
+  F<ConcreteClass> t5() => throw '';
+  F<Object> t7() => throw '';
+  F<dynamic> t2() => throw '';
+  F<int> t8() => throw '';
+  F t1() => throw '';
+  G<Class<ConcreteClass>> s6() => throw '';
+  G<Class<dynamic>> s4() => throw '';
+  G<Class> s3() => throw '';
+  G<ConcreteClass> s5() => throw '';
+  G<Object> s7() => throw '';
+  G<dynamic> s2() => throw '';
+  G<int> s8() => throw '';
+  G s1() => throw '';
+}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+class G<X extends Class<X>> {}
+
+extension Extension1 on int {
+  F<Class<ConcreteClass>> t6() => throw '';
+  F<Class<dynamic>> t4() => throw '';
+  F<Class> t3() => throw '';
+  F<ConcreteClass> t5() => throw '';
+  F<Object> t7() => throw '';
+  F<dynamic> t2() => throw '';
+  F<int> t8() => throw '';
+  F t1() => throw '';
+  G<Class<ConcreteClass>> s6() => throw '';
+  G<Class<dynamic>> s4() => throw '';
+  G<Class> s3() => throw '';
+  G<ConcreteClass> s5() => throw '';
+  G<Object> s7() => throw '';
+  G<dynamic> s2() => throw '';
+  G<int> s8() => throw '';
+  G s1() => throw '';
+}
+
+main() {}
+method1() {}
+typedef F<X extends Class<X>> = X;
diff --git a/pkg/front_end/testcases/general/bounds_return_types.dart.weak.expect b/pkg/front_end/testcases/general/bounds_return_types.dart.weak.expect
new file mode 100644
index 0000000..6adeaf2
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_return_types.dart.weak.expect
@@ -0,0 +1,377 @@
+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 {}
diff --git a/pkg/front_end/testcases/general/bounds_return_types.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_return_types.dart.weak.modular.expect
new file mode 100644
index 0000000..6adeaf2
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_return_types.dart.weak.modular.expect
@@ -0,0 +1,377 @@
+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 {}
diff --git a/pkg/front_end/testcases/general/bounds_return_types.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_return_types.dart.weak.outline.expect
new file mode 100644
index 0000000..4d68a21
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_return_types.dart.weak.outline.expect
@@ -0,0 +1,304 @@
+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
+  ;
diff --git a/pkg/front_end/testcases/general/bounds_return_types.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_return_types.dart.weak.transformed.expect
new file mode 100644
index 0000000..6adeaf2
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_return_types.dart.weak.transformed.expect
@@ -0,0 +1,377 @@
+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 {}
diff --git a/pkg/front_end/testcases/general/bounds_supertypes.dart b/pkg/front_end/testcases/general/bounds_supertypes.dart
new file mode 100644
index 0000000..40f4ea1
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_supertypes.dart
@@ -0,0 +1,237 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = Class<X>;
+
+class G<X extends Class<X>> {}
+
+class ExtendsT1 extends F {} // Error
+
+class ExtendsT2 extends F<dynamic> {} // Error
+
+class ExtendsT3 extends F<Class> {} // Error
+
+class ExtendsT4 extends F<Class<dynamic>> {} // Error
+
+class ExtendsT5 extends F<ConcreteClass> {} // Ok
+
+class ExtendsT6 extends F<Class<ConcreteClass>> {} // Ok
+
+class ExtendsT7 extends F<Object> {} // Error
+
+class ExtendsT8 extends F<int> {} // Error
+
+class ExtendsS1 extends G {} // Error
+
+class ExtendsS2 extends G<dynamic> {} // Error
+
+class ExtendsS3 extends G<Class> {} // Error
+
+class ExtendsS4 extends G<Class<dynamic>> {} // Error
+
+class ExtendsS5 extends G<ConcreteClass> {} // Ok
+
+class ExtendsS6 extends G<Class<ConcreteClass>> {} // Ok
+
+class ExtendsS7 extends G<Object> {} // Error
+
+class ExtendsS8 extends G<int> {} // Error
+
+class ImplementsT1 implements F {} // Error
+
+class ImplementsT2 implements F<dynamic> {} // Error
+
+class ImplementsT3 implements F<Class> {} // Error
+
+class ImplementsT4 implements F<Class<dynamic>> {} // Error
+
+class ImplementsT5 implements F<ConcreteClass> {} // Ok
+
+class ImplementsT6 implements F<Class<ConcreteClass>> {} // Ok
+
+class ImplementsT7 implements F<Object> {} // Error
+
+class ImplementsT8 implements F<int> {} // Error
+
+class ImplementsS1 implements G {} // Error
+
+class ImplementsS2 implements G<dynamic> {} // Error
+
+class ImplementsS3 implements G<Class> {} // Error
+
+class ImplementsS4 implements G<Class<dynamic>> {} // Error
+
+class ImplementsS5 implements G<ConcreteClass> {} // Ok
+
+class ImplementsS6 implements G<Class<ConcreteClass>> {} // Ok
+
+class ImplementsS7 implements G<Object> {} // Error
+
+class ImplementsS8 implements G<int> {} // Error
+
+class WithT1 with F {} // Error
+
+class WithT2 with F<dynamic> {} // Error
+
+class WithT3 with F<Class> {} // Error
+
+class WithT4 with F<Class<dynamic>> {} // Error
+
+class WithT5 with F<ConcreteClass> {} // Ok
+
+class WithT6 with F<Class<ConcreteClass>> {} // Ok
+
+class WithT7 with F<Object> {} // Error
+
+class WithT8 with F<int> {} // Error
+
+class WithS1 with G {} // Error
+
+class WithS2 with G<dynamic> {} // Error
+
+class WithS3 with G<Class> {} // Error
+
+class WithS4 with G<Class<dynamic>> {} // Error
+
+class WithS5 with G<ConcreteClass> {} // Ok
+
+class WithS6 with G<Class<ConcreteClass>> {} // Ok
+
+class WithS7 with G<Object> {} // Error
+
+class WithS8 with G<int> {} // Error
+
+enum EnumImplementsT1 implements F /* Error */ { a }
+
+enum EnumImplementsT2 implements F<dynamic> /* Error */ { a }
+
+enum EnumImplementsT3 implements F<Class> /* Error */ { a }
+
+enum EnumImplementsT4 implements F<Class<dynamic>> /* Error */ { a }
+
+enum EnumImplementsT5 implements F<ConcreteClass> /* Ok */ { a }
+
+enum EnumImplementsT6 implements F<Class<ConcreteClass>> /* Ok */ { a }
+
+enum EnumImplementsT7 implements F<Object> /* Error */ { a }
+
+enum EnumImplementsT8 implements F<int> /* Error */ { a }
+
+enum EnumImplementsS1 implements G /* Error */ { a }
+
+enum EnumImplementsS2 implements G<dynamic> /* Error */ { a }
+
+enum EnumImplementsS3 implements G<Class> /* Error */ { a }
+
+enum EnumImplementsS4 implements G<Class<dynamic>> /* Error */ { a }
+
+enum EnumImplementsS5 implements G<ConcreteClass> /* Ok */ { a }
+
+enum EnumImplementsS6 implements G<Class<ConcreteClass>> /* Ok */ { a }
+
+enum EnumImplementsS7 implements G<Object> /* Error */ { a }
+
+enum EnumImplementsS8 implements G<int> /* Error */ { a }
+
+enum EnumWithT1 with F /* Error */ { a }
+
+enum EnumWithT2 with F<dynamic> /* Error */ { a }
+
+enum EnumWithT3 with F<Class> /* Error */ { a }
+
+enum EnumWithT4 with F<Class<dynamic>> /* Error */ { a }
+
+enum EnumWithT5 with F<ConcreteClass> /* Ok */ { a }
+
+enum EnumWithT6 with F<Class<ConcreteClass>> /* Ok */ { a }
+
+enum EnumWithT7 with F<Object> /* Error */ { a }
+
+enum EnumWithT8 with F<int> /* Error */ { a }
+
+enum EnumWithS1 with G /* Error */ { a }
+
+enum EnumWithS2 with G<dynamic> /* Error */ { a }
+
+enum EnumWithS3 with G<Class> /* Error */ { a }
+
+enum EnumWithS4 with G<Class<dynamic>> /* Error */ { a }
+
+enum EnumWithS5 with G<ConcreteClass> /* Ok */ { a }
+
+enum EnumWithS6 with G<Class<ConcreteClass>> /* Ok */ { a }
+
+enum EnumWithS7 with G<Object> /* Error */ { a }
+
+enum EnumWithS8 with G<int> /* Error */ { a }
+
+mixin MixinOnT1 on F {} // Error
+
+mixin MixinOnT2 on F<dynamic> {} // Error
+
+mixin MixinOnT3 on F<Class> {} // Error
+
+mixin MixinOnT4 on F<Class<dynamic>> {} // Error
+
+mixin MixinOnT5 on F<ConcreteClass> {} // Ok
+
+mixin MixinOnT6 on F<Class<ConcreteClass>> {} // Ok
+
+mixin MixinOnT7 on F<Object> {} // Error
+
+mixin MixinOnT8 on F<int> {} // Error
+
+mixin MixinOnS1 on G {} // Error
+
+mixin MixinOnS2 on G<dynamic> {} // Error
+
+mixin MixinOnS3 on G<Class> {} // Error
+
+mixin MixinOnS4 on G<Class<dynamic>> {} // Error
+
+mixin MixinOnS5 on G<ConcreteClass> {} // Ok
+
+mixin MixinOnS6 on G<Class<ConcreteClass>> {} // Ok
+
+mixin MixinOnS7 on G<Object> {} // Error
+
+mixin MixinOnS8 on G<int> {} // Error
+
+extension ExtensionOnT1 on F {} // Ok
+
+extension ExtensionOnT2 on F<dynamic> {} // Ok
+
+extension ExtensionOnT3 on F<Class> {} // Ok
+
+extension ExtensionOnT4 on F<Class<dynamic>> {} // Ok
+
+extension ExtensionOnT5 on F<ConcreteClass> {} // Ok
+
+extension ExtensionOnT6 on F<Class<ConcreteClass>> {} // Ok
+
+extension ExtensionOnT7 on F<Object> {} // Error
+
+extension ExtensionOnT8 on F<int> {} // Error
+
+extension ExtensionOnS1 on G {} // Ok
+
+extension ExtensionOnS2 on G<dynamic> {} // Ok
+
+extension ExtensionOnS3 on G<Class> {} // Ok
+
+extension ExtensionOnS4 on G<Class<dynamic>> {} // Ok
+
+extension ExtensionOnS5 on G<ConcreteClass> {} // Ok
+
+extension ExtensionOnS6 on G<Class<ConcreteClass>> {} // Ok
+
+extension ExtensionOnS7 on G<Object> {} // Error
+
+extension ExtensionOnS8 on G<int> {} // Error
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_supertypes.dart.textual_outline.expect b/pkg/front_end/testcases/general/bounds_supertypes.dart.textual_outline.expect
new file mode 100644
index 0000000..411c612
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_supertypes.dart.textual_outline.expect
@@ -0,0 +1,218 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = Class<X>;
+
+class G<X extends Class<X>> {}
+
+class ExtendsT1 extends F {}
+
+class ExtendsT2 extends F<dynamic> {}
+
+class ExtendsT3 extends F<Class> {}
+
+class ExtendsT4 extends F<Class<dynamic>> {}
+
+class ExtendsT5 extends F<ConcreteClass> {}
+
+class ExtendsT6 extends F<Class<ConcreteClass>> {}
+
+class ExtendsT7 extends F<Object> {}
+
+class ExtendsT8 extends F<int> {}
+
+class ExtendsS1 extends G {}
+
+class ExtendsS2 extends G<dynamic> {}
+
+class ExtendsS3 extends G<Class> {}
+
+class ExtendsS4 extends G<Class<dynamic>> {}
+
+class ExtendsS5 extends G<ConcreteClass> {}
+
+class ExtendsS6 extends G<Class<ConcreteClass>> {}
+
+class ExtendsS7 extends G<Object> {}
+
+class ExtendsS8 extends G<int> {}
+
+class ImplementsT1 implements F {}
+
+class ImplementsT2 implements F<dynamic> {}
+
+class ImplementsT3 implements F<Class> {}
+
+class ImplementsT4 implements F<Class<dynamic>> {}
+
+class ImplementsT5 implements F<ConcreteClass> {}
+
+class ImplementsT6 implements F<Class<ConcreteClass>> {}
+
+class ImplementsT7 implements F<Object> {}
+
+class ImplementsT8 implements F<int> {}
+
+class ImplementsS1 implements G {}
+
+class ImplementsS2 implements G<dynamic> {}
+
+class ImplementsS3 implements G<Class> {}
+
+class ImplementsS4 implements G<Class<dynamic>> {}
+
+class ImplementsS5 implements G<ConcreteClass> {}
+
+class ImplementsS6 implements G<Class<ConcreteClass>> {}
+
+class ImplementsS7 implements G<Object> {}
+
+class ImplementsS8 implements G<int> {}
+
+class WithT1 with F {}
+
+class WithT2 with F<dynamic> {}
+
+class WithT3 with F<Class> {}
+
+class WithT4 with F<Class<dynamic>> {}
+
+class WithT5 with F<ConcreteClass> {}
+
+class WithT6 with F<Class<ConcreteClass>> {}
+
+class WithT7 with F<Object> {}
+
+class WithT8 with F<int> {}
+
+class WithS1 with G {}
+
+class WithS2 with G<dynamic> {}
+
+class WithS3 with G<Class> {}
+
+class WithS4 with G<Class<dynamic>> {}
+
+class WithS5 with G<ConcreteClass> {}
+
+class WithS6 with G<Class<ConcreteClass>> {}
+
+class WithS7 with G<Object> {}
+
+class WithS8 with G<int> {}
+
+enum EnumImplementsT1 implements F { a }
+
+enum EnumImplementsT2 implements F<dynamic> { a }
+
+enum EnumImplementsT3 implements F<Class> { a }
+
+enum EnumImplementsT4 implements F<Class<dynamic>> { a }
+
+enum EnumImplementsT5 implements F<ConcreteClass> { a }
+
+enum EnumImplementsT6 implements F<Class<ConcreteClass>> { a }
+
+enum EnumImplementsT7 implements F<Object> { a }
+
+enum EnumImplementsT8 implements F<int> { a }
+
+enum EnumImplementsS1 implements G { a }
+
+enum EnumImplementsS2 implements G<dynamic> { a }
+
+enum EnumImplementsS3 implements G<Class> { a }
+
+enum EnumImplementsS4 implements G<Class<dynamic>> { a }
+
+enum EnumImplementsS5 implements G<ConcreteClass> { a }
+
+enum EnumImplementsS6 implements G<Class<ConcreteClass>> { a }
+
+enum EnumImplementsS7 implements G<Object> { a }
+
+enum EnumImplementsS8 implements G<int> { a }
+
+enum EnumWithT1 with F { a }
+
+enum EnumWithT2 with F<dynamic> { a }
+
+enum EnumWithT3 with F<Class> { a }
+
+enum EnumWithT4 with F<Class<dynamic>> { a }
+
+enum EnumWithT5 with F<ConcreteClass> { a }
+
+enum EnumWithT6 with F<Class<ConcreteClass>> { a }
+
+enum EnumWithT7 with F<Object> { a }
+
+enum EnumWithT8 with F<int> { a }
+
+enum EnumWithS1 with G { a }
+
+enum EnumWithS2 with G<dynamic> { a }
+
+enum EnumWithS3 with G<Class> { a }
+
+enum EnumWithS4 with G<Class<dynamic>> { a }
+
+enum EnumWithS5 with G<ConcreteClass> { a }
+
+enum EnumWithS6 with G<Class<ConcreteClass>> { a }
+
+enum EnumWithS7 with G<Object> { a }
+
+enum EnumWithS8 with G<int> { a }
+
+mixin MixinOnT1 on F {}
+mixin MixinOnT2 on F<dynamic> {}
+mixin MixinOnT3 on F<Class> {}
+mixin MixinOnT4 on F<Class<dynamic>> {}
+mixin MixinOnT5 on F<ConcreteClass> {}
+mixin MixinOnT6 on F<Class<ConcreteClass>> {}
+mixin MixinOnT7 on F<Object> {}
+mixin MixinOnT8 on F<int> {}
+mixin MixinOnS1 on G {}
+mixin MixinOnS2 on G<dynamic> {}
+mixin MixinOnS3 on G<Class> {}
+mixin MixinOnS4 on G<Class<dynamic>> {}
+mixin MixinOnS5 on G<ConcreteClass> {}
+mixin MixinOnS6 on G<Class<ConcreteClass>> {}
+mixin MixinOnS7 on G<Object> {}
+mixin MixinOnS8 on G<int> {}
+
+extension ExtensionOnT1 on F {}
+
+extension ExtensionOnT2 on F<dynamic> {}
+
+extension ExtensionOnT3 on F<Class> {}
+
+extension ExtensionOnT4 on F<Class<dynamic>> {}
+
+extension ExtensionOnT5 on F<ConcreteClass> {}
+
+extension ExtensionOnT6 on F<Class<ConcreteClass>> {}
+
+extension ExtensionOnT7 on F<Object> {}
+
+extension ExtensionOnT8 on F<int> {}
+
+extension ExtensionOnS1 on G {}
+
+extension ExtensionOnS2 on G<dynamic> {}
+
+extension ExtensionOnS3 on G<Class> {}
+
+extension ExtensionOnS4 on G<Class<dynamic>> {}
+
+extension ExtensionOnS5 on G<ConcreteClass> {}
+
+extension ExtensionOnS6 on G<Class<ConcreteClass>> {}
+
+extension ExtensionOnS7 on G<Object> {}
+
+extension ExtensionOnS8 on G<int> {}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_supertypes.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bounds_supertypes.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..5203bb6
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_supertypes.dart.textual_outline_modelled.expect
@@ -0,0 +1,216 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+class ExtendsS1 extends G {}
+
+class ExtendsS2 extends G<dynamic> {}
+
+class ExtendsS3 extends G<Class> {}
+
+class ExtendsS4 extends G<Class<dynamic>> {}
+
+class ExtendsS5 extends G<ConcreteClass> {}
+
+class ExtendsS6 extends G<Class<ConcreteClass>> {}
+
+class ExtendsS7 extends G<Object> {}
+
+class ExtendsS8 extends G<int> {}
+
+class ExtendsT1 extends F {}
+
+class ExtendsT2 extends F<dynamic> {}
+
+class ExtendsT3 extends F<Class> {}
+
+class ExtendsT4 extends F<Class<dynamic>> {}
+
+class ExtendsT5 extends F<ConcreteClass> {}
+
+class ExtendsT6 extends F<Class<ConcreteClass>> {}
+
+class ExtendsT7 extends F<Object> {}
+
+class ExtendsT8 extends F<int> {}
+
+class G<X extends Class<X>> {}
+
+class ImplementsS1 implements G {}
+
+class ImplementsS2 implements G<dynamic> {}
+
+class ImplementsS3 implements G<Class> {}
+
+class ImplementsS4 implements G<Class<dynamic>> {}
+
+class ImplementsS5 implements G<ConcreteClass> {}
+
+class ImplementsS6 implements G<Class<ConcreteClass>> {}
+
+class ImplementsS7 implements G<Object> {}
+
+class ImplementsS8 implements G<int> {}
+
+class ImplementsT1 implements F {}
+
+class ImplementsT2 implements F<dynamic> {}
+
+class ImplementsT3 implements F<Class> {}
+
+class ImplementsT4 implements F<Class<dynamic>> {}
+
+class ImplementsT5 implements F<ConcreteClass> {}
+
+class ImplementsT6 implements F<Class<ConcreteClass>> {}
+
+class ImplementsT7 implements F<Object> {}
+
+class ImplementsT8 implements F<int> {}
+
+class WithS1 with G {}
+
+class WithS2 with G<dynamic> {}
+
+class WithS3 with G<Class> {}
+
+class WithS4 with G<Class<dynamic>> {}
+
+class WithS5 with G<ConcreteClass> {}
+
+class WithS6 with G<Class<ConcreteClass>> {}
+
+class WithS7 with G<Object> {}
+
+class WithS8 with G<int> {}
+
+class WithT1 with F {}
+
+class WithT2 with F<dynamic> {}
+
+class WithT3 with F<Class> {}
+
+class WithT4 with F<Class<dynamic>> {}
+
+class WithT5 with F<ConcreteClass> {}
+
+class WithT6 with F<Class<ConcreteClass>> {}
+
+class WithT7 with F<Object> {}
+
+class WithT8 with F<int> {}
+
+enum EnumImplementsS1 implements G { a }
+
+enum EnumImplementsS2 implements G<dynamic> { a }
+
+enum EnumImplementsS3 implements G<Class> { a }
+
+enum EnumImplementsS4 implements G<Class<dynamic>> { a }
+
+enum EnumImplementsS5 implements G<ConcreteClass> { a }
+
+enum EnumImplementsS6 implements G<Class<ConcreteClass>> { a }
+
+enum EnumImplementsS7 implements G<Object> { a }
+
+enum EnumImplementsS8 implements G<int> { a }
+
+enum EnumImplementsT1 implements F { a }
+
+enum EnumImplementsT2 implements F<dynamic> { a }
+
+enum EnumImplementsT3 implements F<Class> { a }
+
+enum EnumImplementsT4 implements F<Class<dynamic>> { a }
+
+enum EnumImplementsT5 implements F<ConcreteClass> { a }
+
+enum EnumImplementsT6 implements F<Class<ConcreteClass>> { a }
+
+enum EnumImplementsT7 implements F<Object> { a }
+
+enum EnumImplementsT8 implements F<int> { a }
+
+enum EnumWithS1 with G { a }
+
+enum EnumWithS2 with G<dynamic> { a }
+
+enum EnumWithS3 with G<Class> { a }
+
+enum EnumWithS4 with G<Class<dynamic>> { a }
+
+enum EnumWithS5 with G<ConcreteClass> { a }
+
+enum EnumWithS6 with G<Class<ConcreteClass>> { a }
+
+enum EnumWithS7 with G<Object> { a }
+
+enum EnumWithS8 with G<int> { a }
+
+enum EnumWithT1 with F { a }
+
+enum EnumWithT2 with F<dynamic> { a }
+
+enum EnumWithT3 with F<Class> { a }
+
+enum EnumWithT4 with F<Class<dynamic>> { a }
+
+enum EnumWithT5 with F<ConcreteClass> { a }
+
+enum EnumWithT6 with F<Class<ConcreteClass>> { a }
+
+enum EnumWithT7 with F<Object> { a }
+
+enum EnumWithT8 with F<int> { a }
+
+extension ExtensionOnS1 on G {}
+
+extension ExtensionOnS2 on G<dynamic> {}
+
+extension ExtensionOnS3 on G<Class> {}
+
+extension ExtensionOnS4 on G<Class<dynamic>> {}
+
+extension ExtensionOnS5 on G<ConcreteClass> {}
+
+extension ExtensionOnS6 on G<Class<ConcreteClass>> {}
+
+extension ExtensionOnS7 on G<Object> {}
+
+extension ExtensionOnS8 on G<int> {}
+
+extension ExtensionOnT1 on F {}
+
+extension ExtensionOnT2 on F<dynamic> {}
+
+extension ExtensionOnT3 on F<Class> {}
+
+extension ExtensionOnT4 on F<Class<dynamic>> {}
+
+extension ExtensionOnT5 on F<ConcreteClass> {}
+
+extension ExtensionOnT6 on F<Class<ConcreteClass>> {}
+
+extension ExtensionOnT7 on F<Object> {}
+
+extension ExtensionOnT8 on F<int> {}
+
+main() {}
+mixin MixinOnS1 on G {}
+mixin MixinOnS2 on G<dynamic> {}
+mixin MixinOnS3 on G<Class> {}
+mixin MixinOnS4 on G<Class<dynamic>> {}
+mixin MixinOnS5 on G<ConcreteClass> {}
+mixin MixinOnS6 on G<Class<ConcreteClass>> {}
+mixin MixinOnS7 on G<Object> {}
+mixin MixinOnS8 on G<int> {}
+mixin MixinOnT1 on F {}
+mixin MixinOnT2 on F<dynamic> {}
+mixin MixinOnT3 on F<Class> {}
+mixin MixinOnT4 on F<Class<dynamic>> {}
+mixin MixinOnT5 on F<ConcreteClass> {}
+mixin MixinOnT6 on F<Class<ConcreteClass>> {}
+mixin MixinOnT7 on F<Object> {}
+mixin MixinOnT8 on F<int> {}
+typedef F<X extends Class<X>> = Class<X>;
diff --git a/pkg/front_end/testcases/general/bounds_supertypes.dart.weak.expect b/pkg/front_end/testcases/general/bounds_supertypes.dart.weak.expect
new file mode 100644
index 0000000..4b8667d
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_supertypes.dart.weak.expect
@@ -0,0 +1,1599 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:13:25: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class ExtendsT1 extends F {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:15:25: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT2 extends F<dynamic> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:17:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT3 extends F<Class> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:19:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT4 extends F<Class<dynamic>> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:25:25: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT7 extends F<Object> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:27:25: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT8 extends F<int> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:29:25: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class ExtendsS1 extends G {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:31:25: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS2 extends G<dynamic> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:33:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS3 extends G<Class> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:35:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS4 extends G<Class<dynamic>> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:41:25: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS7 extends G<Object> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:43:25: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS8 extends G<int> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:45:31: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class ImplementsT1 implements F {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:47:31: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT2 implements F<dynamic> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:49:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT3 implements F<Class> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:51:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT4 implements F<Class<dynamic>> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:57:31: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT7 implements F<Object> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:59:31: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT8 implements F<int> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:61:31: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class ImplementsS1 implements G {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:63:31: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS2 implements G<dynamic> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:65:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS3 implements G<Class> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:67:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS4 implements G<Class<dynamic>> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:73:31: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS7 implements G<Object> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:75:31: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS8 implements G<int> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:77:19: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class WithT1 with F {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:79:19: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT2 with F<dynamic> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:81:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT3 with F<Class> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:83:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT4 with F<Class<dynamic>> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:89:19: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT7 with F<Object> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:91:19: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT8 with F<int> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:109:34: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum EnumImplementsT1 implements F /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:111:34: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT2 implements F<dynamic> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:113:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT3 implements F<Class> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:115:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT4 implements F<Class<dynamic>> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:121:34: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT7 implements F<Object> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:123:34: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT8 implements F<int> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:125:34: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum EnumImplementsS1 implements G /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:127:34: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS2 implements G<dynamic> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:129:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS3 implements G<Class> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:131:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS4 implements G<Class<dynamic>> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:137:34: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS7 implements G<Object> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:139:34: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS8 implements G<int> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:141:22: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum EnumWithT1 with F /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:143:22: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT2 with F<dynamic> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:145:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT3 with F<Class> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:147:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT4 with F<Class<dynamic>> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:153:22: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT7 with F<Object> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:155:22: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT8 with F<int> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:173:20: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// mixin MixinOnT1 on F {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:175:20: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT2 on F<dynamic> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:177:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT3 on F<Class> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:179:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT4 on F<Class<dynamic>> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:185:20: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT7 on F<Object> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:187:20: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT8 on F<int> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:189:20: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// mixin MixinOnS1 on G {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:191:20: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS2 on G<dynamic> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:193:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS3 on G<Class> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:195:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS4 on G<Class<dynamic>> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:201:20: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS7 on G<Object> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:203:20: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS8 on G<int> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:217:28: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ExtensionOnT7 on F<Object> {} // Error
+//                            ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:219:28: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ExtensionOnT8 on F<int> {} // Error
+//                            ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:233:28: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ExtensionOnS7 on G<Object> {} // Error
+//                            ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:235:28: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ExtensionOnS8 on G<int> {} // Error
+//                            ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:93:19: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class WithS1 with G {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:95:19: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS2 with G<dynamic> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:97:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS3 with G<Class> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:99:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS4 with G<Class<dynamic>> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:105:19: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS7 with G<Object> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:107:19: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS8 with G<int> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:157:22: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum EnumWithS1 with G /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:159:22: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS2 with G<dynamic> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:161:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS3 with G<Class> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:163:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS4 with G<Class<dynamic>> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:169:22: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS7 with G<Object> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:171:22: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS8 with G<int> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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>> = self::Class<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 ExtendsT1 extends self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsT1
+    : super self::Class::•()
+    ;
+}
+class ExtendsT2 extends self::Class<dynamic> {
+  synthetic constructor •() → self::ExtendsT2
+    : super self::Class::•()
+    ;
+}
+class ExtendsT3 extends self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsT3
+    : super self::Class::•()
+    ;
+}
+class ExtendsT4 extends self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsT4
+    : super self::Class::•()
+    ;
+}
+class ExtendsT5 extends self::Class<self::ConcreteClass> {
+  synthetic constructor •() → self::ExtendsT5
+    : super self::Class::•()
+    ;
+}
+class ExtendsT6 extends self::Class<self::Class<self::ConcreteClass>> {
+  synthetic constructor •() → self::ExtendsT6
+    : super self::Class::•()
+    ;
+}
+class ExtendsT7 extends self::Class<core::Object> {
+  synthetic constructor •() → self::ExtendsT7
+    : super self::Class::•()
+    ;
+}
+class ExtendsT8 extends self::Class<core::int> {
+  synthetic constructor •() → self::ExtendsT8
+    : super self::Class::•()
+    ;
+}
+class ExtendsS1 extends self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsS1
+    : super self::G::•()
+    ;
+}
+class ExtendsS2 extends self::G<dynamic> {
+  synthetic constructor •() → self::ExtendsS2
+    : super self::G::•()
+    ;
+}
+class ExtendsS3 extends self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsS3
+    : super self::G::•()
+    ;
+}
+class ExtendsS4 extends self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsS4
+    : super self::G::•()
+    ;
+}
+class ExtendsS5 extends self::G<self::ConcreteClass> {
+  synthetic constructor •() → self::ExtendsS5
+    : super self::G::•()
+    ;
+}
+class ExtendsS6 extends self::G<self::Class<self::ConcreteClass>> {
+  synthetic constructor •() → self::ExtendsS6
+    : super self::G::•()
+    ;
+}
+class ExtendsS7 extends self::G<core::Object> {
+  synthetic constructor •() → self::ExtendsS7
+    : super self::G::•()
+    ;
+}
+class ExtendsS8 extends self::G<core::int> {
+  synthetic constructor •() → self::ExtendsS8
+    : super self::G::•()
+    ;
+}
+class ImplementsT1 extends core::Object implements self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsT1
+    : super core::Object::•()
+    ;
+}
+class ImplementsT2 extends core::Object implements self::Class<dynamic> {
+  synthetic constructor •() → self::ImplementsT2
+    : super core::Object::•()
+    ;
+}
+class ImplementsT3 extends core::Object implements self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsT3
+    : super core::Object::•()
+    ;
+}
+class ImplementsT4 extends core::Object implements self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsT4
+    : super core::Object::•()
+    ;
+}
+class ImplementsT5 extends core::Object implements self::Class<self::ConcreteClass> {
+  synthetic constructor •() → self::ImplementsT5
+    : super core::Object::•()
+    ;
+}
+class ImplementsT6 extends core::Object implements self::Class<self::Class<self::ConcreteClass>> {
+  synthetic constructor •() → self::ImplementsT6
+    : super core::Object::•()
+    ;
+}
+class ImplementsT7 extends core::Object implements self::Class<core::Object> {
+  synthetic constructor •() → self::ImplementsT7
+    : super core::Object::•()
+    ;
+}
+class ImplementsT8 extends core::Object implements self::Class<core::int> {
+  synthetic constructor •() → self::ImplementsT8
+    : super core::Object::•()
+    ;
+}
+class ImplementsS1 extends core::Object implements self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsS1
+    : super core::Object::•()
+    ;
+}
+class ImplementsS2 extends core::Object implements self::G<dynamic> {
+  synthetic constructor •() → self::ImplementsS2
+    : super core::Object::•()
+    ;
+}
+class ImplementsS3 extends core::Object implements self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsS3
+    : super core::Object::•()
+    ;
+}
+class ImplementsS4 extends core::Object implements self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsS4
+    : super core::Object::•()
+    ;
+}
+class ImplementsS5 extends core::Object implements self::G<self::ConcreteClass> {
+  synthetic constructor •() → self::ImplementsS5
+    : super core::Object::•()
+    ;
+}
+class ImplementsS6 extends core::Object implements self::G<self::Class<self::ConcreteClass>> {
+  synthetic constructor •() → self::ImplementsS6
+    : super core::Object::•()
+    ;
+}
+class ImplementsS7 extends core::Object implements self::G<core::Object> {
+  synthetic constructor •() → self::ImplementsS7
+    : super core::Object::•()
+    ;
+}
+class ImplementsS8 extends core::Object implements self::G<core::int> {
+  synthetic constructor •() → self::ImplementsS8
+    : super core::Object::•()
+    ;
+}
+abstract class _WithT1&Object&F = core::Object with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT1&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT1 extends self::_WithT1&Object&F {
+  synthetic constructor •() → self::WithT1
+    : super self::_WithT1&Object&F::•()
+    ;
+}
+abstract class _WithT2&Object&F = core::Object with self::Class<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT2&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT2 extends self::_WithT2&Object&F {
+  synthetic constructor •() → self::WithT2
+    : super self::_WithT2&Object&F::•()
+    ;
+}
+abstract class _WithT3&Object&F = core::Object with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT3&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT3 extends self::_WithT3&Object&F {
+  synthetic constructor •() → self::WithT3
+    : super self::_WithT3&Object&F::•()
+    ;
+}
+abstract class _WithT4&Object&F = core::Object with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT4&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT4 extends self::_WithT4&Object&F {
+  synthetic constructor •() → self::WithT4
+    : super self::_WithT4&Object&F::•()
+    ;
+}
+abstract class _WithT5&Object&F = core::Object with self::Class<self::ConcreteClass> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT5&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT5 extends self::_WithT5&Object&F {
+  synthetic constructor •() → self::WithT5
+    : super self::_WithT5&Object&F::•()
+    ;
+}
+abstract class _WithT6&Object&F = core::Object with self::Class<self::Class<self::ConcreteClass>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT6&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT6 extends self::_WithT6&Object&F {
+  synthetic constructor •() → self::WithT6
+    : super self::_WithT6&Object&F::•()
+    ;
+}
+abstract class _WithT7&Object&F = core::Object with self::Class<core::Object> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT7&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT7 extends self::_WithT7&Object&F {
+  synthetic constructor •() → self::WithT7
+    : super self::_WithT7&Object&F::•()
+    ;
+}
+abstract class _WithT8&Object&F = core::Object with self::Class<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT8&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT8 extends self::_WithT8&Object&F {
+  synthetic constructor •() → self::WithT8
+    : super self::_WithT8&Object&F::•()
+    ;
+}
+abstract class _WithS1&Object&G = core::Object with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS1&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS1 extends self::_WithS1&Object&G {
+  synthetic constructor •() → self::WithS1
+    : super self::_WithS1&Object&G::•()
+    ;
+}
+abstract class _WithS2&Object&G = core::Object with self::G<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS2&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS2 extends self::_WithS2&Object&G {
+  synthetic constructor •() → self::WithS2
+    : super self::_WithS2&Object&G::•()
+    ;
+}
+abstract class _WithS3&Object&G = core::Object with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS3&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS3 extends self::_WithS3&Object&G {
+  synthetic constructor •() → self::WithS3
+    : super self::_WithS3&Object&G::•()
+    ;
+}
+abstract class _WithS4&Object&G = core::Object with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS4&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS4 extends self::_WithS4&Object&G {
+  synthetic constructor •() → self::WithS4
+    : super self::_WithS4&Object&G::•()
+    ;
+}
+abstract class _WithS5&Object&G = core::Object with self::G<self::ConcreteClass> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS5&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS5 extends self::_WithS5&Object&G {
+  synthetic constructor •() → self::WithS5
+    : super self::_WithS5&Object&G::•()
+    ;
+}
+abstract class _WithS6&Object&G = core::Object with self::G<self::Class<self::ConcreteClass>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS6&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS6 extends self::_WithS6&Object&G {
+  synthetic constructor •() → self::WithS6
+    : super self::_WithS6&Object&G::•()
+    ;
+}
+abstract class _WithS7&Object&G = core::Object with self::G<core::Object> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS7&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS7 extends self::_WithS7&Object&G {
+  synthetic constructor •() → self::WithS7
+    : super self::_WithS7&Object&G::•()
+    ;
+}
+abstract class _WithS8&Object&G = core::Object with self::G<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS8&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS8 extends self::_WithS8&Object&G {
+  synthetic constructor •() → self::WithS8
+    : super self::_WithS8&Object&G::•()
+    ;
+}
+class EnumImplementsT1 extends core::_Enum implements self::Class<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT1> values = #C4;
+  static const field self::EnumImplementsT1 a = #C3;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT1.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT2 extends core::_Enum implements self::Class<dynamic> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT2> values = #C6;
+  static const field self::EnumImplementsT2 a = #C5;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT2.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT3 extends core::_Enum implements self::Class<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT3> values = #C8;
+  static const field self::EnumImplementsT3 a = #C7;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT3.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT4 extends core::_Enum implements self::Class<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT4> values = #C10;
+  static const field self::EnumImplementsT4 a = #C9;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT4.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT5 extends core::_Enum implements self::Class<self::ConcreteClass> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT5> values = #C12;
+  static const field self::EnumImplementsT5 a = #C11;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT5.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT6 extends core::_Enum implements self::Class<self::Class<self::ConcreteClass>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT6> values = #C14;
+  static const field self::EnumImplementsT6 a = #C13;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT6.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT7 extends core::_Enum implements self::Class<core::Object> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT7> values = #C16;
+  static const field self::EnumImplementsT7 a = #C15;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT7.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT8 extends core::_Enum implements self::Class<core::int> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT8> values = #C18;
+  static const field self::EnumImplementsT8 a = #C17;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT8.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS1 extends core::_Enum implements self::G<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS1> values = #C20;
+  static const field self::EnumImplementsS1 a = #C19;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS1.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS2 extends core::_Enum implements self::G<dynamic> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS2> values = #C22;
+  static const field self::EnumImplementsS2 a = #C21;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS2.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS3 extends core::_Enum implements self::G<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS3> values = #C24;
+  static const field self::EnumImplementsS3 a = #C23;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS3.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS4 extends core::_Enum implements self::G<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS4> values = #C26;
+  static const field self::EnumImplementsS4 a = #C25;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS4.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS5 extends core::_Enum implements self::G<self::ConcreteClass> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS5> values = #C28;
+  static const field self::EnumImplementsS5 a = #C27;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS5.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS6 extends core::_Enum implements self::G<self::Class<self::ConcreteClass>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS6> values = #C30;
+  static const field self::EnumImplementsS6 a = #C29;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS6.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS7 extends core::_Enum implements self::G<core::Object> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS7> values = #C32;
+  static const field self::EnumImplementsS7 a = #C31;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS7.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS8 extends core::_Enum implements self::G<core::int> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS8> values = #C34;
+  static const field self::EnumImplementsS8 a = #C33;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS8.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT1&_Enum&F = core::_Enum with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT1&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT1 extends self::_EnumWithT1&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT1> values = #C36;
+  static const field self::EnumWithT1 a = #C35;
+  const constructor •(core::int index, core::String name) → self::EnumWithT1
+    : super self::_EnumWithT1&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT1.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT2&_Enum&F = core::_Enum with self::Class<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT2&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT2 extends self::_EnumWithT2&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT2> values = #C38;
+  static const field self::EnumWithT2 a = #C37;
+  const constructor •(core::int index, core::String name) → self::EnumWithT2
+    : super self::_EnumWithT2&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT2.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT3&_Enum&F = core::_Enum with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT3&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT3 extends self::_EnumWithT3&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT3> values = #C40;
+  static const field self::EnumWithT3 a = #C39;
+  const constructor •(core::int index, core::String name) → self::EnumWithT3
+    : super self::_EnumWithT3&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT3.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT4&_Enum&F = core::_Enum with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT4&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT4 extends self::_EnumWithT4&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT4> values = #C42;
+  static const field self::EnumWithT4 a = #C41;
+  const constructor •(core::int index, core::String name) → self::EnumWithT4
+    : super self::_EnumWithT4&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT5&_Enum&F = core::_Enum with self::Class<self::ConcreteClass> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT5&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT5 extends self::_EnumWithT5&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT5> values = #C44;
+  static const field self::EnumWithT5 a = #C43;
+  const constructor •(core::int index, core::String name) → self::EnumWithT5
+    : super self::_EnumWithT5&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT6&_Enum&F = core::_Enum with self::Class<self::Class<self::ConcreteClass>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT6&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT6 extends self::_EnumWithT6&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT6> values = #C46;
+  static const field self::EnumWithT6 a = #C45;
+  const constructor •(core::int index, core::String name) → self::EnumWithT6
+    : super self::_EnumWithT6&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT7&_Enum&F = core::_Enum with self::Class<core::Object> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT7&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT7 extends self::_EnumWithT7&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT7> values = #C48;
+  static const field self::EnumWithT7 a = #C47;
+  const constructor •(core::int index, core::String name) → self::EnumWithT7
+    : super self::_EnumWithT7&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT7.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT8&_Enum&F = core::_Enum with self::Class<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT8&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT8 extends self::_EnumWithT8&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT8> values = #C50;
+  static const field self::EnumWithT8 a = #C49;
+  const constructor •(core::int index, core::String name) → self::EnumWithT8
+    : super self::_EnumWithT8&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT8.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS1&_Enum&G = core::_Enum with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS1&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS1 extends self::_EnumWithS1&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS1> values = #C52;
+  static const field self::EnumWithS1 a = #C51;
+  const constructor •(core::int index, core::String name) → self::EnumWithS1
+    : super self::_EnumWithS1&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS1.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS2&_Enum&G = core::_Enum with self::G<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS2&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS2 extends self::_EnumWithS2&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS2> values = #C54;
+  static const field self::EnumWithS2 a = #C53;
+  const constructor •(core::int index, core::String name) → self::EnumWithS2
+    : super self::_EnumWithS2&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS2.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS3&_Enum&G = core::_Enum with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS3&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS3 extends self::_EnumWithS3&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS3> values = #C56;
+  static const field self::EnumWithS3 a = #C55;
+  const constructor •(core::int index, core::String name) → self::EnumWithS3
+    : super self::_EnumWithS3&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS3.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS4&_Enum&G = core::_Enum with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS4&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS4 extends self::_EnumWithS4&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS4> values = #C58;
+  static const field self::EnumWithS4 a = #C57;
+  const constructor •(core::int index, core::String name) → self::EnumWithS4
+    : super self::_EnumWithS4&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS5&_Enum&G = core::_Enum with self::G<self::ConcreteClass> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS5&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS5 extends self::_EnumWithS5&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS5> values = #C60;
+  static const field self::EnumWithS5 a = #C59;
+  const constructor •(core::int index, core::String name) → self::EnumWithS5
+    : super self::_EnumWithS5&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS6&_Enum&G = core::_Enum with self::G<self::Class<self::ConcreteClass>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS6&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS6 extends self::_EnumWithS6&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS6> values = #C62;
+  static const field self::EnumWithS6 a = #C61;
+  const constructor •(core::int index, core::String name) → self::EnumWithS6
+    : super self::_EnumWithS6&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS7&_Enum&G = core::_Enum with self::G<core::Object> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS7&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS7 extends self::_EnumWithS7&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS7> values = #C64;
+  static const field self::EnumWithS7 a = #C63;
+  const constructor •(core::int index, core::String name) → self::EnumWithS7
+    : super self::_EnumWithS7&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS7.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS8&_Enum&G = core::_Enum with self::G<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS8&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS8 extends self::_EnumWithS8&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS8> values = #C66;
+  static const field self::EnumWithS8 a = #C65;
+  const constructor •(core::int index, core::String name) → self::EnumWithS8
+    : super self::_EnumWithS8&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS8.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class MixinOnT1 extends self::Class<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT2 extends self::Class<dynamic> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT3 extends self::Class<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT4 extends self::Class<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT5 extends self::Class<self::ConcreteClass> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT6 extends self::Class<self::Class<self::ConcreteClass>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT7 extends self::Class<core::Object> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT8 extends self::Class<core::int> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS1 extends self::G<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS2 extends self::G<dynamic> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS3 extends self::G<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS4 extends self::G<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS5 extends self::G<self::ConcreteClass> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS6 extends self::G<self::Class<self::ConcreteClass>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS7 extends self::G<core::Object> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS8 extends self::G<core::int> /*isMixinDeclaration*/  {
+}
+extension ExtensionOnT1 on self::Class<self::Class<dynamic>> {
+}
+extension ExtensionOnT2 on self::Class<dynamic> {
+}
+extension ExtensionOnT3 on self::Class<self::Class<dynamic>> {
+}
+extension ExtensionOnT4 on self::Class<self::Class<dynamic>> {
+}
+extension ExtensionOnT5 on self::Class<self::ConcreteClass> {
+}
+extension ExtensionOnT6 on self::Class<self::Class<self::ConcreteClass>> {
+}
+extension ExtensionOnT7 on self::Class<core::Object> {
+}
+extension ExtensionOnT8 on self::Class<core::int> {
+}
+extension ExtensionOnS1 on self::G<self::Class<dynamic>> {
+}
+extension ExtensionOnS2 on self::G<dynamic> {
+}
+extension ExtensionOnS3 on self::G<self::Class<dynamic>> {
+}
+extension ExtensionOnS4 on self::G<self::Class<dynamic>> {
+}
+extension ExtensionOnS5 on self::G<self::ConcreteClass> {
+}
+extension ExtensionOnS6 on self::G<self::Class<self::ConcreteClass>> {
+}
+extension ExtensionOnS7 on self::G<core::Object> {
+}
+extension ExtensionOnS8 on self::G<core::int> {
+}
+static method main() → dynamic {}
+static method _#F#new#tearOff<X extends self::Class<self::_#F#new#tearOff::X> = self::Class<dynamic>>() → self::Class<self::_#F#new#tearOff::X>
+  return new self::Class::•<self::_#F#new#tearOff::X>();
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::EnumImplementsT1 {index:#C1, _name:#C2}
+  #C4 = <self::EnumImplementsT1*>[#C3]
+  #C5 = self::EnumImplementsT2 {index:#C1, _name:#C2}
+  #C6 = <self::EnumImplementsT2*>[#C5]
+  #C7 = self::EnumImplementsT3 {index:#C1, _name:#C2}
+  #C8 = <self::EnumImplementsT3*>[#C7]
+  #C9 = self::EnumImplementsT4 {index:#C1, _name:#C2}
+  #C10 = <self::EnumImplementsT4*>[#C9]
+  #C11 = self::EnumImplementsT5 {index:#C1, _name:#C2}
+  #C12 = <self::EnumImplementsT5*>[#C11]
+  #C13 = self::EnumImplementsT6 {index:#C1, _name:#C2}
+  #C14 = <self::EnumImplementsT6*>[#C13]
+  #C15 = self::EnumImplementsT7 {index:#C1, _name:#C2}
+  #C16 = <self::EnumImplementsT7*>[#C15]
+  #C17 = self::EnumImplementsT8 {index:#C1, _name:#C2}
+  #C18 = <self::EnumImplementsT8*>[#C17]
+  #C19 = self::EnumImplementsS1 {index:#C1, _name:#C2}
+  #C20 = <self::EnumImplementsS1*>[#C19]
+  #C21 = self::EnumImplementsS2 {index:#C1, _name:#C2}
+  #C22 = <self::EnumImplementsS2*>[#C21]
+  #C23 = self::EnumImplementsS3 {index:#C1, _name:#C2}
+  #C24 = <self::EnumImplementsS3*>[#C23]
+  #C25 = self::EnumImplementsS4 {index:#C1, _name:#C2}
+  #C26 = <self::EnumImplementsS4*>[#C25]
+  #C27 = self::EnumImplementsS5 {index:#C1, _name:#C2}
+  #C28 = <self::EnumImplementsS5*>[#C27]
+  #C29 = self::EnumImplementsS6 {index:#C1, _name:#C2}
+  #C30 = <self::EnumImplementsS6*>[#C29]
+  #C31 = self::EnumImplementsS7 {index:#C1, _name:#C2}
+  #C32 = <self::EnumImplementsS7*>[#C31]
+  #C33 = self::EnumImplementsS8 {index:#C1, _name:#C2}
+  #C34 = <self::EnumImplementsS8*>[#C33]
+  #C35 = self::EnumWithT1 {index:#C1, _name:#C2}
+  #C36 = <self::EnumWithT1*>[#C35]
+  #C37 = self::EnumWithT2 {index:#C1, _name:#C2}
+  #C38 = <self::EnumWithT2*>[#C37]
+  #C39 = self::EnumWithT3 {index:#C1, _name:#C2}
+  #C40 = <self::EnumWithT3*>[#C39]
+  #C41 = self::EnumWithT4 {index:#C1, _name:#C2}
+  #C42 = <self::EnumWithT4*>[#C41]
+  #C43 = self::EnumWithT5 {index:#C1, _name:#C2}
+  #C44 = <self::EnumWithT5*>[#C43]
+  #C45 = self::EnumWithT6 {index:#C1, _name:#C2}
+  #C46 = <self::EnumWithT6*>[#C45]
+  #C47 = self::EnumWithT7 {index:#C1, _name:#C2}
+  #C48 = <self::EnumWithT7*>[#C47]
+  #C49 = self::EnumWithT8 {index:#C1, _name:#C2}
+  #C50 = <self::EnumWithT8*>[#C49]
+  #C51 = self::EnumWithS1 {index:#C1, _name:#C2}
+  #C52 = <self::EnumWithS1*>[#C51]
+  #C53 = self::EnumWithS2 {index:#C1, _name:#C2}
+  #C54 = <self::EnumWithS2*>[#C53]
+  #C55 = self::EnumWithS3 {index:#C1, _name:#C2}
+  #C56 = <self::EnumWithS3*>[#C55]
+  #C57 = self::EnumWithS4 {index:#C1, _name:#C2}
+  #C58 = <self::EnumWithS4*>[#C57]
+  #C59 = self::EnumWithS5 {index:#C1, _name:#C2}
+  #C60 = <self::EnumWithS5*>[#C59]
+  #C61 = self::EnumWithS6 {index:#C1, _name:#C2}
+  #C62 = <self::EnumWithS6*>[#C61]
+  #C63 = self::EnumWithS7 {index:#C1, _name:#C2}
+  #C64 = <self::EnumWithS7*>[#C63]
+  #C65 = self::EnumWithS8 {index:#C1, _name:#C2}
+  #C66 = <self::EnumWithS8*>[#C65]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///bounds_supertypes.dart:
+- EnumImplementsT1. (from org-dartlang-testcase:///bounds_supertypes.dart:109:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- EnumImplementsT2. (from org-dartlang-testcase:///bounds_supertypes.dart:111:6)
+- EnumImplementsT3. (from org-dartlang-testcase:///bounds_supertypes.dart:113:6)
+- EnumImplementsT4. (from org-dartlang-testcase:///bounds_supertypes.dart:115:6)
+- EnumImplementsT5. (from org-dartlang-testcase:///bounds_supertypes.dart:117:6)
+- EnumImplementsT6. (from org-dartlang-testcase:///bounds_supertypes.dart:119:6)
+- EnumImplementsT7. (from org-dartlang-testcase:///bounds_supertypes.dart:121:6)
+- EnumImplementsT8. (from org-dartlang-testcase:///bounds_supertypes.dart:123:6)
+- EnumImplementsS1. (from org-dartlang-testcase:///bounds_supertypes.dart:125:6)
+- EnumImplementsS2. (from org-dartlang-testcase:///bounds_supertypes.dart:127:6)
+- EnumImplementsS3. (from org-dartlang-testcase:///bounds_supertypes.dart:129:6)
+- EnumImplementsS4. (from org-dartlang-testcase:///bounds_supertypes.dart:131:6)
+- EnumImplementsS5. (from org-dartlang-testcase:///bounds_supertypes.dart:133:6)
+- EnumImplementsS6. (from org-dartlang-testcase:///bounds_supertypes.dart:135:6)
+- EnumImplementsS7. (from org-dartlang-testcase:///bounds_supertypes.dart:137:6)
+- EnumImplementsS8. (from org-dartlang-testcase:///bounds_supertypes.dart:139:6)
+- EnumWithT1. (from org-dartlang-testcase:///bounds_supertypes.dart:141:6)
+- _EnumWithT1&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:141:6)
+- EnumWithT2. (from org-dartlang-testcase:///bounds_supertypes.dart:143:6)
+- _EnumWithT2&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:143:6)
+- EnumWithT3. (from org-dartlang-testcase:///bounds_supertypes.dart:145:6)
+- _EnumWithT3&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:145:6)
+- EnumWithT4. (from org-dartlang-testcase:///bounds_supertypes.dart:147:6)
+- _EnumWithT4&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:147:6)
+- EnumWithT5. (from org-dartlang-testcase:///bounds_supertypes.dart:149:6)
+- _EnumWithT5&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:149:6)
+- EnumWithT6. (from org-dartlang-testcase:///bounds_supertypes.dart:151:6)
+- _EnumWithT6&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:151:6)
+- EnumWithT7. (from org-dartlang-testcase:///bounds_supertypes.dart:153:6)
+- _EnumWithT7&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:153:6)
+- EnumWithT8. (from org-dartlang-testcase:///bounds_supertypes.dart:155:6)
+- _EnumWithT8&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:155:6)
+- EnumWithS1. (from org-dartlang-testcase:///bounds_supertypes.dart:157:6)
+- _EnumWithS1&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:157:6)
+- EnumWithS2. (from org-dartlang-testcase:///bounds_supertypes.dart:159:6)
+- _EnumWithS2&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:159:6)
+- EnumWithS3. (from org-dartlang-testcase:///bounds_supertypes.dart:161:6)
+- _EnumWithS3&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:161:6)
+- EnumWithS4. (from org-dartlang-testcase:///bounds_supertypes.dart:163:6)
+- _EnumWithS4&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:163:6)
+- EnumWithS5. (from org-dartlang-testcase:///bounds_supertypes.dart:165:6)
+- _EnumWithS5&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:165:6)
+- EnumWithS6. (from org-dartlang-testcase:///bounds_supertypes.dart:167:6)
+- _EnumWithS6&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:167:6)
+- EnumWithS7. (from org-dartlang-testcase:///bounds_supertypes.dart:169:6)
+- _EnumWithS7&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:169:6)
+- EnumWithS8. (from org-dartlang-testcase:///bounds_supertypes.dart:171:6)
+- _EnumWithS8&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:171:6)
diff --git a/pkg/front_end/testcases/general/bounds_supertypes.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_supertypes.dart.weak.modular.expect
new file mode 100644
index 0000000..4b8667d
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_supertypes.dart.weak.modular.expect
@@ -0,0 +1,1599 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:13:25: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class ExtendsT1 extends F {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:15:25: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT2 extends F<dynamic> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:17:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT3 extends F<Class> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:19:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT4 extends F<Class<dynamic>> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:25:25: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT7 extends F<Object> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:27:25: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT8 extends F<int> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:29:25: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class ExtendsS1 extends G {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:31:25: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS2 extends G<dynamic> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:33:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS3 extends G<Class> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:35:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS4 extends G<Class<dynamic>> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:41:25: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS7 extends G<Object> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:43:25: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS8 extends G<int> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:45:31: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class ImplementsT1 implements F {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:47:31: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT2 implements F<dynamic> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:49:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT3 implements F<Class> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:51:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT4 implements F<Class<dynamic>> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:57:31: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT7 implements F<Object> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:59:31: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT8 implements F<int> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:61:31: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class ImplementsS1 implements G {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:63:31: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS2 implements G<dynamic> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:65:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS3 implements G<Class> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:67:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS4 implements G<Class<dynamic>> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:73:31: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS7 implements G<Object> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:75:31: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS8 implements G<int> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:77:19: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class WithT1 with F {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:79:19: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT2 with F<dynamic> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:81:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT3 with F<Class> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:83:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT4 with F<Class<dynamic>> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:89:19: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT7 with F<Object> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:91:19: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT8 with F<int> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:109:34: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum EnumImplementsT1 implements F /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:111:34: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT2 implements F<dynamic> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:113:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT3 implements F<Class> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:115:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT4 implements F<Class<dynamic>> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:121:34: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT7 implements F<Object> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:123:34: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT8 implements F<int> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:125:34: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum EnumImplementsS1 implements G /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:127:34: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS2 implements G<dynamic> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:129:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS3 implements G<Class> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:131:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS4 implements G<Class<dynamic>> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:137:34: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS7 implements G<Object> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:139:34: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS8 implements G<int> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:141:22: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum EnumWithT1 with F /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:143:22: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT2 with F<dynamic> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:145:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT3 with F<Class> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:147:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT4 with F<Class<dynamic>> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:153:22: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT7 with F<Object> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:155:22: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT8 with F<int> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:173:20: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// mixin MixinOnT1 on F {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:175:20: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT2 on F<dynamic> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:177:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT3 on F<Class> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:179:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT4 on F<Class<dynamic>> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:185:20: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT7 on F<Object> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:187:20: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT8 on F<int> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:189:20: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// mixin MixinOnS1 on G {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:191:20: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS2 on G<dynamic> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:193:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS3 on G<Class> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:195:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS4 on G<Class<dynamic>> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:201:20: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS7 on G<Object> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:203:20: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS8 on G<int> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:217:28: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ExtensionOnT7 on F<Object> {} // Error
+//                            ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:219:28: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ExtensionOnT8 on F<int> {} // Error
+//                            ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:233:28: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ExtensionOnS7 on G<Object> {} // Error
+//                            ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:235:28: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ExtensionOnS8 on G<int> {} // Error
+//                            ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:93:19: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class WithS1 with G {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:95:19: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS2 with G<dynamic> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:97:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS3 with G<Class> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:99:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS4 with G<Class<dynamic>> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:105:19: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS7 with G<Object> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:107:19: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS8 with G<int> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:157:22: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum EnumWithS1 with G /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:159:22: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS2 with G<dynamic> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:161:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS3 with G<Class> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:163:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS4 with G<Class<dynamic>> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:169:22: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS7 with G<Object> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:171:22: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS8 with G<int> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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>> = self::Class<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 ExtendsT1 extends self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsT1
+    : super self::Class::•()
+    ;
+}
+class ExtendsT2 extends self::Class<dynamic> {
+  synthetic constructor •() → self::ExtendsT2
+    : super self::Class::•()
+    ;
+}
+class ExtendsT3 extends self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsT3
+    : super self::Class::•()
+    ;
+}
+class ExtendsT4 extends self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsT4
+    : super self::Class::•()
+    ;
+}
+class ExtendsT5 extends self::Class<self::ConcreteClass> {
+  synthetic constructor •() → self::ExtendsT5
+    : super self::Class::•()
+    ;
+}
+class ExtendsT6 extends self::Class<self::Class<self::ConcreteClass>> {
+  synthetic constructor •() → self::ExtendsT6
+    : super self::Class::•()
+    ;
+}
+class ExtendsT7 extends self::Class<core::Object> {
+  synthetic constructor •() → self::ExtendsT7
+    : super self::Class::•()
+    ;
+}
+class ExtendsT8 extends self::Class<core::int> {
+  synthetic constructor •() → self::ExtendsT8
+    : super self::Class::•()
+    ;
+}
+class ExtendsS1 extends self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsS1
+    : super self::G::•()
+    ;
+}
+class ExtendsS2 extends self::G<dynamic> {
+  synthetic constructor •() → self::ExtendsS2
+    : super self::G::•()
+    ;
+}
+class ExtendsS3 extends self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsS3
+    : super self::G::•()
+    ;
+}
+class ExtendsS4 extends self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsS4
+    : super self::G::•()
+    ;
+}
+class ExtendsS5 extends self::G<self::ConcreteClass> {
+  synthetic constructor •() → self::ExtendsS5
+    : super self::G::•()
+    ;
+}
+class ExtendsS6 extends self::G<self::Class<self::ConcreteClass>> {
+  synthetic constructor •() → self::ExtendsS6
+    : super self::G::•()
+    ;
+}
+class ExtendsS7 extends self::G<core::Object> {
+  synthetic constructor •() → self::ExtendsS7
+    : super self::G::•()
+    ;
+}
+class ExtendsS8 extends self::G<core::int> {
+  synthetic constructor •() → self::ExtendsS8
+    : super self::G::•()
+    ;
+}
+class ImplementsT1 extends core::Object implements self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsT1
+    : super core::Object::•()
+    ;
+}
+class ImplementsT2 extends core::Object implements self::Class<dynamic> {
+  synthetic constructor •() → self::ImplementsT2
+    : super core::Object::•()
+    ;
+}
+class ImplementsT3 extends core::Object implements self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsT3
+    : super core::Object::•()
+    ;
+}
+class ImplementsT4 extends core::Object implements self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsT4
+    : super core::Object::•()
+    ;
+}
+class ImplementsT5 extends core::Object implements self::Class<self::ConcreteClass> {
+  synthetic constructor •() → self::ImplementsT5
+    : super core::Object::•()
+    ;
+}
+class ImplementsT6 extends core::Object implements self::Class<self::Class<self::ConcreteClass>> {
+  synthetic constructor •() → self::ImplementsT6
+    : super core::Object::•()
+    ;
+}
+class ImplementsT7 extends core::Object implements self::Class<core::Object> {
+  synthetic constructor •() → self::ImplementsT7
+    : super core::Object::•()
+    ;
+}
+class ImplementsT8 extends core::Object implements self::Class<core::int> {
+  synthetic constructor •() → self::ImplementsT8
+    : super core::Object::•()
+    ;
+}
+class ImplementsS1 extends core::Object implements self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsS1
+    : super core::Object::•()
+    ;
+}
+class ImplementsS2 extends core::Object implements self::G<dynamic> {
+  synthetic constructor •() → self::ImplementsS2
+    : super core::Object::•()
+    ;
+}
+class ImplementsS3 extends core::Object implements self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsS3
+    : super core::Object::•()
+    ;
+}
+class ImplementsS4 extends core::Object implements self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsS4
+    : super core::Object::•()
+    ;
+}
+class ImplementsS5 extends core::Object implements self::G<self::ConcreteClass> {
+  synthetic constructor •() → self::ImplementsS5
+    : super core::Object::•()
+    ;
+}
+class ImplementsS6 extends core::Object implements self::G<self::Class<self::ConcreteClass>> {
+  synthetic constructor •() → self::ImplementsS6
+    : super core::Object::•()
+    ;
+}
+class ImplementsS7 extends core::Object implements self::G<core::Object> {
+  synthetic constructor •() → self::ImplementsS7
+    : super core::Object::•()
+    ;
+}
+class ImplementsS8 extends core::Object implements self::G<core::int> {
+  synthetic constructor •() → self::ImplementsS8
+    : super core::Object::•()
+    ;
+}
+abstract class _WithT1&Object&F = core::Object with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT1&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT1 extends self::_WithT1&Object&F {
+  synthetic constructor •() → self::WithT1
+    : super self::_WithT1&Object&F::•()
+    ;
+}
+abstract class _WithT2&Object&F = core::Object with self::Class<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT2&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT2 extends self::_WithT2&Object&F {
+  synthetic constructor •() → self::WithT2
+    : super self::_WithT2&Object&F::•()
+    ;
+}
+abstract class _WithT3&Object&F = core::Object with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT3&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT3 extends self::_WithT3&Object&F {
+  synthetic constructor •() → self::WithT3
+    : super self::_WithT3&Object&F::•()
+    ;
+}
+abstract class _WithT4&Object&F = core::Object with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT4&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT4 extends self::_WithT4&Object&F {
+  synthetic constructor •() → self::WithT4
+    : super self::_WithT4&Object&F::•()
+    ;
+}
+abstract class _WithT5&Object&F = core::Object with self::Class<self::ConcreteClass> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT5&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT5 extends self::_WithT5&Object&F {
+  synthetic constructor •() → self::WithT5
+    : super self::_WithT5&Object&F::•()
+    ;
+}
+abstract class _WithT6&Object&F = core::Object with self::Class<self::Class<self::ConcreteClass>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT6&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT6 extends self::_WithT6&Object&F {
+  synthetic constructor •() → self::WithT6
+    : super self::_WithT6&Object&F::•()
+    ;
+}
+abstract class _WithT7&Object&F = core::Object with self::Class<core::Object> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT7&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT7 extends self::_WithT7&Object&F {
+  synthetic constructor •() → self::WithT7
+    : super self::_WithT7&Object&F::•()
+    ;
+}
+abstract class _WithT8&Object&F = core::Object with self::Class<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT8&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT8 extends self::_WithT8&Object&F {
+  synthetic constructor •() → self::WithT8
+    : super self::_WithT8&Object&F::•()
+    ;
+}
+abstract class _WithS1&Object&G = core::Object with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS1&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS1 extends self::_WithS1&Object&G {
+  synthetic constructor •() → self::WithS1
+    : super self::_WithS1&Object&G::•()
+    ;
+}
+abstract class _WithS2&Object&G = core::Object with self::G<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS2&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS2 extends self::_WithS2&Object&G {
+  synthetic constructor •() → self::WithS2
+    : super self::_WithS2&Object&G::•()
+    ;
+}
+abstract class _WithS3&Object&G = core::Object with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS3&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS3 extends self::_WithS3&Object&G {
+  synthetic constructor •() → self::WithS3
+    : super self::_WithS3&Object&G::•()
+    ;
+}
+abstract class _WithS4&Object&G = core::Object with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS4&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS4 extends self::_WithS4&Object&G {
+  synthetic constructor •() → self::WithS4
+    : super self::_WithS4&Object&G::•()
+    ;
+}
+abstract class _WithS5&Object&G = core::Object with self::G<self::ConcreteClass> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS5&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS5 extends self::_WithS5&Object&G {
+  synthetic constructor •() → self::WithS5
+    : super self::_WithS5&Object&G::•()
+    ;
+}
+abstract class _WithS6&Object&G = core::Object with self::G<self::Class<self::ConcreteClass>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS6&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS6 extends self::_WithS6&Object&G {
+  synthetic constructor •() → self::WithS6
+    : super self::_WithS6&Object&G::•()
+    ;
+}
+abstract class _WithS7&Object&G = core::Object with self::G<core::Object> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS7&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS7 extends self::_WithS7&Object&G {
+  synthetic constructor •() → self::WithS7
+    : super self::_WithS7&Object&G::•()
+    ;
+}
+abstract class _WithS8&Object&G = core::Object with self::G<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS8&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS8 extends self::_WithS8&Object&G {
+  synthetic constructor •() → self::WithS8
+    : super self::_WithS8&Object&G::•()
+    ;
+}
+class EnumImplementsT1 extends core::_Enum implements self::Class<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT1> values = #C4;
+  static const field self::EnumImplementsT1 a = #C3;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT1.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT2 extends core::_Enum implements self::Class<dynamic> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT2> values = #C6;
+  static const field self::EnumImplementsT2 a = #C5;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT2.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT3 extends core::_Enum implements self::Class<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT3> values = #C8;
+  static const field self::EnumImplementsT3 a = #C7;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT3.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT4 extends core::_Enum implements self::Class<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT4> values = #C10;
+  static const field self::EnumImplementsT4 a = #C9;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT4.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT5 extends core::_Enum implements self::Class<self::ConcreteClass> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT5> values = #C12;
+  static const field self::EnumImplementsT5 a = #C11;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT5.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT6 extends core::_Enum implements self::Class<self::Class<self::ConcreteClass>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT6> values = #C14;
+  static const field self::EnumImplementsT6 a = #C13;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT6.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT7 extends core::_Enum implements self::Class<core::Object> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT7> values = #C16;
+  static const field self::EnumImplementsT7 a = #C15;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT7.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT8 extends core::_Enum implements self::Class<core::int> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT8> values = #C18;
+  static const field self::EnumImplementsT8 a = #C17;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT8.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS1 extends core::_Enum implements self::G<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS1> values = #C20;
+  static const field self::EnumImplementsS1 a = #C19;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS1.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS2 extends core::_Enum implements self::G<dynamic> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS2> values = #C22;
+  static const field self::EnumImplementsS2 a = #C21;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS2.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS3 extends core::_Enum implements self::G<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS3> values = #C24;
+  static const field self::EnumImplementsS3 a = #C23;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS3.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS4 extends core::_Enum implements self::G<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS4> values = #C26;
+  static const field self::EnumImplementsS4 a = #C25;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS4.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS5 extends core::_Enum implements self::G<self::ConcreteClass> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS5> values = #C28;
+  static const field self::EnumImplementsS5 a = #C27;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS5.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS6 extends core::_Enum implements self::G<self::Class<self::ConcreteClass>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS6> values = #C30;
+  static const field self::EnumImplementsS6 a = #C29;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS6.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS7 extends core::_Enum implements self::G<core::Object> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS7> values = #C32;
+  static const field self::EnumImplementsS7 a = #C31;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS7.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS8 extends core::_Enum implements self::G<core::int> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS8> values = #C34;
+  static const field self::EnumImplementsS8 a = #C33;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS8.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT1&_Enum&F = core::_Enum with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT1&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT1 extends self::_EnumWithT1&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT1> values = #C36;
+  static const field self::EnumWithT1 a = #C35;
+  const constructor •(core::int index, core::String name) → self::EnumWithT1
+    : super self::_EnumWithT1&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT1.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT2&_Enum&F = core::_Enum with self::Class<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT2&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT2 extends self::_EnumWithT2&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT2> values = #C38;
+  static const field self::EnumWithT2 a = #C37;
+  const constructor •(core::int index, core::String name) → self::EnumWithT2
+    : super self::_EnumWithT2&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT2.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT3&_Enum&F = core::_Enum with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT3&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT3 extends self::_EnumWithT3&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT3> values = #C40;
+  static const field self::EnumWithT3 a = #C39;
+  const constructor •(core::int index, core::String name) → self::EnumWithT3
+    : super self::_EnumWithT3&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT3.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT4&_Enum&F = core::_Enum with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT4&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT4 extends self::_EnumWithT4&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT4> values = #C42;
+  static const field self::EnumWithT4 a = #C41;
+  const constructor •(core::int index, core::String name) → self::EnumWithT4
+    : super self::_EnumWithT4&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT5&_Enum&F = core::_Enum with self::Class<self::ConcreteClass> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT5&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT5 extends self::_EnumWithT5&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT5> values = #C44;
+  static const field self::EnumWithT5 a = #C43;
+  const constructor •(core::int index, core::String name) → self::EnumWithT5
+    : super self::_EnumWithT5&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT6&_Enum&F = core::_Enum with self::Class<self::Class<self::ConcreteClass>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT6&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT6 extends self::_EnumWithT6&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT6> values = #C46;
+  static const field self::EnumWithT6 a = #C45;
+  const constructor •(core::int index, core::String name) → self::EnumWithT6
+    : super self::_EnumWithT6&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT7&_Enum&F = core::_Enum with self::Class<core::Object> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT7&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT7 extends self::_EnumWithT7&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT7> values = #C48;
+  static const field self::EnumWithT7 a = #C47;
+  const constructor •(core::int index, core::String name) → self::EnumWithT7
+    : super self::_EnumWithT7&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT7.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT8&_Enum&F = core::_Enum with self::Class<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT8&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT8 extends self::_EnumWithT8&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT8> values = #C50;
+  static const field self::EnumWithT8 a = #C49;
+  const constructor •(core::int index, core::String name) → self::EnumWithT8
+    : super self::_EnumWithT8&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT8.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS1&_Enum&G = core::_Enum with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS1&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS1 extends self::_EnumWithS1&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS1> values = #C52;
+  static const field self::EnumWithS1 a = #C51;
+  const constructor •(core::int index, core::String name) → self::EnumWithS1
+    : super self::_EnumWithS1&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS1.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS2&_Enum&G = core::_Enum with self::G<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS2&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS2 extends self::_EnumWithS2&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS2> values = #C54;
+  static const field self::EnumWithS2 a = #C53;
+  const constructor •(core::int index, core::String name) → self::EnumWithS2
+    : super self::_EnumWithS2&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS2.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS3&_Enum&G = core::_Enum with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS3&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS3 extends self::_EnumWithS3&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS3> values = #C56;
+  static const field self::EnumWithS3 a = #C55;
+  const constructor •(core::int index, core::String name) → self::EnumWithS3
+    : super self::_EnumWithS3&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS3.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS4&_Enum&G = core::_Enum with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS4&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS4 extends self::_EnumWithS4&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS4> values = #C58;
+  static const field self::EnumWithS4 a = #C57;
+  const constructor •(core::int index, core::String name) → self::EnumWithS4
+    : super self::_EnumWithS4&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS5&_Enum&G = core::_Enum with self::G<self::ConcreteClass> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS5&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS5 extends self::_EnumWithS5&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS5> values = #C60;
+  static const field self::EnumWithS5 a = #C59;
+  const constructor •(core::int index, core::String name) → self::EnumWithS5
+    : super self::_EnumWithS5&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS6&_Enum&G = core::_Enum with self::G<self::Class<self::ConcreteClass>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS6&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS6 extends self::_EnumWithS6&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS6> values = #C62;
+  static const field self::EnumWithS6 a = #C61;
+  const constructor •(core::int index, core::String name) → self::EnumWithS6
+    : super self::_EnumWithS6&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS7&_Enum&G = core::_Enum with self::G<core::Object> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS7&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS7 extends self::_EnumWithS7&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS7> values = #C64;
+  static const field self::EnumWithS7 a = #C63;
+  const constructor •(core::int index, core::String name) → self::EnumWithS7
+    : super self::_EnumWithS7&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS7.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS8&_Enum&G = core::_Enum with self::G<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS8&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS8 extends self::_EnumWithS8&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS8> values = #C66;
+  static const field self::EnumWithS8 a = #C65;
+  const constructor •(core::int index, core::String name) → self::EnumWithS8
+    : super self::_EnumWithS8&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS8.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class MixinOnT1 extends self::Class<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT2 extends self::Class<dynamic> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT3 extends self::Class<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT4 extends self::Class<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT5 extends self::Class<self::ConcreteClass> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT6 extends self::Class<self::Class<self::ConcreteClass>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT7 extends self::Class<core::Object> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT8 extends self::Class<core::int> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS1 extends self::G<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS2 extends self::G<dynamic> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS3 extends self::G<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS4 extends self::G<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS5 extends self::G<self::ConcreteClass> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS6 extends self::G<self::Class<self::ConcreteClass>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS7 extends self::G<core::Object> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS8 extends self::G<core::int> /*isMixinDeclaration*/  {
+}
+extension ExtensionOnT1 on self::Class<self::Class<dynamic>> {
+}
+extension ExtensionOnT2 on self::Class<dynamic> {
+}
+extension ExtensionOnT3 on self::Class<self::Class<dynamic>> {
+}
+extension ExtensionOnT4 on self::Class<self::Class<dynamic>> {
+}
+extension ExtensionOnT5 on self::Class<self::ConcreteClass> {
+}
+extension ExtensionOnT6 on self::Class<self::Class<self::ConcreteClass>> {
+}
+extension ExtensionOnT7 on self::Class<core::Object> {
+}
+extension ExtensionOnT8 on self::Class<core::int> {
+}
+extension ExtensionOnS1 on self::G<self::Class<dynamic>> {
+}
+extension ExtensionOnS2 on self::G<dynamic> {
+}
+extension ExtensionOnS3 on self::G<self::Class<dynamic>> {
+}
+extension ExtensionOnS4 on self::G<self::Class<dynamic>> {
+}
+extension ExtensionOnS5 on self::G<self::ConcreteClass> {
+}
+extension ExtensionOnS6 on self::G<self::Class<self::ConcreteClass>> {
+}
+extension ExtensionOnS7 on self::G<core::Object> {
+}
+extension ExtensionOnS8 on self::G<core::int> {
+}
+static method main() → dynamic {}
+static method _#F#new#tearOff<X extends self::Class<self::_#F#new#tearOff::X> = self::Class<dynamic>>() → self::Class<self::_#F#new#tearOff::X>
+  return new self::Class::•<self::_#F#new#tearOff::X>();
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::EnumImplementsT1 {index:#C1, _name:#C2}
+  #C4 = <self::EnumImplementsT1*>[#C3]
+  #C5 = self::EnumImplementsT2 {index:#C1, _name:#C2}
+  #C6 = <self::EnumImplementsT2*>[#C5]
+  #C7 = self::EnumImplementsT3 {index:#C1, _name:#C2}
+  #C8 = <self::EnumImplementsT3*>[#C7]
+  #C9 = self::EnumImplementsT4 {index:#C1, _name:#C2}
+  #C10 = <self::EnumImplementsT4*>[#C9]
+  #C11 = self::EnumImplementsT5 {index:#C1, _name:#C2}
+  #C12 = <self::EnumImplementsT5*>[#C11]
+  #C13 = self::EnumImplementsT6 {index:#C1, _name:#C2}
+  #C14 = <self::EnumImplementsT6*>[#C13]
+  #C15 = self::EnumImplementsT7 {index:#C1, _name:#C2}
+  #C16 = <self::EnumImplementsT7*>[#C15]
+  #C17 = self::EnumImplementsT8 {index:#C1, _name:#C2}
+  #C18 = <self::EnumImplementsT8*>[#C17]
+  #C19 = self::EnumImplementsS1 {index:#C1, _name:#C2}
+  #C20 = <self::EnumImplementsS1*>[#C19]
+  #C21 = self::EnumImplementsS2 {index:#C1, _name:#C2}
+  #C22 = <self::EnumImplementsS2*>[#C21]
+  #C23 = self::EnumImplementsS3 {index:#C1, _name:#C2}
+  #C24 = <self::EnumImplementsS3*>[#C23]
+  #C25 = self::EnumImplementsS4 {index:#C1, _name:#C2}
+  #C26 = <self::EnumImplementsS4*>[#C25]
+  #C27 = self::EnumImplementsS5 {index:#C1, _name:#C2}
+  #C28 = <self::EnumImplementsS5*>[#C27]
+  #C29 = self::EnumImplementsS6 {index:#C1, _name:#C2}
+  #C30 = <self::EnumImplementsS6*>[#C29]
+  #C31 = self::EnumImplementsS7 {index:#C1, _name:#C2}
+  #C32 = <self::EnumImplementsS7*>[#C31]
+  #C33 = self::EnumImplementsS8 {index:#C1, _name:#C2}
+  #C34 = <self::EnumImplementsS8*>[#C33]
+  #C35 = self::EnumWithT1 {index:#C1, _name:#C2}
+  #C36 = <self::EnumWithT1*>[#C35]
+  #C37 = self::EnumWithT2 {index:#C1, _name:#C2}
+  #C38 = <self::EnumWithT2*>[#C37]
+  #C39 = self::EnumWithT3 {index:#C1, _name:#C2}
+  #C40 = <self::EnumWithT3*>[#C39]
+  #C41 = self::EnumWithT4 {index:#C1, _name:#C2}
+  #C42 = <self::EnumWithT4*>[#C41]
+  #C43 = self::EnumWithT5 {index:#C1, _name:#C2}
+  #C44 = <self::EnumWithT5*>[#C43]
+  #C45 = self::EnumWithT6 {index:#C1, _name:#C2}
+  #C46 = <self::EnumWithT6*>[#C45]
+  #C47 = self::EnumWithT7 {index:#C1, _name:#C2}
+  #C48 = <self::EnumWithT7*>[#C47]
+  #C49 = self::EnumWithT8 {index:#C1, _name:#C2}
+  #C50 = <self::EnumWithT8*>[#C49]
+  #C51 = self::EnumWithS1 {index:#C1, _name:#C2}
+  #C52 = <self::EnumWithS1*>[#C51]
+  #C53 = self::EnumWithS2 {index:#C1, _name:#C2}
+  #C54 = <self::EnumWithS2*>[#C53]
+  #C55 = self::EnumWithS3 {index:#C1, _name:#C2}
+  #C56 = <self::EnumWithS3*>[#C55]
+  #C57 = self::EnumWithS4 {index:#C1, _name:#C2}
+  #C58 = <self::EnumWithS4*>[#C57]
+  #C59 = self::EnumWithS5 {index:#C1, _name:#C2}
+  #C60 = <self::EnumWithS5*>[#C59]
+  #C61 = self::EnumWithS6 {index:#C1, _name:#C2}
+  #C62 = <self::EnumWithS6*>[#C61]
+  #C63 = self::EnumWithS7 {index:#C1, _name:#C2}
+  #C64 = <self::EnumWithS7*>[#C63]
+  #C65 = self::EnumWithS8 {index:#C1, _name:#C2}
+  #C66 = <self::EnumWithS8*>[#C65]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///bounds_supertypes.dart:
+- EnumImplementsT1. (from org-dartlang-testcase:///bounds_supertypes.dart:109:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- EnumImplementsT2. (from org-dartlang-testcase:///bounds_supertypes.dart:111:6)
+- EnumImplementsT3. (from org-dartlang-testcase:///bounds_supertypes.dart:113:6)
+- EnumImplementsT4. (from org-dartlang-testcase:///bounds_supertypes.dart:115:6)
+- EnumImplementsT5. (from org-dartlang-testcase:///bounds_supertypes.dart:117:6)
+- EnumImplementsT6. (from org-dartlang-testcase:///bounds_supertypes.dart:119:6)
+- EnumImplementsT7. (from org-dartlang-testcase:///bounds_supertypes.dart:121:6)
+- EnumImplementsT8. (from org-dartlang-testcase:///bounds_supertypes.dart:123:6)
+- EnumImplementsS1. (from org-dartlang-testcase:///bounds_supertypes.dart:125:6)
+- EnumImplementsS2. (from org-dartlang-testcase:///bounds_supertypes.dart:127:6)
+- EnumImplementsS3. (from org-dartlang-testcase:///bounds_supertypes.dart:129:6)
+- EnumImplementsS4. (from org-dartlang-testcase:///bounds_supertypes.dart:131:6)
+- EnumImplementsS5. (from org-dartlang-testcase:///bounds_supertypes.dart:133:6)
+- EnumImplementsS6. (from org-dartlang-testcase:///bounds_supertypes.dart:135:6)
+- EnumImplementsS7. (from org-dartlang-testcase:///bounds_supertypes.dart:137:6)
+- EnumImplementsS8. (from org-dartlang-testcase:///bounds_supertypes.dart:139:6)
+- EnumWithT1. (from org-dartlang-testcase:///bounds_supertypes.dart:141:6)
+- _EnumWithT1&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:141:6)
+- EnumWithT2. (from org-dartlang-testcase:///bounds_supertypes.dart:143:6)
+- _EnumWithT2&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:143:6)
+- EnumWithT3. (from org-dartlang-testcase:///bounds_supertypes.dart:145:6)
+- _EnumWithT3&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:145:6)
+- EnumWithT4. (from org-dartlang-testcase:///bounds_supertypes.dart:147:6)
+- _EnumWithT4&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:147:6)
+- EnumWithT5. (from org-dartlang-testcase:///bounds_supertypes.dart:149:6)
+- _EnumWithT5&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:149:6)
+- EnumWithT6. (from org-dartlang-testcase:///bounds_supertypes.dart:151:6)
+- _EnumWithT6&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:151:6)
+- EnumWithT7. (from org-dartlang-testcase:///bounds_supertypes.dart:153:6)
+- _EnumWithT7&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:153:6)
+- EnumWithT8. (from org-dartlang-testcase:///bounds_supertypes.dart:155:6)
+- _EnumWithT8&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:155:6)
+- EnumWithS1. (from org-dartlang-testcase:///bounds_supertypes.dart:157:6)
+- _EnumWithS1&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:157:6)
+- EnumWithS2. (from org-dartlang-testcase:///bounds_supertypes.dart:159:6)
+- _EnumWithS2&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:159:6)
+- EnumWithS3. (from org-dartlang-testcase:///bounds_supertypes.dart:161:6)
+- _EnumWithS3&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:161:6)
+- EnumWithS4. (from org-dartlang-testcase:///bounds_supertypes.dart:163:6)
+- _EnumWithS4&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:163:6)
+- EnumWithS5. (from org-dartlang-testcase:///bounds_supertypes.dart:165:6)
+- _EnumWithS5&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:165:6)
+- EnumWithS6. (from org-dartlang-testcase:///bounds_supertypes.dart:167:6)
+- _EnumWithS6&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:167:6)
+- EnumWithS7. (from org-dartlang-testcase:///bounds_supertypes.dart:169:6)
+- _EnumWithS7&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:169:6)
+- EnumWithS8. (from org-dartlang-testcase:///bounds_supertypes.dart:171:6)
+- _EnumWithS8&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:171:6)
diff --git a/pkg/front_end/testcases/general/bounds_supertypes.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_supertypes.dart.weak.outline.expect
new file mode 100644
index 0000000..ed00b2e
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_supertypes.dart.weak.outline.expect
@@ -0,0 +1,1478 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:13:25: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class ExtendsT1 extends F {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:15:25: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT2 extends F<dynamic> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:17:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT3 extends F<Class> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:19:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT4 extends F<Class<dynamic>> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:25:25: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT7 extends F<Object> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:27:25: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT8 extends F<int> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:29:25: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class ExtendsS1 extends G {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:31:25: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS2 extends G<dynamic> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:33:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS3 extends G<Class> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:35:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS4 extends G<Class<dynamic>> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:41:25: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS7 extends G<Object> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:43:25: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS8 extends G<int> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:45:31: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class ImplementsT1 implements F {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:47:31: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT2 implements F<dynamic> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:49:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT3 implements F<Class> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:51:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT4 implements F<Class<dynamic>> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:57:31: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT7 implements F<Object> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:59:31: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT8 implements F<int> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:61:31: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class ImplementsS1 implements G {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:63:31: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS2 implements G<dynamic> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:65:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS3 implements G<Class> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:67:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS4 implements G<Class<dynamic>> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:73:31: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS7 implements G<Object> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:75:31: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS8 implements G<int> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:77:19: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class WithT1 with F {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:79:19: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT2 with F<dynamic> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:81:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT3 with F<Class> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:83:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT4 with F<Class<dynamic>> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:89:19: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT7 with F<Object> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:91:19: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT8 with F<int> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:109:34: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum EnumImplementsT1 implements F /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:111:34: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT2 implements F<dynamic> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:113:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT3 implements F<Class> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:115:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT4 implements F<Class<dynamic>> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:121:34: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT7 implements F<Object> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:123:34: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT8 implements F<int> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:125:34: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum EnumImplementsS1 implements G /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:127:34: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS2 implements G<dynamic> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:129:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS3 implements G<Class> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:131:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS4 implements G<Class<dynamic>> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:137:34: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS7 implements G<Object> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:139:34: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS8 implements G<int> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:141:22: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum EnumWithT1 with F /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:143:22: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT2 with F<dynamic> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:145:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT3 with F<Class> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:147:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT4 with F<Class<dynamic>> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:153:22: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT7 with F<Object> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:155:22: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT8 with F<int> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:173:20: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// mixin MixinOnT1 on F {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:175:20: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT2 on F<dynamic> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:177:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT3 on F<Class> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:179:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT4 on F<Class<dynamic>> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:185:20: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT7 on F<Object> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:187:20: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT8 on F<int> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:189:20: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// mixin MixinOnS1 on G {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:191:20: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS2 on G<dynamic> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:193:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS3 on G<Class> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:195:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS4 on G<Class<dynamic>> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:201:20: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS7 on G<Object> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:203:20: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS8 on G<int> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:217:28: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ExtensionOnT7 on F<Object> {} // Error
+//                            ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:219:28: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ExtensionOnT8 on F<int> {} // Error
+//                            ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:233:28: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ExtensionOnS7 on G<Object> {} // Error
+//                            ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:235:28: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ExtensionOnS8 on G<int> {} // Error
+//                            ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:93:19: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class WithS1 with G {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:95:19: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS2 with G<dynamic> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:97:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS3 with G<Class> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:99:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS4 with G<Class<dynamic>> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:105:19: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS7 with G<Object> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:107:19: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS8 with G<int> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:157:22: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum EnumWithS1 with G /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:159:22: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS2 with G<dynamic> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:161:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS3 with G<Class> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:163:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS4 with G<Class<dynamic>> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:169:22: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS7 with G<Object> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:171:22: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS8 with G<int> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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>> = self::Class<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 ExtendsT1 extends self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsT1
+    ;
+}
+class ExtendsT2 extends self::Class<dynamic> {
+  synthetic constructor •() → self::ExtendsT2
+    ;
+}
+class ExtendsT3 extends self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsT3
+    ;
+}
+class ExtendsT4 extends self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsT4
+    ;
+}
+class ExtendsT5 extends self::Class<self::ConcreteClass> {
+  synthetic constructor •() → self::ExtendsT5
+    ;
+}
+class ExtendsT6 extends self::Class<self::Class<self::ConcreteClass>> {
+  synthetic constructor •() → self::ExtendsT6
+    ;
+}
+class ExtendsT7 extends self::Class<core::Object> {
+  synthetic constructor •() → self::ExtendsT7
+    ;
+}
+class ExtendsT8 extends self::Class<core::int> {
+  synthetic constructor •() → self::ExtendsT8
+    ;
+}
+class ExtendsS1 extends self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsS1
+    ;
+}
+class ExtendsS2 extends self::G<dynamic> {
+  synthetic constructor •() → self::ExtendsS2
+    ;
+}
+class ExtendsS3 extends self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsS3
+    ;
+}
+class ExtendsS4 extends self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsS4
+    ;
+}
+class ExtendsS5 extends self::G<self::ConcreteClass> {
+  synthetic constructor •() → self::ExtendsS5
+    ;
+}
+class ExtendsS6 extends self::G<self::Class<self::ConcreteClass>> {
+  synthetic constructor •() → self::ExtendsS6
+    ;
+}
+class ExtendsS7 extends self::G<core::Object> {
+  synthetic constructor •() → self::ExtendsS7
+    ;
+}
+class ExtendsS8 extends self::G<core::int> {
+  synthetic constructor •() → self::ExtendsS8
+    ;
+}
+class ImplementsT1 extends core::Object implements self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsT1
+    ;
+}
+class ImplementsT2 extends core::Object implements self::Class<dynamic> {
+  synthetic constructor •() → self::ImplementsT2
+    ;
+}
+class ImplementsT3 extends core::Object implements self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsT3
+    ;
+}
+class ImplementsT4 extends core::Object implements self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsT4
+    ;
+}
+class ImplementsT5 extends core::Object implements self::Class<self::ConcreteClass> {
+  synthetic constructor •() → self::ImplementsT5
+    ;
+}
+class ImplementsT6 extends core::Object implements self::Class<self::Class<self::ConcreteClass>> {
+  synthetic constructor •() → self::ImplementsT6
+    ;
+}
+class ImplementsT7 extends core::Object implements self::Class<core::Object> {
+  synthetic constructor •() → self::ImplementsT7
+    ;
+}
+class ImplementsT8 extends core::Object implements self::Class<core::int> {
+  synthetic constructor •() → self::ImplementsT8
+    ;
+}
+class ImplementsS1 extends core::Object implements self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsS1
+    ;
+}
+class ImplementsS2 extends core::Object implements self::G<dynamic> {
+  synthetic constructor •() → self::ImplementsS2
+    ;
+}
+class ImplementsS3 extends core::Object implements self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsS3
+    ;
+}
+class ImplementsS4 extends core::Object implements self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsS4
+    ;
+}
+class ImplementsS5 extends core::Object implements self::G<self::ConcreteClass> {
+  synthetic constructor •() → self::ImplementsS5
+    ;
+}
+class ImplementsS6 extends core::Object implements self::G<self::Class<self::ConcreteClass>> {
+  synthetic constructor •() → self::ImplementsS6
+    ;
+}
+class ImplementsS7 extends core::Object implements self::G<core::Object> {
+  synthetic constructor •() → self::ImplementsS7
+    ;
+}
+class ImplementsS8 extends core::Object implements self::G<core::int> {
+  synthetic constructor •() → self::ImplementsS8
+    ;
+}
+abstract class _WithT1&Object&F = core::Object with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT1&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT1 extends self::_WithT1&Object&F {
+  synthetic constructor •() → self::WithT1
+    ;
+}
+abstract class _WithT2&Object&F = core::Object with self::Class<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT2&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT2 extends self::_WithT2&Object&F {
+  synthetic constructor •() → self::WithT2
+    ;
+}
+abstract class _WithT3&Object&F = core::Object with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT3&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT3 extends self::_WithT3&Object&F {
+  synthetic constructor •() → self::WithT3
+    ;
+}
+abstract class _WithT4&Object&F = core::Object with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT4&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT4 extends self::_WithT4&Object&F {
+  synthetic constructor •() → self::WithT4
+    ;
+}
+abstract class _WithT5&Object&F = core::Object with self::Class<self::ConcreteClass> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT5&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT5 extends self::_WithT5&Object&F {
+  synthetic constructor •() → self::WithT5
+    ;
+}
+abstract class _WithT6&Object&F = core::Object with self::Class<self::Class<self::ConcreteClass>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT6&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT6 extends self::_WithT6&Object&F {
+  synthetic constructor •() → self::WithT6
+    ;
+}
+abstract class _WithT7&Object&F = core::Object with self::Class<core::Object> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT7&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT7 extends self::_WithT7&Object&F {
+  synthetic constructor •() → self::WithT7
+    ;
+}
+abstract class _WithT8&Object&F = core::Object with self::Class<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT8&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT8 extends self::_WithT8&Object&F {
+  synthetic constructor •() → self::WithT8
+    ;
+}
+abstract class _WithS1&Object&G = core::Object with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS1&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS1 extends self::_WithS1&Object&G {
+  synthetic constructor •() → self::WithS1
+    ;
+}
+abstract class _WithS2&Object&G = core::Object with self::G<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS2&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS2 extends self::_WithS2&Object&G {
+  synthetic constructor •() → self::WithS2
+    ;
+}
+abstract class _WithS3&Object&G = core::Object with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS3&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS3 extends self::_WithS3&Object&G {
+  synthetic constructor •() → self::WithS3
+    ;
+}
+abstract class _WithS4&Object&G = core::Object with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS4&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS4 extends self::_WithS4&Object&G {
+  synthetic constructor •() → self::WithS4
+    ;
+}
+abstract class _WithS5&Object&G = core::Object with self::G<self::ConcreteClass> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS5&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS5 extends self::_WithS5&Object&G {
+  synthetic constructor •() → self::WithS5
+    ;
+}
+abstract class _WithS6&Object&G = core::Object with self::G<self::Class<self::ConcreteClass>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS6&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS6 extends self::_WithS6&Object&G {
+  synthetic constructor •() → self::WithS6
+    ;
+}
+abstract class _WithS7&Object&G = core::Object with self::G<core::Object> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS7&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS7 extends self::_WithS7&Object&G {
+  synthetic constructor •() → self::WithS7
+    ;
+}
+abstract class _WithS8&Object&G = core::Object with self::G<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS8&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS8 extends self::_WithS8&Object&G {
+  synthetic constructor •() → self::WithS8
+    ;
+}
+class EnumImplementsT1 extends core::_Enum implements self::Class<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT1> values = const <self::EnumImplementsT1>[self::EnumImplementsT1::a];
+  static const field self::EnumImplementsT1 a = const self::EnumImplementsT1::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT1.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT2 extends core::_Enum implements self::Class<dynamic> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT2> values = const <self::EnumImplementsT2>[self::EnumImplementsT2::a];
+  static const field self::EnumImplementsT2 a = const self::EnumImplementsT2::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT2.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT3 extends core::_Enum implements self::Class<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT3> values = const <self::EnumImplementsT3>[self::EnumImplementsT3::a];
+  static const field self::EnumImplementsT3 a = const self::EnumImplementsT3::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT3.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT4 extends core::_Enum implements self::Class<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT4> values = const <self::EnumImplementsT4>[self::EnumImplementsT4::a];
+  static const field self::EnumImplementsT4 a = const self::EnumImplementsT4::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT4.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT5 extends core::_Enum implements self::Class<self::ConcreteClass> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT5> values = const <self::EnumImplementsT5>[self::EnumImplementsT5::a];
+  static const field self::EnumImplementsT5 a = const self::EnumImplementsT5::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT5.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT6 extends core::_Enum implements self::Class<self::Class<self::ConcreteClass>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT6> values = const <self::EnumImplementsT6>[self::EnumImplementsT6::a];
+  static const field self::EnumImplementsT6 a = const self::EnumImplementsT6::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT6.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT7 extends core::_Enum implements self::Class<core::Object> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT7> values = const <self::EnumImplementsT7>[self::EnumImplementsT7::a];
+  static const field self::EnumImplementsT7 a = const self::EnumImplementsT7::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT7.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT8 extends core::_Enum implements self::Class<core::int> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT8> values = const <self::EnumImplementsT8>[self::EnumImplementsT8::a];
+  static const field self::EnumImplementsT8 a = const self::EnumImplementsT8::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT8.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS1 extends core::_Enum implements self::G<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS1> values = const <self::EnumImplementsS1>[self::EnumImplementsS1::a];
+  static const field self::EnumImplementsS1 a = const self::EnumImplementsS1::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS1.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS2 extends core::_Enum implements self::G<dynamic> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS2> values = const <self::EnumImplementsS2>[self::EnumImplementsS2::a];
+  static const field self::EnumImplementsS2 a = const self::EnumImplementsS2::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS2.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS3 extends core::_Enum implements self::G<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS3> values = const <self::EnumImplementsS3>[self::EnumImplementsS3::a];
+  static const field self::EnumImplementsS3 a = const self::EnumImplementsS3::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS3.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS4 extends core::_Enum implements self::G<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS4> values = const <self::EnumImplementsS4>[self::EnumImplementsS4::a];
+  static const field self::EnumImplementsS4 a = const self::EnumImplementsS4::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS4.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS5 extends core::_Enum implements self::G<self::ConcreteClass> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS5> values = const <self::EnumImplementsS5>[self::EnumImplementsS5::a];
+  static const field self::EnumImplementsS5 a = const self::EnumImplementsS5::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS5.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS6 extends core::_Enum implements self::G<self::Class<self::ConcreteClass>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS6> values = const <self::EnumImplementsS6>[self::EnumImplementsS6::a];
+  static const field self::EnumImplementsS6 a = const self::EnumImplementsS6::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS6.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS7 extends core::_Enum implements self::G<core::Object> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS7> values = const <self::EnumImplementsS7>[self::EnumImplementsS7::a];
+  static const field self::EnumImplementsS7 a = const self::EnumImplementsS7::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS7.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS8 extends core::_Enum implements self::G<core::int> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS8> values = const <self::EnumImplementsS8>[self::EnumImplementsS8::a];
+  static const field self::EnumImplementsS8 a = const self::EnumImplementsS8::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS8.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT1&_Enum&F = core::_Enum with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT1&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT1 extends self::_EnumWithT1&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT1> values = const <self::EnumWithT1>[self::EnumWithT1::a];
+  static const field self::EnumWithT1 a = const self::EnumWithT1::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumWithT1
+    ;
+  method toString() → core::String
+    return "EnumWithT1.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT2&_Enum&F = core::_Enum with self::Class<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT2&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT2 extends self::_EnumWithT2&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT2> values = const <self::EnumWithT2>[self::EnumWithT2::a];
+  static const field self::EnumWithT2 a = const self::EnumWithT2::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumWithT2
+    ;
+  method toString() → core::String
+    return "EnumWithT2.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT3&_Enum&F = core::_Enum with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT3&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT3 extends self::_EnumWithT3&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT3> values = const <self::EnumWithT3>[self::EnumWithT3::a];
+  static const field self::EnumWithT3 a = const self::EnumWithT3::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumWithT3
+    ;
+  method toString() → core::String
+    return "EnumWithT3.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT4&_Enum&F = core::_Enum with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT4&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT4 extends self::_EnumWithT4&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT4> values = const <self::EnumWithT4>[self::EnumWithT4::a];
+  static const field self::EnumWithT4 a = const self::EnumWithT4::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumWithT4
+    ;
+  method toString() → core::String
+    return "EnumWithT4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT5&_Enum&F = core::_Enum with self::Class<self::ConcreteClass> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT5&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT5 extends self::_EnumWithT5&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT5> values = const <self::EnumWithT5>[self::EnumWithT5::a];
+  static const field self::EnumWithT5 a = const self::EnumWithT5::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumWithT5
+    ;
+  method toString() → core::String
+    return "EnumWithT5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT6&_Enum&F = core::_Enum with self::Class<self::Class<self::ConcreteClass>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT6&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT6 extends self::_EnumWithT6&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT6> values = const <self::EnumWithT6>[self::EnumWithT6::a];
+  static const field self::EnumWithT6 a = const self::EnumWithT6::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumWithT6
+    ;
+  method toString() → core::String
+    return "EnumWithT6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT7&_Enum&F = core::_Enum with self::Class<core::Object> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT7&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT7 extends self::_EnumWithT7&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT7> values = const <self::EnumWithT7>[self::EnumWithT7::a];
+  static const field self::EnumWithT7 a = const self::EnumWithT7::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumWithT7
+    ;
+  method toString() → core::String
+    return "EnumWithT7.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT8&_Enum&F = core::_Enum with self::Class<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT8&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT8 extends self::_EnumWithT8&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT8> values = const <self::EnumWithT8>[self::EnumWithT8::a];
+  static const field self::EnumWithT8 a = const self::EnumWithT8::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumWithT8
+    ;
+  method toString() → core::String
+    return "EnumWithT8.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS1&_Enum&G = core::_Enum with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS1&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS1 extends self::_EnumWithS1&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS1> values = const <self::EnumWithS1>[self::EnumWithS1::a];
+  static const field self::EnumWithS1 a = const self::EnumWithS1::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumWithS1
+    ;
+  method toString() → core::String
+    return "EnumWithS1.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS2&_Enum&G = core::_Enum with self::G<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS2&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS2 extends self::_EnumWithS2&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS2> values = const <self::EnumWithS2>[self::EnumWithS2::a];
+  static const field self::EnumWithS2 a = const self::EnumWithS2::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumWithS2
+    ;
+  method toString() → core::String
+    return "EnumWithS2.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS3&_Enum&G = core::_Enum with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS3&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS3 extends self::_EnumWithS3&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS3> values = const <self::EnumWithS3>[self::EnumWithS3::a];
+  static const field self::EnumWithS3 a = const self::EnumWithS3::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumWithS3
+    ;
+  method toString() → core::String
+    return "EnumWithS3.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS4&_Enum&G = core::_Enum with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS4&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS4 extends self::_EnumWithS4&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS4> values = const <self::EnumWithS4>[self::EnumWithS4::a];
+  static const field self::EnumWithS4 a = const self::EnumWithS4::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumWithS4
+    ;
+  method toString() → core::String
+    return "EnumWithS4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS5&_Enum&G = core::_Enum with self::G<self::ConcreteClass> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS5&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS5 extends self::_EnumWithS5&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS5> values = const <self::EnumWithS5>[self::EnumWithS5::a];
+  static const field self::EnumWithS5 a = const self::EnumWithS5::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumWithS5
+    ;
+  method toString() → core::String
+    return "EnumWithS5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS6&_Enum&G = core::_Enum with self::G<self::Class<self::ConcreteClass>> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS6&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS6 extends self::_EnumWithS6&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS6> values = const <self::EnumWithS6>[self::EnumWithS6::a];
+  static const field self::EnumWithS6 a = const self::EnumWithS6::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumWithS6
+    ;
+  method toString() → core::String
+    return "EnumWithS6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS7&_Enum&G = core::_Enum with self::G<core::Object> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS7&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS7 extends self::_EnumWithS7&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS7> values = const <self::EnumWithS7>[self::EnumWithS7::a];
+  static const field self::EnumWithS7 a = const self::EnumWithS7::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumWithS7
+    ;
+  method toString() → core::String
+    return "EnumWithS7.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS8&_Enum&G = core::_Enum with self::G<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS8&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS8 extends self::_EnumWithS8&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS8> values = const <self::EnumWithS8>[self::EnumWithS8::a];
+  static const field self::EnumWithS8 a = const self::EnumWithS8::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::EnumWithS8
+    ;
+  method toString() → core::String
+    return "EnumWithS8.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class MixinOnT1 extends self::Class<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT2 extends self::Class<dynamic> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT3 extends self::Class<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT4 extends self::Class<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT5 extends self::Class<self::ConcreteClass> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT6 extends self::Class<self::Class<self::ConcreteClass>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT7 extends self::Class<core::Object> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT8 extends self::Class<core::int> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS1 extends self::G<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS2 extends self::G<dynamic> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS3 extends self::G<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS4 extends self::G<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS5 extends self::G<self::ConcreteClass> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS6 extends self::G<self::Class<self::ConcreteClass>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS7 extends self::G<core::Object> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS8 extends self::G<core::int> /*isMixinDeclaration*/  {
+}
+extension ExtensionOnT1 on self::Class<self::Class<dynamic>> {
+}
+extension ExtensionOnT2 on self::Class<dynamic> {
+}
+extension ExtensionOnT3 on self::Class<self::Class<dynamic>> {
+}
+extension ExtensionOnT4 on self::Class<self::Class<dynamic>> {
+}
+extension ExtensionOnT5 on self::Class<self::ConcreteClass> {
+}
+extension ExtensionOnT6 on self::Class<self::Class<self::ConcreteClass>> {
+}
+extension ExtensionOnT7 on self::Class<core::Object> {
+}
+extension ExtensionOnT8 on self::Class<core::int> {
+}
+extension ExtensionOnS1 on self::G<self::Class<dynamic>> {
+}
+extension ExtensionOnS2 on self::G<dynamic> {
+}
+extension ExtensionOnS3 on self::G<self::Class<dynamic>> {
+}
+extension ExtensionOnS4 on self::G<self::Class<dynamic>> {
+}
+extension ExtensionOnS5 on self::G<self::ConcreteClass> {
+}
+extension ExtensionOnS6 on self::G<self::Class<self::ConcreteClass>> {
+}
+extension ExtensionOnS7 on self::G<core::Object> {
+}
+extension ExtensionOnS8 on self::G<core::int> {
+}
+static method main() → dynamic
+  ;
+static method _#F#new#tearOff<X extends self::Class<self::_#F#new#tearOff::X> = self::Class<dynamic>>() → self::Class<self::_#F#new#tearOff::X>
+  return new self::Class::•<self::_#F#new#tearOff::X>();
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:109:6 -> ListConstant(const <EnumImplementsT1*>[const EnumImplementsT1{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:109:50 -> InstanceConstant(const EnumImplementsT1{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:111:6 -> ListConstant(const <EnumImplementsT2*>[const EnumImplementsT2{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:111:59 -> InstanceConstant(const EnumImplementsT2{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:113:6 -> ListConstant(const <EnumImplementsT3*>[const EnumImplementsT3{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:113:57 -> InstanceConstant(const EnumImplementsT3{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:115:6 -> ListConstant(const <EnumImplementsT4*>[const EnumImplementsT4{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:115:66 -> InstanceConstant(const EnumImplementsT4{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:117:6 -> ListConstant(const <EnumImplementsT5*>[const EnumImplementsT5{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:117:62 -> InstanceConstant(const EnumImplementsT5{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:119:6 -> ListConstant(const <EnumImplementsT6*>[const EnumImplementsT6{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:119:69 -> InstanceConstant(const EnumImplementsT6{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:121:6 -> ListConstant(const <EnumImplementsT7*>[const EnumImplementsT7{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:121:58 -> InstanceConstant(const EnumImplementsT7{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:123:6 -> ListConstant(const <EnumImplementsT8*>[const EnumImplementsT8{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:123:55 -> InstanceConstant(const EnumImplementsT8{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:125:6 -> ListConstant(const <EnumImplementsS1*>[const EnumImplementsS1{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:125:50 -> InstanceConstant(const EnumImplementsS1{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:127:6 -> ListConstant(const <EnumImplementsS2*>[const EnumImplementsS2{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:127:59 -> InstanceConstant(const EnumImplementsS2{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:129:6 -> ListConstant(const <EnumImplementsS3*>[const EnumImplementsS3{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:129:57 -> InstanceConstant(const EnumImplementsS3{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:131:6 -> ListConstant(const <EnumImplementsS4*>[const EnumImplementsS4{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:131:66 -> InstanceConstant(const EnumImplementsS4{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:133:6 -> ListConstant(const <EnumImplementsS5*>[const EnumImplementsS5{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:133:62 -> InstanceConstant(const EnumImplementsS5{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:135:6 -> ListConstant(const <EnumImplementsS6*>[const EnumImplementsS6{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:135:69 -> InstanceConstant(const EnumImplementsS6{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:137:6 -> ListConstant(const <EnumImplementsS7*>[const EnumImplementsS7{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:137:58 -> InstanceConstant(const EnumImplementsS7{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:139:6 -> ListConstant(const <EnumImplementsS8*>[const EnumImplementsS8{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:139:55 -> InstanceConstant(const EnumImplementsS8{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:141:6 -> ListConstant(const <EnumWithT1*>[const EnumWithT1{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:141:38 -> InstanceConstant(const EnumWithT1{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:143:6 -> ListConstant(const <EnumWithT2*>[const EnumWithT2{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:143:47 -> InstanceConstant(const EnumWithT2{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:145:6 -> ListConstant(const <EnumWithT3*>[const EnumWithT3{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:145:45 -> InstanceConstant(const EnumWithT3{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:147:6 -> ListConstant(const <EnumWithT4*>[const EnumWithT4{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:147:54 -> InstanceConstant(const EnumWithT4{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:149:6 -> ListConstant(const <EnumWithT5*>[const EnumWithT5{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:149:50 -> InstanceConstant(const EnumWithT5{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:151:6 -> ListConstant(const <EnumWithT6*>[const EnumWithT6{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:151:57 -> InstanceConstant(const EnumWithT6{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:153:6 -> ListConstant(const <EnumWithT7*>[const EnumWithT7{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:153:46 -> InstanceConstant(const EnumWithT7{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:155:6 -> ListConstant(const <EnumWithT8*>[const EnumWithT8{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:155:43 -> InstanceConstant(const EnumWithT8{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:157:6 -> ListConstant(const <EnumWithS1*>[const EnumWithS1{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:157:38 -> InstanceConstant(const EnumWithS1{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:159:6 -> ListConstant(const <EnumWithS2*>[const EnumWithS2{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:159:47 -> InstanceConstant(const EnumWithS2{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:161:6 -> ListConstant(const <EnumWithS3*>[const EnumWithS3{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:161:45 -> InstanceConstant(const EnumWithS3{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:163:6 -> ListConstant(const <EnumWithS4*>[const EnumWithS4{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:163:54 -> InstanceConstant(const EnumWithS4{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:165:6 -> ListConstant(const <EnumWithS5*>[const EnumWithS5{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:165:50 -> InstanceConstant(const EnumWithS5{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:167:6 -> ListConstant(const <EnumWithS6*>[const EnumWithS6{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:167:57 -> InstanceConstant(const EnumWithS6{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:169:6 -> ListConstant(const <EnumWithS7*>[const EnumWithS7{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:169:46 -> InstanceConstant(const EnumWithS7{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_supertypes.dart:171:6 -> ListConstant(const <EnumWithS8*>[const EnumWithS8{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_supertypes.dart:171:43 -> InstanceConstant(const EnumWithS8{})
+Extra constant evaluation: evaluated: 225, effectively constant: 64
diff --git a/pkg/front_end/testcases/general/bounds_supertypes.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_supertypes.dart.weak.transformed.expect
new file mode 100644
index 0000000..c15302b
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_supertypes.dart.weak.transformed.expect
@@ -0,0 +1,1599 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:13:25: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class ExtendsT1 extends F {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:15:25: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT2 extends F<dynamic> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:17:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT3 extends F<Class> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:19:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT4 extends F<Class<dynamic>> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:25:25: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT7 extends F<Object> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:27:25: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsT8 extends F<int> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:29:25: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class ExtendsS1 extends G {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:31:25: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS2 extends G<dynamic> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:33:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS3 extends G<Class> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:35:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS4 extends G<Class<dynamic>> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:41:25: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS7 extends G<Object> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:43:25: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ExtendsS8 extends G<int> {} // Error
+//                         ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:45:31: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class ImplementsT1 implements F {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:47:31: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT2 implements F<dynamic> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:49:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT3 implements F<Class> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:51:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT4 implements F<Class<dynamic>> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:57:31: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT7 implements F<Object> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:59:31: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsT8 implements F<int> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:61:31: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class ImplementsS1 implements G {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:63:31: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS2 implements G<dynamic> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:65:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS3 implements G<Class> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:67:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS4 implements G<Class<dynamic>> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:73:31: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS7 implements G<Object> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:75:31: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class ImplementsS8 implements G<int> {} // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:77:19: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class WithT1 with F {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:79:19: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT2 with F<dynamic> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:81:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT3 with F<Class> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:83:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT4 with F<Class<dynamic>> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:89:19: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT7 with F<Object> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:91:19: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithT8 with F<int> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:109:34: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum EnumImplementsT1 implements F /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:111:34: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT2 implements F<dynamic> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:113:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT3 implements F<Class> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:115:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT4 implements F<Class<dynamic>> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:121:34: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT7 implements F<Object> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:123:34: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsT8 implements F<int> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:125:34: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum EnumImplementsS1 implements G /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:127:34: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS2 implements G<dynamic> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:129:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS3 implements G<Class> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:131:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS4 implements G<Class<dynamic>> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:137:34: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS7 implements G<Object> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:139:34: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumImplementsS8 implements G<int> /* Error */ { a }
+//                                  ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:141:22: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum EnumWithT1 with F /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:143:22: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT2 with F<dynamic> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:145:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT3 with F<Class> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:147:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT4 with F<Class<dynamic>> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:153:22: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT7 with F<Object> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:155:22: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithT8 with F<int> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:173:20: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// mixin MixinOnT1 on F {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:175:20: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT2 on F<dynamic> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:177:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT3 on F<Class> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:179:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT4 on F<Class<dynamic>> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:185:20: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT7 on F<Object> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:187:20: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnT8 on F<int> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:189:20: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// mixin MixinOnS1 on G {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:191:20: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS2 on G<dynamic> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:193:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS3 on G<Class> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:195:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS4 on G<Class<dynamic>> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:201:20: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS7 on G<Object> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:203:20: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// mixin MixinOnS8 on G<int> {} // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:217:28: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ExtensionOnT7 on F<Object> {} // Error
+//                            ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:219:28: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ExtensionOnT8 on F<int> {} // Error
+//                            ^
+// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = Class<X>;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_supertypes.dart:233:28: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ExtensionOnS7 on G<Object> {} // Error
+//                            ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:235:28: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ExtensionOnS8 on G<int> {} // Error
+//                            ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:93:19: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// class WithS1 with G {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:95:19: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS2 with G<dynamic> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:97:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS3 with G<Class> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:99:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS4 with G<Class<dynamic>> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:105:19: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS7 with G<Object> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:107:19: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class WithS8 with G<int> {} // Error
+//                   ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:157:22: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// enum EnumWithS1 with G /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:159:22: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS2 with G<dynamic> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:161:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS3 with G<Class> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:163:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS4 with G<Class<dynamic>> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:169:22: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS7 with G<Object> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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_supertypes.dart:171:22: 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_supertypes.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// enum EnumWithS8 with G<int> /* Error */ { a }
+//                      ^
+// pkg/front_end/testcases/general/bounds_supertypes.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>> = self::Class<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 ExtendsT1 extends self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsT1
+    : super self::Class::•()
+    ;
+}
+class ExtendsT2 extends self::Class<dynamic> {
+  synthetic constructor •() → self::ExtendsT2
+    : super self::Class::•()
+    ;
+}
+class ExtendsT3 extends self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsT3
+    : super self::Class::•()
+    ;
+}
+class ExtendsT4 extends self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsT4
+    : super self::Class::•()
+    ;
+}
+class ExtendsT5 extends self::Class<self::ConcreteClass> {
+  synthetic constructor •() → self::ExtendsT5
+    : super self::Class::•()
+    ;
+}
+class ExtendsT6 extends self::Class<self::Class<self::ConcreteClass>> {
+  synthetic constructor •() → self::ExtendsT6
+    : super self::Class::•()
+    ;
+}
+class ExtendsT7 extends self::Class<core::Object> {
+  synthetic constructor •() → self::ExtendsT7
+    : super self::Class::•()
+    ;
+}
+class ExtendsT8 extends self::Class<core::int> {
+  synthetic constructor •() → self::ExtendsT8
+    : super self::Class::•()
+    ;
+}
+class ExtendsS1 extends self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsS1
+    : super self::G::•()
+    ;
+}
+class ExtendsS2 extends self::G<dynamic> {
+  synthetic constructor •() → self::ExtendsS2
+    : super self::G::•()
+    ;
+}
+class ExtendsS3 extends self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsS3
+    : super self::G::•()
+    ;
+}
+class ExtendsS4 extends self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ExtendsS4
+    : super self::G::•()
+    ;
+}
+class ExtendsS5 extends self::G<self::ConcreteClass> {
+  synthetic constructor •() → self::ExtendsS5
+    : super self::G::•()
+    ;
+}
+class ExtendsS6 extends self::G<self::Class<self::ConcreteClass>> {
+  synthetic constructor •() → self::ExtendsS6
+    : super self::G::•()
+    ;
+}
+class ExtendsS7 extends self::G<core::Object> {
+  synthetic constructor •() → self::ExtendsS7
+    : super self::G::•()
+    ;
+}
+class ExtendsS8 extends self::G<core::int> {
+  synthetic constructor •() → self::ExtendsS8
+    : super self::G::•()
+    ;
+}
+class ImplementsT1 extends core::Object implements self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsT1
+    : super core::Object::•()
+    ;
+}
+class ImplementsT2 extends core::Object implements self::Class<dynamic> {
+  synthetic constructor •() → self::ImplementsT2
+    : super core::Object::•()
+    ;
+}
+class ImplementsT3 extends core::Object implements self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsT3
+    : super core::Object::•()
+    ;
+}
+class ImplementsT4 extends core::Object implements self::Class<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsT4
+    : super core::Object::•()
+    ;
+}
+class ImplementsT5 extends core::Object implements self::Class<self::ConcreteClass> {
+  synthetic constructor •() → self::ImplementsT5
+    : super core::Object::•()
+    ;
+}
+class ImplementsT6 extends core::Object implements self::Class<self::Class<self::ConcreteClass>> {
+  synthetic constructor •() → self::ImplementsT6
+    : super core::Object::•()
+    ;
+}
+class ImplementsT7 extends core::Object implements self::Class<core::Object> {
+  synthetic constructor •() → self::ImplementsT7
+    : super core::Object::•()
+    ;
+}
+class ImplementsT8 extends core::Object implements self::Class<core::int> {
+  synthetic constructor •() → self::ImplementsT8
+    : super core::Object::•()
+    ;
+}
+class ImplementsS1 extends core::Object implements self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsS1
+    : super core::Object::•()
+    ;
+}
+class ImplementsS2 extends core::Object implements self::G<dynamic> {
+  synthetic constructor •() → self::ImplementsS2
+    : super core::Object::•()
+    ;
+}
+class ImplementsS3 extends core::Object implements self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsS3
+    : super core::Object::•()
+    ;
+}
+class ImplementsS4 extends core::Object implements self::G<self::Class<dynamic>> {
+  synthetic constructor •() → self::ImplementsS4
+    : super core::Object::•()
+    ;
+}
+class ImplementsS5 extends core::Object implements self::G<self::ConcreteClass> {
+  synthetic constructor •() → self::ImplementsS5
+    : super core::Object::•()
+    ;
+}
+class ImplementsS6 extends core::Object implements self::G<self::Class<self::ConcreteClass>> {
+  synthetic constructor •() → self::ImplementsS6
+    : super core::Object::•()
+    ;
+}
+class ImplementsS7 extends core::Object implements self::G<core::Object> {
+  synthetic constructor •() → self::ImplementsS7
+    : super core::Object::•()
+    ;
+}
+class ImplementsS8 extends core::Object implements self::G<core::int> {
+  synthetic constructor •() → self::ImplementsS8
+    : super core::Object::•()
+    ;
+}
+abstract class _WithT1&Object&F extends core::Object implements self::Class<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT1&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT1 extends self::_WithT1&Object&F {
+  synthetic constructor •() → self::WithT1
+    : super self::_WithT1&Object&F::•()
+    ;
+}
+abstract class _WithT2&Object&F extends core::Object implements self::Class<dynamic> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT2&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT2 extends self::_WithT2&Object&F {
+  synthetic constructor •() → self::WithT2
+    : super self::_WithT2&Object&F::•()
+    ;
+}
+abstract class _WithT3&Object&F extends core::Object implements self::Class<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT3&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT3 extends self::_WithT3&Object&F {
+  synthetic constructor •() → self::WithT3
+    : super self::_WithT3&Object&F::•()
+    ;
+}
+abstract class _WithT4&Object&F extends core::Object implements self::Class<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT4&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT4 extends self::_WithT4&Object&F {
+  synthetic constructor •() → self::WithT4
+    : super self::_WithT4&Object&F::•()
+    ;
+}
+abstract class _WithT5&Object&F extends core::Object implements self::Class<self::ConcreteClass> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT5&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT5 extends self::_WithT5&Object&F {
+  synthetic constructor •() → self::WithT5
+    : super self::_WithT5&Object&F::•()
+    ;
+}
+abstract class _WithT6&Object&F extends core::Object implements self::Class<self::Class<self::ConcreteClass>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT6&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT6 extends self::_WithT6&Object&F {
+  synthetic constructor •() → self::WithT6
+    : super self::_WithT6&Object&F::•()
+    ;
+}
+abstract class _WithT7&Object&F extends core::Object implements self::Class<core::Object> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT7&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT7 extends self::_WithT7&Object&F {
+  synthetic constructor •() → self::WithT7
+    : super self::_WithT7&Object&F::•()
+    ;
+}
+abstract class _WithT8&Object&F extends core::Object implements self::Class<core::int> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithT8&Object&F
+    : super core::Object::•()
+    ;
+}
+class WithT8 extends self::_WithT8&Object&F {
+  synthetic constructor •() → self::WithT8
+    : super self::_WithT8&Object&F::•()
+    ;
+}
+abstract class _WithS1&Object&G extends core::Object implements self::G<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS1&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS1 extends self::_WithS1&Object&G {
+  synthetic constructor •() → self::WithS1
+    : super self::_WithS1&Object&G::•()
+    ;
+}
+abstract class _WithS2&Object&G extends core::Object implements self::G<dynamic> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS2&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS2 extends self::_WithS2&Object&G {
+  synthetic constructor •() → self::WithS2
+    : super self::_WithS2&Object&G::•()
+    ;
+}
+abstract class _WithS3&Object&G extends core::Object implements self::G<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS3&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS3 extends self::_WithS3&Object&G {
+  synthetic constructor •() → self::WithS3
+    : super self::_WithS3&Object&G::•()
+    ;
+}
+abstract class _WithS4&Object&G extends core::Object implements self::G<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS4&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS4 extends self::_WithS4&Object&G {
+  synthetic constructor •() → self::WithS4
+    : super self::_WithS4&Object&G::•()
+    ;
+}
+abstract class _WithS5&Object&G extends core::Object implements self::G<self::ConcreteClass> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS5&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS5 extends self::_WithS5&Object&G {
+  synthetic constructor •() → self::WithS5
+    : super self::_WithS5&Object&G::•()
+    ;
+}
+abstract class _WithS6&Object&G extends core::Object implements self::G<self::Class<self::ConcreteClass>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS6&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS6 extends self::_WithS6&Object&G {
+  synthetic constructor •() → self::WithS6
+    : super self::_WithS6&Object&G::•()
+    ;
+}
+abstract class _WithS7&Object&G extends core::Object implements self::G<core::Object> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS7&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS7 extends self::_WithS7&Object&G {
+  synthetic constructor •() → self::WithS7
+    : super self::_WithS7&Object&G::•()
+    ;
+}
+abstract class _WithS8&Object&G extends core::Object implements self::G<core::int> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_WithS8&Object&G
+    : super core::Object::•()
+    ;
+}
+class WithS8 extends self::_WithS8&Object&G {
+  synthetic constructor •() → self::WithS8
+    : super self::_WithS8&Object&G::•()
+    ;
+}
+class EnumImplementsT1 extends core::_Enum implements self::Class<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT1> values = #C4;
+  static const field self::EnumImplementsT1 a = #C3;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT1.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT2 extends core::_Enum implements self::Class<dynamic> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT2> values = #C6;
+  static const field self::EnumImplementsT2 a = #C5;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT2.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT3 extends core::_Enum implements self::Class<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT3> values = #C8;
+  static const field self::EnumImplementsT3 a = #C7;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT3.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT4 extends core::_Enum implements self::Class<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT4> values = #C10;
+  static const field self::EnumImplementsT4 a = #C9;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT4.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT5 extends core::_Enum implements self::Class<self::ConcreteClass> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT5> values = #C12;
+  static const field self::EnumImplementsT5 a = #C11;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT5.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT6 extends core::_Enum implements self::Class<self::Class<self::ConcreteClass>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT6> values = #C14;
+  static const field self::EnumImplementsT6 a = #C13;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT6.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT7 extends core::_Enum implements self::Class<core::Object> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT7> values = #C16;
+  static const field self::EnumImplementsT7 a = #C15;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT7.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsT8 extends core::_Enum implements self::Class<core::int> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsT8> values = #C18;
+  static const field self::EnumImplementsT8 a = #C17;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsT8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsT8.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS1 extends core::_Enum implements self::G<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS1> values = #C20;
+  static const field self::EnumImplementsS1 a = #C19;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS1.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS2 extends core::_Enum implements self::G<dynamic> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS2> values = #C22;
+  static const field self::EnumImplementsS2 a = #C21;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS2.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS3 extends core::_Enum implements self::G<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS3> values = #C24;
+  static const field self::EnumImplementsS3 a = #C23;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS3.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS4 extends core::_Enum implements self::G<self::Class<dynamic>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS4> values = #C26;
+  static const field self::EnumImplementsS4 a = #C25;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS4.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS5 extends core::_Enum implements self::G<self::ConcreteClass> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS5> values = #C28;
+  static const field self::EnumImplementsS5 a = #C27;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS5.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS6 extends core::_Enum implements self::G<self::Class<self::ConcreteClass>> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS6> values = #C30;
+  static const field self::EnumImplementsS6 a = #C29;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS6.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS7 extends core::_Enum implements self::G<core::Object> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS7> values = #C32;
+  static const field self::EnumImplementsS7 a = #C31;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS7.${this.{core::_Enum::_name}{core::String}}";
+}
+class EnumImplementsS8 extends core::_Enum implements self::G<core::int> /*isEnum*/  {
+  static const field core::List<self::EnumImplementsS8> values = #C34;
+  static const field self::EnumImplementsS8 a = #C33;
+  const constructor •(core::int index, core::String name) → self::EnumImplementsS8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumImplementsS8.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT1&_Enum&F extends core::_Enum implements self::Class<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT1&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT1 extends self::_EnumWithT1&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT1> values = #C36;
+  static const field self::EnumWithT1 a = #C35;
+  const constructor •(core::int index, core::String name) → self::EnumWithT1
+    : super self::_EnumWithT1&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT1.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT2&_Enum&F extends core::_Enum implements self::Class<dynamic> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT2&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT2 extends self::_EnumWithT2&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT2> values = #C38;
+  static const field self::EnumWithT2 a = #C37;
+  const constructor •(core::int index, core::String name) → self::EnumWithT2
+    : super self::_EnumWithT2&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT2.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT3&_Enum&F extends core::_Enum implements self::Class<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT3&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT3 extends self::_EnumWithT3&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT3> values = #C40;
+  static const field self::EnumWithT3 a = #C39;
+  const constructor •(core::int index, core::String name) → self::EnumWithT3
+    : super self::_EnumWithT3&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT3.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT4&_Enum&F extends core::_Enum implements self::Class<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT4&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT4 extends self::_EnumWithT4&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT4> values = #C42;
+  static const field self::EnumWithT4 a = #C41;
+  const constructor •(core::int index, core::String name) → self::EnumWithT4
+    : super self::_EnumWithT4&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT5&_Enum&F extends core::_Enum implements self::Class<self::ConcreteClass> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT5&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT5 extends self::_EnumWithT5&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT5> values = #C44;
+  static const field self::EnumWithT5 a = #C43;
+  const constructor •(core::int index, core::String name) → self::EnumWithT5
+    : super self::_EnumWithT5&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT6&_Enum&F extends core::_Enum implements self::Class<self::Class<self::ConcreteClass>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT6&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT6 extends self::_EnumWithT6&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT6> values = #C46;
+  static const field self::EnumWithT6 a = #C45;
+  const constructor •(core::int index, core::String name) → self::EnumWithT6
+    : super self::_EnumWithT6&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT7&_Enum&F extends core::_Enum implements self::Class<core::Object> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT7&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT7 extends self::_EnumWithT7&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT7> values = #C48;
+  static const field self::EnumWithT7 a = #C47;
+  const constructor •(core::int index, core::String name) → self::EnumWithT7
+    : super self::_EnumWithT7&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT7.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithT8&_Enum&F extends core::_Enum implements self::Class<core::int> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT8&_Enum&F
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithT8 extends self::_EnumWithT8&_Enum&F /*isEnum*/  {
+  static const field core::List<self::EnumWithT8> values = #C50;
+  static const field self::EnumWithT8 a = #C49;
+  const constructor •(core::int index, core::String name) → self::EnumWithT8
+    : super self::_EnumWithT8&_Enum&F::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithT8.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS1&_Enum&G extends core::_Enum implements self::G<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS1&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS1 extends self::_EnumWithS1&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS1> values = #C52;
+  static const field self::EnumWithS1 a = #C51;
+  const constructor •(core::int index, core::String name) → self::EnumWithS1
+    : super self::_EnumWithS1&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS1.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS2&_Enum&G extends core::_Enum implements self::G<dynamic> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS2&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS2 extends self::_EnumWithS2&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS2> values = #C54;
+  static const field self::EnumWithS2 a = #C53;
+  const constructor •(core::int index, core::String name) → self::EnumWithS2
+    : super self::_EnumWithS2&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS2.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS3&_Enum&G extends core::_Enum implements self::G<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS3&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS3 extends self::_EnumWithS3&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS3> values = #C56;
+  static const field self::EnumWithS3 a = #C55;
+  const constructor •(core::int index, core::String name) → self::EnumWithS3
+    : super self::_EnumWithS3&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS3.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS4&_Enum&G extends core::_Enum implements self::G<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS4&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS4 extends self::_EnumWithS4&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS4> values = #C58;
+  static const field self::EnumWithS4 a = #C57;
+  const constructor •(core::int index, core::String name) → self::EnumWithS4
+    : super self::_EnumWithS4&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS5&_Enum&G extends core::_Enum implements self::G<self::ConcreteClass> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS5&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS5 extends self::_EnumWithS5&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS5> values = #C60;
+  static const field self::EnumWithS5 a = #C59;
+  const constructor •(core::int index, core::String name) → self::EnumWithS5
+    : super self::_EnumWithS5&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS6&_Enum&G extends core::_Enum implements self::G<self::Class<self::ConcreteClass>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS6&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS6 extends self::_EnumWithS6&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS6> values = #C62;
+  static const field self::EnumWithS6 a = #C61;
+  const constructor •(core::int index, core::String name) → self::EnumWithS6
+    : super self::_EnumWithS6&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS7&_Enum&G extends core::_Enum implements self::G<core::Object> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS7&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS7 extends self::_EnumWithS7&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS7> values = #C64;
+  static const field self::EnumWithS7 a = #C63;
+  const constructor •(core::int index, core::String name) → self::EnumWithS7
+    : super self::_EnumWithS7&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS7.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _EnumWithS8&_Enum&G extends core::_Enum implements self::G<core::int> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS8&_Enum&G
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class EnumWithS8 extends self::_EnumWithS8&_Enum&G /*isEnum*/  {
+  static const field core::List<self::EnumWithS8> values = #C66;
+  static const field self::EnumWithS8 a = #C65;
+  const constructor •(core::int index, core::String name) → self::EnumWithS8
+    : super self::_EnumWithS8&_Enum&G::•(index, name)
+    ;
+  method toString() → core::String
+    return "EnumWithS8.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class MixinOnT1 extends self::Class<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT2 extends self::Class<dynamic> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT3 extends self::Class<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT4 extends self::Class<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT5 extends self::Class<self::ConcreteClass> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT6 extends self::Class<self::Class<self::ConcreteClass>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT7 extends self::Class<core::Object> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnT8 extends self::Class<core::int> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS1 extends self::G<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS2 extends self::G<dynamic> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS3 extends self::G<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS4 extends self::G<self::Class<dynamic>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS5 extends self::G<self::ConcreteClass> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS6 extends self::G<self::Class<self::ConcreteClass>> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS7 extends self::G<core::Object> /*isMixinDeclaration*/  {
+}
+abstract class MixinOnS8 extends self::G<core::int> /*isMixinDeclaration*/  {
+}
+extension ExtensionOnT1 on self::Class<self::Class<dynamic>> {
+}
+extension ExtensionOnT2 on self::Class<dynamic> {
+}
+extension ExtensionOnT3 on self::Class<self::Class<dynamic>> {
+}
+extension ExtensionOnT4 on self::Class<self::Class<dynamic>> {
+}
+extension ExtensionOnT5 on self::Class<self::ConcreteClass> {
+}
+extension ExtensionOnT6 on self::Class<self::Class<self::ConcreteClass>> {
+}
+extension ExtensionOnT7 on self::Class<core::Object> {
+}
+extension ExtensionOnT8 on self::Class<core::int> {
+}
+extension ExtensionOnS1 on self::G<self::Class<dynamic>> {
+}
+extension ExtensionOnS2 on self::G<dynamic> {
+}
+extension ExtensionOnS3 on self::G<self::Class<dynamic>> {
+}
+extension ExtensionOnS4 on self::G<self::Class<dynamic>> {
+}
+extension ExtensionOnS5 on self::G<self::ConcreteClass> {
+}
+extension ExtensionOnS6 on self::G<self::Class<self::ConcreteClass>> {
+}
+extension ExtensionOnS7 on self::G<core::Object> {
+}
+extension ExtensionOnS8 on self::G<core::int> {
+}
+static method main() → dynamic {}
+static method _#F#new#tearOff<X extends self::Class<self::_#F#new#tearOff::X> = self::Class<dynamic>>() → self::Class<self::_#F#new#tearOff::X>
+  return new self::Class::•<self::_#F#new#tearOff::X>();
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::EnumImplementsT1 {index:#C1, _name:#C2}
+  #C4 = <self::EnumImplementsT1*>[#C3]
+  #C5 = self::EnumImplementsT2 {index:#C1, _name:#C2}
+  #C6 = <self::EnumImplementsT2*>[#C5]
+  #C7 = self::EnumImplementsT3 {index:#C1, _name:#C2}
+  #C8 = <self::EnumImplementsT3*>[#C7]
+  #C9 = self::EnumImplementsT4 {index:#C1, _name:#C2}
+  #C10 = <self::EnumImplementsT4*>[#C9]
+  #C11 = self::EnumImplementsT5 {index:#C1, _name:#C2}
+  #C12 = <self::EnumImplementsT5*>[#C11]
+  #C13 = self::EnumImplementsT6 {index:#C1, _name:#C2}
+  #C14 = <self::EnumImplementsT6*>[#C13]
+  #C15 = self::EnumImplementsT7 {index:#C1, _name:#C2}
+  #C16 = <self::EnumImplementsT7*>[#C15]
+  #C17 = self::EnumImplementsT8 {index:#C1, _name:#C2}
+  #C18 = <self::EnumImplementsT8*>[#C17]
+  #C19 = self::EnumImplementsS1 {index:#C1, _name:#C2}
+  #C20 = <self::EnumImplementsS1*>[#C19]
+  #C21 = self::EnumImplementsS2 {index:#C1, _name:#C2}
+  #C22 = <self::EnumImplementsS2*>[#C21]
+  #C23 = self::EnumImplementsS3 {index:#C1, _name:#C2}
+  #C24 = <self::EnumImplementsS3*>[#C23]
+  #C25 = self::EnumImplementsS4 {index:#C1, _name:#C2}
+  #C26 = <self::EnumImplementsS4*>[#C25]
+  #C27 = self::EnumImplementsS5 {index:#C1, _name:#C2}
+  #C28 = <self::EnumImplementsS5*>[#C27]
+  #C29 = self::EnumImplementsS6 {index:#C1, _name:#C2}
+  #C30 = <self::EnumImplementsS6*>[#C29]
+  #C31 = self::EnumImplementsS7 {index:#C1, _name:#C2}
+  #C32 = <self::EnumImplementsS7*>[#C31]
+  #C33 = self::EnumImplementsS8 {index:#C1, _name:#C2}
+  #C34 = <self::EnumImplementsS8*>[#C33]
+  #C35 = self::EnumWithT1 {index:#C1, _name:#C2}
+  #C36 = <self::EnumWithT1*>[#C35]
+  #C37 = self::EnumWithT2 {index:#C1, _name:#C2}
+  #C38 = <self::EnumWithT2*>[#C37]
+  #C39 = self::EnumWithT3 {index:#C1, _name:#C2}
+  #C40 = <self::EnumWithT3*>[#C39]
+  #C41 = self::EnumWithT4 {index:#C1, _name:#C2}
+  #C42 = <self::EnumWithT4*>[#C41]
+  #C43 = self::EnumWithT5 {index:#C1, _name:#C2}
+  #C44 = <self::EnumWithT5*>[#C43]
+  #C45 = self::EnumWithT6 {index:#C1, _name:#C2}
+  #C46 = <self::EnumWithT6*>[#C45]
+  #C47 = self::EnumWithT7 {index:#C1, _name:#C2}
+  #C48 = <self::EnumWithT7*>[#C47]
+  #C49 = self::EnumWithT8 {index:#C1, _name:#C2}
+  #C50 = <self::EnumWithT8*>[#C49]
+  #C51 = self::EnumWithS1 {index:#C1, _name:#C2}
+  #C52 = <self::EnumWithS1*>[#C51]
+  #C53 = self::EnumWithS2 {index:#C1, _name:#C2}
+  #C54 = <self::EnumWithS2*>[#C53]
+  #C55 = self::EnumWithS3 {index:#C1, _name:#C2}
+  #C56 = <self::EnumWithS3*>[#C55]
+  #C57 = self::EnumWithS4 {index:#C1, _name:#C2}
+  #C58 = <self::EnumWithS4*>[#C57]
+  #C59 = self::EnumWithS5 {index:#C1, _name:#C2}
+  #C60 = <self::EnumWithS5*>[#C59]
+  #C61 = self::EnumWithS6 {index:#C1, _name:#C2}
+  #C62 = <self::EnumWithS6*>[#C61]
+  #C63 = self::EnumWithS7 {index:#C1, _name:#C2}
+  #C64 = <self::EnumWithS7*>[#C63]
+  #C65 = self::EnumWithS8 {index:#C1, _name:#C2}
+  #C66 = <self::EnumWithS8*>[#C65]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///bounds_supertypes.dart:
+- EnumImplementsT1. (from org-dartlang-testcase:///bounds_supertypes.dart:109:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- EnumImplementsT2. (from org-dartlang-testcase:///bounds_supertypes.dart:111:6)
+- EnumImplementsT3. (from org-dartlang-testcase:///bounds_supertypes.dart:113:6)
+- EnumImplementsT4. (from org-dartlang-testcase:///bounds_supertypes.dart:115:6)
+- EnumImplementsT5. (from org-dartlang-testcase:///bounds_supertypes.dart:117:6)
+- EnumImplementsT6. (from org-dartlang-testcase:///bounds_supertypes.dart:119:6)
+- EnumImplementsT7. (from org-dartlang-testcase:///bounds_supertypes.dart:121:6)
+- EnumImplementsT8. (from org-dartlang-testcase:///bounds_supertypes.dart:123:6)
+- EnumImplementsS1. (from org-dartlang-testcase:///bounds_supertypes.dart:125:6)
+- EnumImplementsS2. (from org-dartlang-testcase:///bounds_supertypes.dart:127:6)
+- EnumImplementsS3. (from org-dartlang-testcase:///bounds_supertypes.dart:129:6)
+- EnumImplementsS4. (from org-dartlang-testcase:///bounds_supertypes.dart:131:6)
+- EnumImplementsS5. (from org-dartlang-testcase:///bounds_supertypes.dart:133:6)
+- EnumImplementsS6. (from org-dartlang-testcase:///bounds_supertypes.dart:135:6)
+- EnumImplementsS7. (from org-dartlang-testcase:///bounds_supertypes.dart:137:6)
+- EnumImplementsS8. (from org-dartlang-testcase:///bounds_supertypes.dart:139:6)
+- EnumWithT1. (from org-dartlang-testcase:///bounds_supertypes.dart:141:6)
+- _EnumWithT1&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:141:6)
+- EnumWithT2. (from org-dartlang-testcase:///bounds_supertypes.dart:143:6)
+- _EnumWithT2&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:143:6)
+- EnumWithT3. (from org-dartlang-testcase:///bounds_supertypes.dart:145:6)
+- _EnumWithT3&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:145:6)
+- EnumWithT4. (from org-dartlang-testcase:///bounds_supertypes.dart:147:6)
+- _EnumWithT4&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:147:6)
+- EnumWithT5. (from org-dartlang-testcase:///bounds_supertypes.dart:149:6)
+- _EnumWithT5&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:149:6)
+- EnumWithT6. (from org-dartlang-testcase:///bounds_supertypes.dart:151:6)
+- _EnumWithT6&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:151:6)
+- EnumWithT7. (from org-dartlang-testcase:///bounds_supertypes.dart:153:6)
+- _EnumWithT7&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:153:6)
+- EnumWithT8. (from org-dartlang-testcase:///bounds_supertypes.dart:155:6)
+- _EnumWithT8&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:155:6)
+- EnumWithS1. (from org-dartlang-testcase:///bounds_supertypes.dart:157:6)
+- _EnumWithS1&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:157:6)
+- EnumWithS2. (from org-dartlang-testcase:///bounds_supertypes.dart:159:6)
+- _EnumWithS2&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:159:6)
+- EnumWithS3. (from org-dartlang-testcase:///bounds_supertypes.dart:161:6)
+- _EnumWithS3&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:161:6)
+- EnumWithS4. (from org-dartlang-testcase:///bounds_supertypes.dart:163:6)
+- _EnumWithS4&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:163:6)
+- EnumWithS5. (from org-dartlang-testcase:///bounds_supertypes.dart:165:6)
+- _EnumWithS5&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:165:6)
+- EnumWithS6. (from org-dartlang-testcase:///bounds_supertypes.dart:167:6)
+- _EnumWithS6&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:167:6)
+- EnumWithS7. (from org-dartlang-testcase:///bounds_supertypes.dart:169:6)
+- _EnumWithS7&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:169:6)
+- EnumWithS8. (from org-dartlang-testcase:///bounds_supertypes.dart:171:6)
+- _EnumWithS8&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:171:6)
diff --git a/pkg/front_end/testcases/general/bounds_type_aliases.dart b/pkg/front_end/testcases/general/bounds_type_aliases.dart
new file mode 100644
index 0000000..001c960
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_aliases.dart
@@ -0,0 +1,50 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+typedef T1 = F; // Error
+typedef T2 = F<dynamic>; // Error
+typedef T3 = F<Class>; // Error
+typedef T4 = F<Class<dynamic>>; // Error
+typedef T5 = F<ConcreteClass>; // Ok
+typedef T6 = F<Class<ConcreteClass>>; // Ok
+typedef T7 = F<Object>; // Error
+typedef T8 = F<int>; // Error
+
+typedef S1 = G; // Error
+typedef S2 = G<dynamic>; // Error
+typedef S3 = G<Class>; // Error
+typedef S4 = G<Class<dynamic>>; // Error
+typedef S5 = G<ConcreteClass>; // Ok
+typedef S6 = G<Class<ConcreteClass>>; // Ok
+typedef S7 = G<Object>; // Error
+typedef S8 = G<int>; // Error
+
+typedef Typedef1 = void Function<
+    T1 extends F, // Error
+    T2 extends F<dynamic>, // Ok
+    T3 extends F<Class>, // Ok
+    T4 extends F<Class<dynamic>>, // Ok
+    T5 extends F<ConcreteClass>, // Ok
+    T6 extends F<Class<ConcreteClass>>, // Ok
+    T7 extends F<Object>, // Error
+    T8 extends F<int>, // Error
+    S1 extends G, // Error
+    S2 extends G<dynamic>, // Ok
+    S3 extends G<Class>, // Ok
+    S4 extends G<Class<dynamic>>, // Ok
+    S5 extends G<ConcreteClass>, // Ok
+    S6 extends G<Class<ConcreteClass>>, // Ok
+    S7 extends G<Object>, // Error
+    S8 extends G<int> // Error
+    >();
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_type_aliases.dart.textual_outline.expect b/pkg/front_end/testcases/general/bounds_type_aliases.dart.textual_outline.expect
new file mode 100644
index 0000000..1de49ae
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_aliases.dart.textual_outline.expect
@@ -0,0 +1,42 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+typedef T1 = F;
+typedef T2 = F<dynamic>;
+typedef T3 = F<Class>;
+typedef T4 = F<Class<dynamic>>;
+typedef T5 = F<ConcreteClass>;
+typedef T6 = F<Class<ConcreteClass>>;
+typedef T7 = F<Object>;
+typedef T8 = F<int>;
+typedef S1 = G;
+typedef S2 = G<dynamic>;
+typedef S3 = G<Class>;
+typedef S4 = G<Class<dynamic>>;
+typedef S5 = G<ConcreteClass>;
+typedef S6 = G<Class<ConcreteClass>>;
+typedef S7 = G<Object>;
+typedef S8 = G<int>;
+typedef Typedef1 = void Function<
+    T1 extends F,
+    T2 extends F<dynamic>,
+    T3 extends F<Class>,
+    T4 extends F<Class<dynamic>>,
+    T5 extends F<ConcreteClass>,
+    T6 extends F<Class<ConcreteClass>>,
+    T7 extends F<Object>,
+    T8 extends F<int>,
+    S1 extends G,
+    S2 extends G<dynamic>,
+    S3 extends G<Class>,
+    S4 extends G<Class<dynamic>>,
+    S5 extends G<ConcreteClass>,
+    S6 extends G<Class<ConcreteClass>>,
+    S7 extends G<Object>,
+    S8 extends G<int>>();
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_type_aliases.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bounds_type_aliases.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..c61e199
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_aliases.dart.textual_outline_modelled.expect
@@ -0,0 +1,41 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+class G<X extends Class<X>> {}
+
+main() {}
+typedef F<X extends Class<X>> = X;
+typedef S1 = G;
+typedef S2 = G<dynamic>;
+typedef S3 = G<Class>;
+typedef S4 = G<Class<dynamic>>;
+typedef S5 = G<ConcreteClass>;
+typedef S6 = G<Class<ConcreteClass>>;
+typedef S7 = G<Object>;
+typedef S8 = G<int>;
+typedef T1 = F;
+typedef T2 = F<dynamic>;
+typedef T3 = F<Class>;
+typedef T4 = F<Class<dynamic>>;
+typedef T5 = F<ConcreteClass>;
+typedef T6 = F<Class<ConcreteClass>>;
+typedef T7 = F<Object>;
+typedef T8 = F<int>;
+typedef Typedef1 = void Function<
+    T1 extends F,
+    T2 extends F<dynamic>,
+    T3 extends F<Class>,
+    T4 extends F<Class<dynamic>>,
+    T5 extends F<ConcreteClass>,
+    T6 extends F<Class<ConcreteClass>>,
+    T7 extends F<Object>,
+    T8 extends F<int>,
+    S1 extends G,
+    S2 extends G<dynamic>,
+    S3 extends G<Class>,
+    S4 extends G<Class<dynamic>>,
+    S5 extends G<ConcreteClass>,
+    S6 extends G<Class<ConcreteClass>>,
+    S7 extends G<Object>,
+    S8 extends G<int>>();
diff --git a/pkg/front_end/testcases/general/bounds_type_aliases.dart.weak.expect b/pkg/front_end/testcases/general/bounds_type_aliases.dart.weak.expect
new file mode 100644
index 0000000..bc261f0
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_aliases.dart.weak.expect
@@ -0,0 +1,205 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:32:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:40:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:38:16: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:39:16: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:46:16: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:47:16: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:13:14: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// typedef T1 = F; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:14:14: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T2 = F<dynamic>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:15:14: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T3 = F<Class>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:16:14: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T4 = F<Class<dynamic>>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:19:14: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T7 = F<Object>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:20:14: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T8 = F<int>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:22:14: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// typedef S1 = G; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:23:14: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S2 = G<dynamic>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:24:14: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S3 = G<Class>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:25:14: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S4 = G<Class<dynamic>>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:28: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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S7 = G<Object>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:29: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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S8 = G<int>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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;
+typedef T1 = self::Class<dynamic>;
+typedef T2 = dynamic;
+typedef T3 = self::Class<dynamic>;
+typedef T4 = self::Class<dynamic>;
+typedef T5 = self::ConcreteClass;
+typedef T6 = self::Class<self::ConcreteClass>;
+typedef T7 = core::Object;
+typedef T8 = core::int;
+typedef S1 = self::G<self::Class<dynamic>>;
+typedef S2 = self::G<dynamic>;
+typedef S3 = self::G<self::Class<dynamic>>;
+typedef S4 = self::G<self::Class<dynamic>>;
+typedef S5 = self::G<self::ConcreteClass>;
+typedef S6 = self::G<self::Class<self::ConcreteClass>>;
+typedef S7 = self::G<core::Object>;
+typedef S8 = self::G<core::int>;
+typedef Typedef1 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void;
+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 main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_type_aliases.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_type_aliases.dart.weak.modular.expect
new file mode 100644
index 0000000..bc261f0
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_aliases.dart.weak.modular.expect
@@ -0,0 +1,205 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:32:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:40:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:38:16: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:39:16: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:46:16: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:47:16: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:13:14: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// typedef T1 = F; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:14:14: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T2 = F<dynamic>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:15:14: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T3 = F<Class>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:16:14: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T4 = F<Class<dynamic>>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:19:14: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T7 = F<Object>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:20:14: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T8 = F<int>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:22:14: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// typedef S1 = G; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:23:14: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S2 = G<dynamic>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:24:14: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S3 = G<Class>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:25:14: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S4 = G<Class<dynamic>>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:28: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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S7 = G<Object>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:29: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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S8 = G<int>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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;
+typedef T1 = self::Class<dynamic>;
+typedef T2 = dynamic;
+typedef T3 = self::Class<dynamic>;
+typedef T4 = self::Class<dynamic>;
+typedef T5 = self::ConcreteClass;
+typedef T6 = self::Class<self::ConcreteClass>;
+typedef T7 = core::Object;
+typedef T8 = core::int;
+typedef S1 = self::G<self::Class<dynamic>>;
+typedef S2 = self::G<dynamic>;
+typedef S3 = self::G<self::Class<dynamic>>;
+typedef S4 = self::G<self::Class<dynamic>>;
+typedef S5 = self::G<self::ConcreteClass>;
+typedef S6 = self::G<self::Class<self::ConcreteClass>>;
+typedef S7 = self::G<core::Object>;
+typedef S8 = self::G<core::int>;
+typedef Typedef1 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void;
+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 main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_type_aliases.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_type_aliases.dart.weak.outline.expect
new file mode 100644
index 0000000..0326770
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_aliases.dart.weak.outline.expect
@@ -0,0 +1,203 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:32:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:40:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:38:16: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:39:16: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:46:16: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:47:16: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:13:14: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// typedef T1 = F; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:14:14: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T2 = F<dynamic>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:15:14: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T3 = F<Class>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:16:14: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T4 = F<Class<dynamic>>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:19:14: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T7 = F<Object>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:20:14: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T8 = F<int>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:22:14: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// typedef S1 = G; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:23:14: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S2 = G<dynamic>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:24:14: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S3 = G<Class>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:25:14: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S4 = G<Class<dynamic>>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:28: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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S7 = G<Object>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:29: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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S8 = G<int>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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;
+typedef T1 = self::Class<dynamic>;
+typedef T2 = dynamic;
+typedef T3 = self::Class<dynamic>;
+typedef T4 = self::Class<dynamic>;
+typedef T5 = self::ConcreteClass;
+typedef T6 = self::Class<self::ConcreteClass>;
+typedef T7 = core::Object;
+typedef T8 = core::int;
+typedef S1 = self::G<self::Class<dynamic>>;
+typedef S2 = self::G<dynamic>;
+typedef S3 = self::G<self::Class<dynamic>>;
+typedef S4 = self::G<self::Class<dynamic>>;
+typedef S5 = self::G<self::ConcreteClass>;
+typedef S6 = self::G<self::Class<self::ConcreteClass>>;
+typedef S7 = self::G<core::Object>;
+typedef S8 = self::G<core::int>;
+typedef Typedef1 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void;
+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>
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/bounds_type_aliases.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_type_aliases.dart.weak.transformed.expect
new file mode 100644
index 0000000..bc261f0
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_aliases.dart.weak.transformed.expect
@@ -0,0 +1,205 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:32:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:40:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_aliases.dart:38:16: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:39:16: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:46:16: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:47:16: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:13:14: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// typedef T1 = F; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:14:14: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T2 = F<dynamic>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:15:14: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T3 = F<Class>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:16:14: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T4 = F<Class<dynamic>>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:19:14: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T7 = F<Object>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:20:14: 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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef T8 = F<int>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:22:14: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// typedef S1 = G; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:23:14: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S2 = G<dynamic>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:24:14: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S3 = G<Class>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:25:14: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S4 = G<Class<dynamic>>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:28: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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S7 = G<Object>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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_type_aliases.dart:29: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_type_aliases.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef S8 = G<int>; // Error
+//              ^
+// pkg/front_end/testcases/general/bounds_type_aliases.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;
+typedef T1 = self::Class<dynamic>;
+typedef T2 = dynamic;
+typedef T3 = self::Class<dynamic>;
+typedef T4 = self::Class<dynamic>;
+typedef T5 = self::ConcreteClass;
+typedef T6 = self::Class<self::ConcreteClass>;
+typedef T7 = core::Object;
+typedef T8 = core::int;
+typedef S1 = self::G<self::Class<dynamic>>;
+typedef S2 = self::G<dynamic>;
+typedef S3 = self::G<self::Class<dynamic>>;
+typedef S4 = self::G<self::Class<dynamic>>;
+typedef S5 = self::G<self::ConcreteClass>;
+typedef S6 = self::G<self::Class<self::ConcreteClass>>;
+typedef S7 = self::G<core::Object>;
+typedef S8 = self::G<core::int>;
+typedef Typedef1 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void;
+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 main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_type_arguments.dart b/pkg/front_end/testcases/general/bounds_type_arguments.dart
new file mode 100644
index 0000000..47fd340
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_arguments.dart
@@ -0,0 +1,204 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+typedef H<X> = Class2;
+
+void staticMethod<T1, T2, T3, T4, T5, T6, T7, T8, S1, S2, S3, S4, S5, S6, S7,
+    S8>() {}
+
+class Class1<T1, T2, T3, T4, T5, T6, T7, T8, S1, S2, S3, S4, S5, S6, S7, S8> {
+  Class1();
+
+  factory Class1.fact() => new Class1();
+
+  factory Class1.redirect() = Class1;
+}
+
+class Class2 {
+  void instanceMethod<T1, T2, T3, T4, T5, T6, T7, T8, S1, S2, S3, S4, S5, S6,
+      S7, S8>() {}
+}
+
+test() {
+  staticMethod<
+      F, // Ok
+      F<dynamic>, // Ok
+      F<Class>, // Ok
+      F<Class<dynamic>>, // Ok
+      F<ConcreteClass>, // Ok
+      F<Class<ConcreteClass>>, // Ok
+      F<Object>, // Error
+      F<int>, // Error
+      G, // Ok
+      G<dynamic>, // Ok
+      G<Class>, // Ok
+      G<Class<dynamic>>, // Ok
+      G<ConcreteClass>, // Ok
+      G<Class<ConcreteClass>>, // Ok
+      G<Object>, // Error
+      G<int> // Error
+      >();
+
+  var tearOff = staticMethod;
+  tearOff<
+      F, // Ok
+      F<dynamic>, // Ok
+      F<Class>, // Ok
+      F<Class<dynamic>>, // Ok
+      F<ConcreteClass>, // Ok
+      F<Class<ConcreteClass>>, // Ok
+      F<Object>, // Error
+      F<int>, // Error
+      G, // Ok
+      G<dynamic>, // Ok
+      G<Class>, // Ok
+      G<Class<dynamic>>, // Ok
+      G<ConcreteClass>, // Ok
+      G<Class<ConcreteClass>>, // Ok
+      G<Object>, // Error
+      G<int> // Error
+      >();
+
+  tearOff<
+      F, // Ok
+      F<dynamic>, // Ok
+      F<Class>, // Ok
+      F<Class<dynamic>>, // Ok
+      F<ConcreteClass>, // Ok
+      F<Class<ConcreteClass>>, // Ok
+      F<Object>, // Error
+      F<int>, // Error
+      G, // Ok
+      G<dynamic>, // Ok
+      G<Class>, // Ok
+      G<Class<dynamic>>, // Ok
+      G<ConcreteClass>, // Ok
+      G<Class<ConcreteClass>>, // Ok
+      G<Object>, // Error
+      G<int> // Error
+      >;
+
+  new Class1<
+      F, // Ok
+      F<dynamic>, // Ok
+      F<Class>, // Ok
+      F<Class<dynamic>>, // Ok
+      F<ConcreteClass>, // Ok
+      F<Class<ConcreteClass>>, // Ok
+      F<Object>, // Error
+      F<int>, // Error
+      G, // Ok
+      G<dynamic>, // Ok
+      G<Class>, // Ok
+      G<Class<dynamic>>, // Ok
+      G<ConcreteClass>, // Ok
+      G<Class<ConcreteClass>>, // Ok
+      G<Object>, // Error
+      G<int> // Error
+      >();
+
+  new Class1<
+      F, // Ok
+      F<dynamic>, // Ok
+      F<Class>, // Ok
+      F<Class<dynamic>>, // Ok
+      F<ConcreteClass>, // Ok
+      F<Class<ConcreteClass>>, // Ok
+      F<Object>, // Error
+      F<int>, // Error
+      G, // Ok
+      G<dynamic>, // Ok
+      G<Class>, // Ok
+      G<Class<dynamic>>, // Ok
+      G<ConcreteClass>, // Ok
+      G<Class<ConcreteClass>>, // Ok
+      G<Object>, // Error
+      G<int> // Error
+      >.fact();
+
+  new Class1<
+      F, // Ok
+      F<dynamic>, // Ok
+      F<Class>, // Ok
+      F<Class<dynamic>>, // Ok
+      F<ConcreteClass>, // Ok
+      F<Class<ConcreteClass>>, // Ok
+      F<Object>, // Error
+      F<int>, // Error
+      G, // Ok
+      G<dynamic>, // Ok
+      G<Class>, // Ok
+      G<Class<dynamic>>, // Ok
+      G<ConcreteClass>, // Ok
+      G<Class<ConcreteClass>>, // Ok
+      G<Object>, // Error
+      G<int> // Error
+      >.redirect();
+
+  new Class2().instanceMethod<
+      F, // Ok
+      F<dynamic>, // Ok
+      F<Class>, // Ok
+      F<Class<dynamic>>, // Ok
+      F<ConcreteClass>, // Ok
+      F<Class<ConcreteClass>>, // Ok
+      F<Object>, // Error
+      F<int>, // Error
+      G, // Ok
+      G<dynamic>, // Ok
+      G<Class>, // Ok
+      G<Class<dynamic>>, // Ok
+      G<ConcreteClass>, // Ok
+      G<Class<ConcreteClass>>, // Ok
+      G<Object>, // Error
+      G<int> // Error
+      >();
+
+  dynamic d = staticMethod;
+  d<
+      F, // Ok
+      F<dynamic>, // Ok
+      F<Class>, // Ok
+      F<Class<dynamic>>, // Ok
+      F<ConcreteClass>, // Ok
+      F<Class<ConcreteClass>>, // Ok
+      F<Object>, // Error
+      F<int>, // Error
+      G, // Ok
+      G<dynamic>, // Ok
+      G<Class>, // Ok
+      G<Class<dynamic>>, // Ok
+      G<ConcreteClass>, // Ok
+      G<Class<ConcreteClass>>, // Ok
+      G<Object>, // Error
+      G<int> // Error
+      >();
+
+  new H<F>(); // Ok
+  new H<F<dynamic>>(); // Ok
+  new H<F<Class>>(); // Ok
+  new H<F<Class<dynamic>>>(); // Ok
+  new H<F<ConcreteClass>>(); // Ok
+  new H<F<Class<ConcreteClass>>>(); // Ok
+  new H<F<Object>>(); // Error
+  new H<F<int>>(); // Error
+  new H<G>(); // Ok
+  new H<G<dynamic>>(); // Ok
+  new H<G<Class>>(); // Ok
+  new H<G<Class<dynamic>>>(); // Ok
+  new H<G<ConcreteClass>>(); // Ok
+  new H<G<Class<ConcreteClass>>>(); // Ok
+  new H<G<Object>>(); // Error
+  new H<G<int>>(); // Error
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_type_arguments.dart.textual_outline.expect b/pkg/front_end/testcases/general/bounds_type_arguments.dart.textual_outline.expect
new file mode 100644
index 0000000..62264e3
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_arguments.dart.textual_outline.expect
@@ -0,0 +1,25 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+typedef H<X> = Class2;
+void staticMethod<T1, T2, T3, T4, T5, T6, T7, T8, S1, S2, S3, S4, S5, S6, S7,
+    S8>() {}
+
+class Class1<T1, T2, T3, T4, T5, T6, T7, T8, S1, S2, S3, S4, S5, S6, S7, S8> {
+  Class1();
+  factory Class1.fact() => new Class1();
+  factory Class1.redirect() = Class1;
+}
+
+class Class2 {
+  void instanceMethod<T1, T2, T3, T4, T5, T6, T7, T8, S1, S2, S3, S4, S5, S6,
+      S7, S8>() {}
+}
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_type_arguments.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bounds_type_arguments.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..31c481b
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_arguments.dart.textual_outline_modelled.expect
@@ -0,0 +1,23 @@
+class Class<T> {}
+
+class Class1<T1, T2, T3, T4, T5, T6, T7, T8, S1, S2, S3, S4, S5, S6, S7, S8> {
+  Class1();
+  factory Class1.fact() => new Class1();
+  factory Class1.redirect() = Class1;
+}
+
+class Class2 {
+  void instanceMethod<T1, T2, T3, T4, T5, T6, T7, T8, S1, S2, S3, S4, S5, S6,
+      S7, S8>() {}
+}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+class G<X extends Class<X>> {}
+
+main() {}
+test() {}
+typedef F<X extends Class<X>> = X;
+typedef H<X> = Class2;
+void staticMethod<T1, T2, T3, T4, T5, T6, T7, T8, S1, S2, S3, S4, S5, S6, S7,
+    S8>() {}
diff --git a/pkg/front_end/testcases/general/bounds_type_arguments.dart.weak.expect b/pkg/front_end/testcases/general/bounds_type_arguments.dart.weak.expect
new file mode 100644
index 0000000..4d4b0ad
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_arguments.dart.weak.expect
@@ -0,0 +1,419 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_type_arguments.dart:39:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:40:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:47:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:48:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:59:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:60:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:67:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:68:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:78:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:79:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:86:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:87:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:97:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:98:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:105:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:106:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:116:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:117:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:124:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:125:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:135:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:136:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:143:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:144:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:154:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:155:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:162:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:163:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:174:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:175:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:182:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:183:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:192:9: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new H<F<Object>>(); // Error
+//         ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:193:9: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new H<F<int>>(); // Error
+//         ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:200:9: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new H<G<Object>>(); // Error
+//         ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:201:9: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new H<G<int>>(); // Error
+//         ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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;
+typedef H<unrelated X extends core::Object? = dynamic> = self::Class2;
+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<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::Class1<self::Class1::T1%, self::Class1::T2%, self::Class1::T3%, self::Class1::T4%, self::Class1::T5%, self::Class1::T6%, self::Class1::T7%, self::Class1::T8%, self::Class1::S1%, self::Class1::S2%, self::Class1::S3%, self::Class1::S4%, self::Class1::S5%, self::Class1::S6%, self::Class1::S7%, self::Class1::S8%>
+    : super core::Object::•()
+    ;
+  static factory fact<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → self::Class1<self::Class1::fact::T1%, self::Class1::fact::T2%, self::Class1::fact::T3%, self::Class1::fact::T4%, self::Class1::fact::T5%, self::Class1::fact::T6%, self::Class1::fact::T7%, self::Class1::fact::T8%, self::Class1::fact::S1%, self::Class1::fact::S2%, self::Class1::fact::S3%, self::Class1::fact::S4%, self::Class1::fact::S5%, self::Class1::fact::S6%, self::Class1::fact::S7%, self::Class1::fact::S8%>
+    return new self::Class1::•<self::Class1::fact::T1%, self::Class1::fact::T2%, self::Class1::fact::T3%, self::Class1::fact::T4%, self::Class1::fact::T5%, self::Class1::fact::T6%, self::Class1::fact::T7%, self::Class1::fact::T8%, self::Class1::fact::S1%, self::Class1::fact::S2%, self::Class1::fact::S3%, self::Class1::fact::S4%, self::Class1::fact::S5%, self::Class1::fact::S6%, self::Class1::fact::S7%, self::Class1::fact::S8%>();
+  static factory redirect<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → self::Class1<self::Class1::redirect::T1%, self::Class1::redirect::T2%, self::Class1::redirect::T3%, self::Class1::redirect::T4%, self::Class1::redirect::T5%, self::Class1::redirect::T6%, self::Class1::redirect::T7%, self::Class1::redirect::T8%, self::Class1::redirect::S1%, self::Class1::redirect::S2%, self::Class1::redirect::S3%, self::Class1::redirect::S4%, self::Class1::redirect::S5%, self::Class1::redirect::S6%, self::Class1::redirect::S7%, self::Class1::redirect::S8%>
+    return new self::Class1::•<self::Class1::redirect::T1%, self::Class1::redirect::T2%, self::Class1::redirect::T3%, self::Class1::redirect::T4%, self::Class1::redirect::T5%, self::Class1::redirect::T6%, self::Class1::redirect::T7%, self::Class1::redirect::T8%, self::Class1::redirect::S1%, self::Class1::redirect::S2%, self::Class1::redirect::S3%, self::Class1::redirect::S4%, self::Class1::redirect::S5%, self::Class1::redirect::S6%, self::Class1::redirect::S7%, self::Class1::redirect::S8%>();
+}
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+  method instanceMethod<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → void {}
+}
+static method staticMethod<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → void {}
+static method test() → dynamic {
+  self::staticMethod<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>();
+  <T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → void tearOff = #C2;
+  tearOff<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>(){() → void};
+  tearOff<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>;
+  new self::Class1::•<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>();
+  self::Class1::fact<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>();
+  new self::Class1::•<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>();
+  new self::Class2::•().{self::Class2::instanceMethod}<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>(){() → void};
+  dynamic d = #C2;
+  d{dynamic}.call<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+}
+static method main() → dynamic {}
+static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic>() → self::Class2
+  return new self::Class2::•();
+
+constants  {
+  #C1 = constructor-tearoff self::Class1::redirect
+  #C2 = static-tearoff self::staticMethod
+}
diff --git a/pkg/front_end/testcases/general/bounds_type_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_type_arguments.dart.weak.modular.expect
new file mode 100644
index 0000000..4d4b0ad
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_arguments.dart.weak.modular.expect
@@ -0,0 +1,419 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_type_arguments.dart:39:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:40:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:47:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:48:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:59:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:60:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:67:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:68:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:78:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:79:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:86:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:87:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:97:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:98:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:105:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:106:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:116:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:117:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:124:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:125:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:135:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:136:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:143:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:144:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:154:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:155:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:162:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:163:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:174:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:175:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:182:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:183:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:192:9: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new H<F<Object>>(); // Error
+//         ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:193:9: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new H<F<int>>(); // Error
+//         ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:200:9: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new H<G<Object>>(); // Error
+//         ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:201:9: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new H<G<int>>(); // Error
+//         ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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;
+typedef H<unrelated X extends core::Object? = dynamic> = self::Class2;
+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<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::Class1<self::Class1::T1%, self::Class1::T2%, self::Class1::T3%, self::Class1::T4%, self::Class1::T5%, self::Class1::T6%, self::Class1::T7%, self::Class1::T8%, self::Class1::S1%, self::Class1::S2%, self::Class1::S3%, self::Class1::S4%, self::Class1::S5%, self::Class1::S6%, self::Class1::S7%, self::Class1::S8%>
+    : super core::Object::•()
+    ;
+  static factory fact<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → self::Class1<self::Class1::fact::T1%, self::Class1::fact::T2%, self::Class1::fact::T3%, self::Class1::fact::T4%, self::Class1::fact::T5%, self::Class1::fact::T6%, self::Class1::fact::T7%, self::Class1::fact::T8%, self::Class1::fact::S1%, self::Class1::fact::S2%, self::Class1::fact::S3%, self::Class1::fact::S4%, self::Class1::fact::S5%, self::Class1::fact::S6%, self::Class1::fact::S7%, self::Class1::fact::S8%>
+    return new self::Class1::•<self::Class1::fact::T1%, self::Class1::fact::T2%, self::Class1::fact::T3%, self::Class1::fact::T4%, self::Class1::fact::T5%, self::Class1::fact::T6%, self::Class1::fact::T7%, self::Class1::fact::T8%, self::Class1::fact::S1%, self::Class1::fact::S2%, self::Class1::fact::S3%, self::Class1::fact::S4%, self::Class1::fact::S5%, self::Class1::fact::S6%, self::Class1::fact::S7%, self::Class1::fact::S8%>();
+  static factory redirect<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → self::Class1<self::Class1::redirect::T1%, self::Class1::redirect::T2%, self::Class1::redirect::T3%, self::Class1::redirect::T4%, self::Class1::redirect::T5%, self::Class1::redirect::T6%, self::Class1::redirect::T7%, self::Class1::redirect::T8%, self::Class1::redirect::S1%, self::Class1::redirect::S2%, self::Class1::redirect::S3%, self::Class1::redirect::S4%, self::Class1::redirect::S5%, self::Class1::redirect::S6%, self::Class1::redirect::S7%, self::Class1::redirect::S8%>
+    return new self::Class1::•<self::Class1::redirect::T1%, self::Class1::redirect::T2%, self::Class1::redirect::T3%, self::Class1::redirect::T4%, self::Class1::redirect::T5%, self::Class1::redirect::T6%, self::Class1::redirect::T7%, self::Class1::redirect::T8%, self::Class1::redirect::S1%, self::Class1::redirect::S2%, self::Class1::redirect::S3%, self::Class1::redirect::S4%, self::Class1::redirect::S5%, self::Class1::redirect::S6%, self::Class1::redirect::S7%, self::Class1::redirect::S8%>();
+}
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+  method instanceMethod<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → void {}
+}
+static method staticMethod<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → void {}
+static method test() → dynamic {
+  self::staticMethod<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>();
+  <T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → void tearOff = #C2;
+  tearOff<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>(){() → void};
+  tearOff<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>;
+  new self::Class1::•<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>();
+  self::Class1::fact<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>();
+  new self::Class1::•<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>();
+  new self::Class2::•().{self::Class2::instanceMethod}<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>(){() → void};
+  dynamic d = #C2;
+  d{dynamic}.call<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+}
+static method main() → dynamic {}
+static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic>() → self::Class2
+  return new self::Class2::•();
+
+constants  {
+  #C1 = constructor-tearoff self::Class1::redirect
+  #C2 = static-tearoff self::staticMethod
+}
diff --git a/pkg/front_end/testcases/general/bounds_type_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_type_arguments.dart.weak.outline.expect
new file mode 100644
index 0000000..a7a3717
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_arguments.dart.weak.outline.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<X extends self::Class<X> = self::Class<dynamic>> = X;
+typedef H<unrelated X extends core::Object? = dynamic> = self::Class2;
+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<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Class1::redirect]/*isLegacy*/;
+  constructor •() → self::Class1<self::Class1::T1%, self::Class1::T2%, self::Class1::T3%, self::Class1::T4%, self::Class1::T5%, self::Class1::T6%, self::Class1::T7%, self::Class1::T8%, self::Class1::S1%, self::Class1::S2%, self::Class1::S3%, self::Class1::S4%, self::Class1::S5%, self::Class1::S6%, self::Class1::S7%, self::Class1::S8%>
+    ;
+  static factory fact<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → self::Class1<self::Class1::fact::T1%, self::Class1::fact::T2%, self::Class1::fact::T3%, self::Class1::fact::T4%, self::Class1::fact::T5%, self::Class1::fact::T6%, self::Class1::fact::T7%, self::Class1::fact::T8%, self::Class1::fact::S1%, self::Class1::fact::S2%, self::Class1::fact::S3%, self::Class1::fact::S4%, self::Class1::fact::S5%, self::Class1::fact::S6%, self::Class1::fact::S7%, self::Class1::fact::S8%>
+    ;
+  static factory redirect<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → self::Class1<self::Class1::redirect::T1%, self::Class1::redirect::T2%, self::Class1::redirect::T3%, self::Class1::redirect::T4%, self::Class1::redirect::T5%, self::Class1::redirect::T6%, self::Class1::redirect::T7%, self::Class1::redirect::T8%, self::Class1::redirect::S1%, self::Class1::redirect::S2%, self::Class1::redirect::S3%, self::Class1::redirect::S4%, self::Class1::redirect::S5%, self::Class1::redirect::S6%, self::Class1::redirect::S7%, self::Class1::redirect::S8%>
+    return new self::Class1::•<self::Class1::redirect::T1%, self::Class1::redirect::T2%, self::Class1::redirect::T3%, self::Class1::redirect::T4%, self::Class1::redirect::T5%, self::Class1::redirect::T6%, self::Class1::redirect::T7%, self::Class1::redirect::T8%, self::Class1::redirect::S1%, self::Class1::redirect::S2%, self::Class1::redirect::S3%, self::Class1::redirect::S4%, self::Class1::redirect::S5%, self::Class1::redirect::S6%, self::Class1::redirect::S7%, self::Class1::redirect::S8%>();
+}
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    ;
+  method instanceMethod<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → void
+    ;
+}
+static method staticMethod<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → void
+  ;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
+static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic>() → self::Class2
+  return new self::Class2::•();
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///bounds_type_arguments.dart:18:7 -> ConstructorTearOffConstant(Class1.redirect)
+Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/bounds_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_type_arguments.dart.weak.transformed.expect
new file mode 100644
index 0000000..4d4b0ad
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_arguments.dart.weak.transformed.expect
@@ -0,0 +1,419 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_type_arguments.dart:39:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:40:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:47:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:48:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:59:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:60:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:67:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:68:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:78:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:79:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:86:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:87:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:97:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:98:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:105:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:106:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:116:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:117:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:124:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:125:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:135:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:136:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:143:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:144:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:154:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:155:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:162:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:163:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:174:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:175:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       F<int>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:182:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<Object>, // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:183:7: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       G<int> // Error
+//       ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:192:9: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new H<F<Object>>(); // Error
+//         ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:193:9: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new H<F<int>>(); // Error
+//         ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:200:9: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new H<G<Object>>(); // Error
+//         ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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_type_arguments.dart:201:9: 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_type_arguments.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new H<G<int>>(); // Error
+//         ^
+// pkg/front_end/testcases/general/bounds_type_arguments.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;
+typedef H<unrelated X extends core::Object? = dynamic> = self::Class2;
+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<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::Class1<self::Class1::T1%, self::Class1::T2%, self::Class1::T3%, self::Class1::T4%, self::Class1::T5%, self::Class1::T6%, self::Class1::T7%, self::Class1::T8%, self::Class1::S1%, self::Class1::S2%, self::Class1::S3%, self::Class1::S4%, self::Class1::S5%, self::Class1::S6%, self::Class1::S7%, self::Class1::S8%>
+    : super core::Object::•()
+    ;
+  static factory fact<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → self::Class1<self::Class1::fact::T1%, self::Class1::fact::T2%, self::Class1::fact::T3%, self::Class1::fact::T4%, self::Class1::fact::T5%, self::Class1::fact::T6%, self::Class1::fact::T7%, self::Class1::fact::T8%, self::Class1::fact::S1%, self::Class1::fact::S2%, self::Class1::fact::S3%, self::Class1::fact::S4%, self::Class1::fact::S5%, self::Class1::fact::S6%, self::Class1::fact::S7%, self::Class1::fact::S8%>
+    return new self::Class1::•<self::Class1::fact::T1%, self::Class1::fact::T2%, self::Class1::fact::T3%, self::Class1::fact::T4%, self::Class1::fact::T5%, self::Class1::fact::T6%, self::Class1::fact::T7%, self::Class1::fact::T8%, self::Class1::fact::S1%, self::Class1::fact::S2%, self::Class1::fact::S3%, self::Class1::fact::S4%, self::Class1::fact::S5%, self::Class1::fact::S6%, self::Class1::fact::S7%, self::Class1::fact::S8%>();
+  static factory redirect<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → self::Class1<self::Class1::redirect::T1%, self::Class1::redirect::T2%, self::Class1::redirect::T3%, self::Class1::redirect::T4%, self::Class1::redirect::T5%, self::Class1::redirect::T6%, self::Class1::redirect::T7%, self::Class1::redirect::T8%, self::Class1::redirect::S1%, self::Class1::redirect::S2%, self::Class1::redirect::S3%, self::Class1::redirect::S4%, self::Class1::redirect::S5%, self::Class1::redirect::S6%, self::Class1::redirect::S7%, self::Class1::redirect::S8%>
+    return new self::Class1::•<self::Class1::redirect::T1%, self::Class1::redirect::T2%, self::Class1::redirect::T3%, self::Class1::redirect::T4%, self::Class1::redirect::T5%, self::Class1::redirect::T6%, self::Class1::redirect::T7%, self::Class1::redirect::T8%, self::Class1::redirect::S1%, self::Class1::redirect::S2%, self::Class1::redirect::S3%, self::Class1::redirect::S4%, self::Class1::redirect::S5%, self::Class1::redirect::S6%, self::Class1::redirect::S7%, self::Class1::redirect::S8%>();
+}
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+  method instanceMethod<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → void {}
+}
+static method staticMethod<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → void {}
+static method test() → dynamic {
+  self::staticMethod<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>();
+  <T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic, T4 extends core::Object? = dynamic, T5 extends core::Object? = dynamic, T6 extends core::Object? = dynamic, T7 extends core::Object? = dynamic, T8 extends core::Object? = dynamic, S1 extends core::Object? = dynamic, S2 extends core::Object? = dynamic, S3 extends core::Object? = dynamic, S4 extends core::Object? = dynamic, S5 extends core::Object? = dynamic, S6 extends core::Object? = dynamic, S7 extends core::Object? = dynamic, S8 extends core::Object? = dynamic>() → void tearOff = #C2;
+  tearOff<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>(){() → void};
+  tearOff<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>;
+  new self::Class1::•<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>();
+  self::Class1::fact<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>();
+  new self::Class1::•<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>();
+  new self::Class2::•().{self::Class2::instanceMethod}<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>(){() → void};
+  dynamic d = #C2;
+  d{dynamic}.call<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, core::Object, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+  new self::Class2::•();
+}
+static method main() → dynamic {}
+static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic>() → self::Class2
+  return new self::Class2::•();
+
+constants  {
+  #C1 = constructor-tearoff self::Class1::redirect
+  #C2 = static-tearoff self::staticMethod
+}
diff --git a/pkg/front_end/testcases/general/bounds_type_literals.dart b/pkg/front_end/testcases/general/bounds_type_literals.dart
new file mode 100644
index 0000000..2c4f20a
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_literals.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+class Class1 {}
+
+test() {
+  F; // Ok
+  F<dynamic>; // Ok
+  F<Class>; // Ok
+  F<Class<dynamic>>; // Ok
+  F<ConcreteClass>; // Ok
+  F<Class<ConcreteClass>>; // Ok
+  F<Object>; // Error
+  F<int>; // Error
+  G; // Ok
+  G<dynamic>; // Ok
+  G<Class>; // Ok
+  G<Class<dynamic>>; // Ok
+  G<ConcreteClass>; // Ok
+  G<Class<ConcreteClass>>; // Ok
+  G<Object>; // Error
+  G<int>; // Error
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_type_literals.dart.textual_outline.expect b/pkg/front_end/testcases/general/bounds_type_literals.dart.textual_outline.expect
new file mode 100644
index 0000000..d7e1cd1
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_literals.dart.textual_outline.expect
@@ -0,0 +1,12 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+class Class1 {}
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_type_literals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bounds_type_literals.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..105a3bd
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_literals.dart.textual_outline_modelled.expect
@@ -0,0 +1,11 @@
+class Class<T> {}
+
+class Class1 {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+class G<X extends Class<X>> {}
+
+main() {}
+test() {}
+typedef F<X extends Class<X>> = X;
diff --git a/pkg/front_end/testcases/general/bounds_type_literals.dart.weak.expect b/pkg/front_end/testcases/general/bounds_type_literals.dart.weak.expect
new file mode 100644
index 0000000..1f414e9
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_literals.dart.weak.expect
@@ -0,0 +1,100 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_type_literals.dart:22: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_type_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<Object>; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_type_literals.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_type_literals.dart:23: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_type_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<int>; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_type_literals.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_type_literals.dart:30: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_type_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<Object>; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_type_literals.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_type_literals.dart:31: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_type_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<int>; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_type_literals.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::•()
+    ;
+}
+static method test() → dynamic {
+  #C1;
+  #C2;
+  #C1;
+  #C1;
+  #C3;
+  #C4;
+  #C5;
+  #C6;
+  #C7;
+  #C8;
+  #C7;
+  #C7;
+  #C9;
+  #C10;
+  #C11;
+  #C12;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::Class<dynamic>*)
+  #C2 = TypeLiteralConstant(dynamic)
+  #C3 = TypeLiteralConstant(self::ConcreteClass*)
+  #C4 = TypeLiteralConstant(self::Class<self::ConcreteClass*>*)
+  #C5 = TypeLiteralConstant(core::Object*)
+  #C6 = TypeLiteralConstant(core::int*)
+  #C7 = TypeLiteralConstant(self::G<self::Class<dynamic>*>*)
+  #C8 = TypeLiteralConstant(self::G<dynamic>*)
+  #C9 = TypeLiteralConstant(self::G<self::ConcreteClass*>*)
+  #C10 = TypeLiteralConstant(self::G<self::Class<self::ConcreteClass*>*>*)
+  #C11 = TypeLiteralConstant(self::G<core::Object*>*)
+  #C12 = TypeLiteralConstant(self::G<core::int*>*)
+}
diff --git a/pkg/front_end/testcases/general/bounds_type_literals.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_type_literals.dart.weak.modular.expect
new file mode 100644
index 0000000..1f414e9
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_literals.dart.weak.modular.expect
@@ -0,0 +1,100 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_type_literals.dart:22: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_type_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<Object>; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_type_literals.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_type_literals.dart:23: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_type_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<int>; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_type_literals.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_type_literals.dart:30: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_type_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<Object>; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_type_literals.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_type_literals.dart:31: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_type_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<int>; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_type_literals.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::•()
+    ;
+}
+static method test() → dynamic {
+  #C1;
+  #C2;
+  #C1;
+  #C1;
+  #C3;
+  #C4;
+  #C5;
+  #C6;
+  #C7;
+  #C8;
+  #C7;
+  #C7;
+  #C9;
+  #C10;
+  #C11;
+  #C12;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::Class<dynamic>*)
+  #C2 = TypeLiteralConstant(dynamic)
+  #C3 = TypeLiteralConstant(self::ConcreteClass*)
+  #C4 = TypeLiteralConstant(self::Class<self::ConcreteClass*>*)
+  #C5 = TypeLiteralConstant(core::Object*)
+  #C6 = TypeLiteralConstant(core::int*)
+  #C7 = TypeLiteralConstant(self::G<self::Class<dynamic>*>*)
+  #C8 = TypeLiteralConstant(self::G<dynamic>*)
+  #C9 = TypeLiteralConstant(self::G<self::ConcreteClass*>*)
+  #C10 = TypeLiteralConstant(self::G<self::Class<self::ConcreteClass*>*>*)
+  #C11 = TypeLiteralConstant(self::G<core::Object*>*)
+  #C12 = TypeLiteralConstant(self::G<core::int*>*)
+}
diff --git a/pkg/front_end/testcases/general/bounds_type_literals.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_type_literals.dart.weak.outline.expect
new file mode 100644
index 0000000..354780e
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_literals.dart.weak.outline.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+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
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/bounds_type_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_type_literals.dart.weak.transformed.expect
new file mode 100644
index 0000000..1f414e9
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_literals.dart.weak.transformed.expect
@@ -0,0 +1,100 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_type_literals.dart:22: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_type_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<Object>; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_type_literals.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_type_literals.dart:23: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_type_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<int>; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_type_literals.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_type_literals.dart:30: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_type_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<Object>; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_type_literals.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_type_literals.dart:31: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_type_literals.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<int>; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_type_literals.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::•()
+    ;
+}
+static method test() → dynamic {
+  #C1;
+  #C2;
+  #C1;
+  #C1;
+  #C3;
+  #C4;
+  #C5;
+  #C6;
+  #C7;
+  #C8;
+  #C7;
+  #C7;
+  #C9;
+  #C10;
+  #C11;
+  #C12;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::Class<dynamic>*)
+  #C2 = TypeLiteralConstant(dynamic)
+  #C3 = TypeLiteralConstant(self::ConcreteClass*)
+  #C4 = TypeLiteralConstant(self::Class<self::ConcreteClass*>*)
+  #C5 = TypeLiteralConstant(core::Object*)
+  #C6 = TypeLiteralConstant(core::int*)
+  #C7 = TypeLiteralConstant(self::G<self::Class<dynamic>*>*)
+  #C8 = TypeLiteralConstant(self::G<dynamic>*)
+  #C9 = TypeLiteralConstant(self::G<self::ConcreteClass*>*)
+  #C10 = TypeLiteralConstant(self::G<self::Class<self::ConcreteClass*>*>*)
+  #C11 = TypeLiteralConstant(self::G<core::Object*>*)
+  #C12 = TypeLiteralConstant(self::G<core::int*>*)
+}
diff --git a/pkg/front_end/testcases/general/bounds_type_parameters.dart b/pkg/front_end/testcases/general/bounds_type_parameters.dart
new file mode 100644
index 0000000..3a1e8eb
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_parameters.dart
@@ -0,0 +1,243 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+typedef Typedef1<
+        T1 extends F, // Error
+        T2 extends F<dynamic>, // Ok
+        T3 extends F<Class>, // Ok
+        T4 extends F<Class<dynamic>>, // Ok
+        T5 extends F<ConcreteClass>, // Ok
+        T6 extends F<Class<ConcreteClass>>, // Ok
+        T7 extends F<Object>, // Error
+        T8 extends F<int>, // Error
+        S1 extends G, // Error
+        S2 extends G<dynamic>, // Ok
+        S3 extends G<Class>, // Ok
+        S4 extends G<Class<dynamic>>, // Ok
+        S5 extends G<ConcreteClass>, // Ok
+        S6 extends G<Class<ConcreteClass>>, // Ok
+        S7 extends G<Object>, // Error
+        S8 extends G<int> // Error
+        >
+    = void Function();
+
+typedef Typedef2 = void Function<
+    T1 extends F, // Error
+    T2 extends F<dynamic>, // Ok
+    T3 extends F<Class>, // Ok
+    T4 extends F<Class<dynamic>>, // Ok
+    T5 extends F<ConcreteClass>, // Ok
+    T6 extends F<Class<ConcreteClass>>, // Ok
+    T7 extends F<Object>, // Error
+    T8 extends F<int>, // Error
+    S1 extends G, // Error
+    S2 extends G<dynamic>, // Ok
+    S3 extends G<Class>, // Ok
+    S4 extends G<Class<dynamic>>, // Ok
+    S5 extends G<ConcreteClass>, // Ok
+    S6 extends G<Class<ConcreteClass>>, // Ok
+    S7 extends G<Object>, // Error
+    S8 extends G<int> // Error
+    >();
+
+typedef void Typedef3<
+    T1 extends F, // Error
+    T2 extends F<dynamic>, // Ok
+    T3 extends F<Class>, // Ok
+    T4 extends F<Class<dynamic>>, // Ok
+    T5 extends F<ConcreteClass>, // Ok
+    T6 extends F<Class<ConcreteClass>>, // Ok
+    T7 extends F<Object>, // Error
+    T8 extends F<int>, // Error
+    S1 extends G, // Error
+    S2 extends G<dynamic>, // Ok
+    S3 extends G<Class>, // Ok
+    S4 extends G<Class<dynamic>>, // Ok
+    S5 extends G<ConcreteClass>, // Ok
+    S6 extends G<Class<ConcreteClass>>, // Ok
+    S7 extends G<Object>, // Error
+    S8 extends G<int> // Error
+    >();
+
+class Class1<
+    T1 extends F, // Error
+    T2 extends F<dynamic>, // Ok
+    T3 extends F<Class>, // Ok
+    T4 extends F<Class<dynamic>>, // Ok
+    T5 extends F<ConcreteClass>, // Ok
+    T6 extends F<Class<ConcreteClass>>, // Ok
+    T7 extends F<Object>, // Error
+    T8 extends F<int>, // Error
+    S1 extends G, // Error
+    S2 extends G<dynamic>, // Ok
+    S3 extends G<Class>, // Ok
+    S4 extends G<Class<dynamic>>, // Ok
+    S5 extends G<ConcreteClass>, // Ok
+    S6 extends G<Class<ConcreteClass>>, // Ok
+    S7 extends G<Object>, // Error
+    S8 extends G<int> // Error
+    > {}
+
+class Class2<
+    T1 extends F, // Error
+    T2 extends F<dynamic>, // Ok
+    T3 extends F<Class>, // Ok
+    T4 extends F<Class<dynamic>>, // Ok
+    T5 extends F<ConcreteClass>, // Ok
+    T6 extends F<Class<ConcreteClass>>, // Ok
+    T7 extends F<Object>, // Error
+    T8 extends F<int>, // Error
+    S1 extends G, // Error
+    S2 extends G<dynamic>, // Ok
+    S3 extends G<Class>, // Ok
+    S4 extends G<Class<dynamic>>, // Ok
+    S5 extends G<ConcreteClass>, // Ok
+    S6 extends G<Class<ConcreteClass>>, // Ok
+    S7 extends G<Object>, // Error
+    S8 extends G<int> // Error
+    > = Object with Class;
+
+mixin Mixin1<
+    T1 extends F, // Error
+    T2 extends F<dynamic>, // Ok
+    T3 extends F<Class>, // Ok
+    T4 extends F<Class<dynamic>>, // Ok
+    T5 extends F<ConcreteClass>, // Ok
+    T6 extends F<Class<ConcreteClass>>, // Ok
+    T7 extends F<Object>, // Error
+    T8 extends F<int>, // Error
+    S1 extends G, // Error
+    S2 extends G<dynamic>, // Ok
+    S3 extends G<Class>, // Ok
+    S4 extends G<Class<dynamic>>, // Ok
+    S5 extends G<ConcreteClass>, // Ok
+    S6 extends G<Class<ConcreteClass>>, // Ok
+    S7 extends G<Object>, // Error
+    S8 extends G<int> // Error
+    > {}
+
+// TODO(johnniwinther): Check/create this type as regular bounded i2b.
+enum Enum1<
+    T1 extends F, // Error
+    T2 extends F<dynamic>, // Ok
+    T3 extends F<Class>, // Error
+    T4 extends F<Class<dynamic>>, // Error
+    T5 extends F<ConcreteClass>, // Ok
+    T6 extends F<Class<ConcreteClass>>, // Ok
+    T7 extends F<Object>, // Error
+    T8 extends F<int>, // Error
+    S1 extends G, // Error
+    S2 extends G<dynamic>, // Error
+    S3 extends G<Class>, // Error
+    S4 extends G<Class<dynamic>>, // Error
+    S5 extends G<ConcreteClass>, // Ok
+    S6 extends G<Class<ConcreteClass>>, // Ok
+    S7 extends G<Object>, // Error
+    S8 extends G<int> // Error
+    > {
+  a<
+      ConcreteClass,
+      ConcreteClass,
+      ConcreteClass,
+      ConcreteClass,
+      ConcreteClass,
+      ConcreteClass,
+      ConcreteClass,
+      ConcreteClass,
+      G<ConcreteClass>,
+      G<ConcreteClass>,
+      G<ConcreteClass>,
+      G<ConcreteClass>,
+      G<ConcreteClass>,
+      G<ConcreteClass>,
+      G<ConcreteClass>,
+      G<ConcreteClass>>()
+}
+
+extension Extension<
+    T1 extends F, // Ok
+    T2 extends F<dynamic>, // Ok
+    T3 extends F<Class>, // Ok
+    T4 extends F<Class<dynamic>>, // Ok
+    T5 extends F<ConcreteClass>, // Ok
+    T6 extends F<Class<ConcreteClass>>, // Ok
+    T7 extends F<Object>, // Error
+    T8 extends F<int>, // Error
+    S1 extends G, // Ok
+    S2 extends G<dynamic>, // Ok
+    S3 extends G<Class>, // Ok
+    S4 extends G<Class<dynamic>>, // Ok
+    S5 extends G<ConcreteClass>, // Ok
+    S6 extends G<Class<ConcreteClass>>, // Ok
+    S7 extends G<Object>, // Error
+    S8 extends G<int> // Error
+    > on Class {}
+
+void method1<
+    T1 extends F, // Error
+    T2 extends F<dynamic>, // Ok
+    T3 extends F<Class>, // Ok
+    T4 extends F<Class<dynamic>>, // Ok
+    T5 extends F<ConcreteClass>, // Ok
+    T6 extends F<Class<ConcreteClass>>, // Ok
+    T7 extends F<Object>, // Error
+    T8 extends F<int>, // Error
+    S1 extends G, // Error
+    S2 extends G<dynamic>, // Ok
+    S3 extends G<Class>, // Ok
+    S4 extends G<Class<dynamic>>, // Ok
+    S5 extends G<ConcreteClass>, // Ok
+    S6 extends G<Class<ConcreteClass>>, // Ok
+    S7 extends G<Object>, // Error
+    S8 extends G<int> // Error
+    >() {}
+
+test() {
+  void local1<
+      T1 extends F, // Ok
+      T2 extends F<dynamic>, // Ok
+      T3 extends F<Class>, // Ok
+      T4 extends F<Class<dynamic>>, // Ok
+      T5 extends F<ConcreteClass>, // Ok
+      T6 extends F<Class<ConcreteClass>>, // Ok
+      T7 extends F<Object>, // Error
+      T8 extends F<int>, // Error
+      S1 extends G, // Ok
+      S2 extends G<dynamic>, // Ok
+      S3 extends G<Class>, // Ok
+      S4 extends G<Class<dynamic>>, // Ok
+      S5 extends G<ConcreteClass>, // Ok
+      S6 extends G<Class<ConcreteClass>>, // Ok
+      S7 extends G<Object>, // Error
+      S8 extends G<int> // Error
+      >() {}
+  void Function<
+      T1 extends F, // Ok
+      T2 extends F<dynamic>, // Ok
+      T3 extends F<Class>, // Ok
+      T4 extends F<Class<dynamic>>, // Ok
+      T5 extends F<ConcreteClass>, // Ok
+      T6 extends F<Class<ConcreteClass>>, // Ok
+      T7 extends F<Object>, // Error
+      T8 extends F<int>, // Error
+      S1 extends G, // Ok
+      S2 extends G<dynamic>, // Ok
+      S3 extends G<Class>, // Ok
+      S4 extends G<Class<dynamic>>, // Ok
+      S5 extends G<ConcreteClass>, // Ok
+      S6 extends G<Class<ConcreteClass>>, // Ok
+      S7 extends G<Object>, // Error
+      S8 extends G<int> // Error
+      >() local;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_type_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/general/bounds_type_parameters.dart.textual_outline.expect
new file mode 100644
index 0000000..7608f2d
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_parameters.dart.textual_outline.expect
@@ -0,0 +1,187 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+typedef Typedef1<
+        T1 extends F,
+        T2 extends F<dynamic>,
+        T3 extends F<Class>,
+        T4 extends F<Class<dynamic>>,
+        T5 extends F<ConcreteClass>,
+        T6 extends F<Class<ConcreteClass>>,
+        T7 extends F<Object>,
+        T8 extends F<int>,
+        S1 extends G,
+        S2 extends G<dynamic>,
+        S3 extends G<Class>,
+        S4 extends G<Class<dynamic>>,
+        S5 extends G<ConcreteClass>,
+        S6 extends G<Class<ConcreteClass>>,
+        S7 extends G<Object>,
+        S8 extends G<int>>
+    = void Function();
+typedef Typedef2 = void Function<
+    T1 extends F,
+    T2 extends F<dynamic>,
+    T3 extends F<Class>,
+    T4 extends F<Class<dynamic>>,
+    T5 extends F<ConcreteClass>,
+    T6 extends F<Class<ConcreteClass>>,
+    T7 extends F<Object>,
+    T8 extends F<int>,
+    S1 extends G,
+    S2 extends G<dynamic>,
+    S3 extends G<Class>,
+    S4 extends G<Class<dynamic>>,
+    S5 extends G<ConcreteClass>,
+    S6 extends G<Class<ConcreteClass>>,
+    S7 extends G<Object>,
+    S8 extends G<int>>();
+typedef void Typedef3<
+    T1 extends F,
+    T2 extends F<dynamic>,
+    T3 extends F<Class>,
+    T4 extends F<Class<dynamic>>,
+    T5 extends F<ConcreteClass>,
+    T6 extends F<Class<ConcreteClass>>,
+    T7 extends F<Object>,
+    T8 extends F<int>,
+    S1 extends G,
+    S2 extends G<dynamic>,
+    S3 extends G<Class>,
+    S4 extends G<Class<dynamic>>,
+    S5 extends G<ConcreteClass>,
+    S6 extends G<Class<ConcreteClass>>,
+    S7 extends G<Object>,
+    S8 extends G<int>>();
+
+class Class1<
+    T1 extends F,
+    T2 extends F<dynamic>,
+    T3 extends F<Class>,
+    T4 extends F<Class<dynamic>>,
+    T5 extends F<ConcreteClass>,
+    T6 extends F<Class<ConcreteClass>>,
+    T7 extends F<Object>,
+    T8 extends F<int>,
+    S1 extends G,
+    S2 extends G<dynamic>,
+    S3 extends G<Class>,
+    S4 extends G<Class<dynamic>>,
+    S5 extends G<ConcreteClass>,
+    S6 extends G<Class<ConcreteClass>>,
+    S7 extends G<Object>,
+    S8 extends G<int>> {}
+
+class Class2<
+    T1 extends F,
+    T2 extends F<dynamic>,
+    T3 extends F<Class>,
+    T4 extends F<Class<dynamic>>,
+    T5 extends F<ConcreteClass>,
+    T6 extends F<Class<ConcreteClass>>,
+    T7 extends F<Object>,
+    T8 extends F<int>,
+    S1 extends G,
+    S2 extends G<dynamic>,
+    S3 extends G<Class>,
+    S4 extends G<Class<dynamic>>,
+    S5 extends G<ConcreteClass>,
+    S6 extends G<Class<ConcreteClass>>,
+    S7 extends G<Object>,
+    S8 extends G<int>> = Object with Class;
+mixin Mixin1<
+    T1 extends F,
+    T2 extends F<dynamic>,
+    T3 extends F<Class>,
+    T4 extends F<Class<dynamic>>,
+    T5 extends F<ConcreteClass>,
+    T6 extends F<Class<ConcreteClass>>,
+    T7 extends F<Object>,
+    T8 extends F<int>,
+    S1 extends G,
+    S2 extends G<dynamic>,
+    S3 extends G<Class>,
+    S4 extends G<Class<dynamic>>,
+    S5 extends G<ConcreteClass>,
+    S6 extends G<Class<ConcreteClass>>,
+    S7 extends G<Object>,
+    S8 extends G<int>> {}
+
+enum Enum1<
+    T1 extends F,
+    T2 extends F<dynamic>,
+    T3 extends F<Class>,
+    T4 extends F<Class<dynamic>>,
+    T5 extends F<ConcreteClass>,
+    T6 extends F<Class<ConcreteClass>>,
+    T7 extends F<Object>,
+    T8 extends F<int>,
+    S1 extends G,
+    S2 extends G<dynamic>,
+    S3 extends G<Class>,
+    S4 extends G<Class<dynamic>>,
+    S5 extends G<ConcreteClass>,
+    S6 extends G<Class<ConcreteClass>>,
+    S7 extends G<Object>,
+    S8 extends G<int>> {
+  a<
+      ConcreteClass,
+      ConcreteClass,
+      ConcreteClass,
+      ConcreteClass,
+      ConcreteClass,
+      ConcreteClass,
+      ConcreteClass,
+      ConcreteClass,
+      G<ConcreteClass>,
+      G<ConcreteClass>,
+      G<ConcreteClass>,
+      G<ConcreteClass>,
+      G<ConcreteClass>,
+      G<ConcreteClass>,
+      G<ConcreteClass>,
+      G<ConcreteClass>>()
+}
+
+extension Extension<
+    T1 extends F,
+    T2 extends F<dynamic>,
+    T3 extends F<Class>,
+    T4 extends F<Class<dynamic>>,
+    T5 extends F<ConcreteClass>,
+    T6 extends F<Class<ConcreteClass>>,
+    T7 extends F<Object>,
+    T8 extends F<int>,
+    S1 extends G,
+    S2 extends G<dynamic>,
+    S3 extends G<Class>,
+    S4 extends G<Class<dynamic>>,
+    S5 extends G<ConcreteClass>,
+    S6 extends G<Class<ConcreteClass>>,
+    S7 extends G<Object>,
+    S8 extends G<int>> on Class {}
+
+void method1<
+    T1 extends F,
+    T2 extends F<dynamic>,
+    T3 extends F<Class>,
+    T4 extends F<Class<dynamic>>,
+    T5 extends F<ConcreteClass>,
+    T6 extends F<Class<ConcreteClass>>,
+    T7 extends F<Object>,
+    T8 extends F<int>,
+    S1 extends G,
+    S2 extends G<dynamic>,
+    S3 extends G<Class>,
+    S4 extends G<Class<dynamic>>,
+    S5 extends G<ConcreteClass>,
+    S6 extends G<Class<ConcreteClass>>,
+    S7 extends G<Object>,
+    S8 extends G<int>>() {}
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_type_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bounds_type_parameters.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..216f660
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_parameters.dart.textual_outline_modelled.expect
@@ -0,0 +1,185 @@
+class Class<T> {}
+
+class Class1<
+    T1 extends F,
+    T2 extends F<dynamic>,
+    T3 extends F<Class>,
+    T4 extends F<Class<dynamic>>,
+    T5 extends F<ConcreteClass>,
+    T6 extends F<Class<ConcreteClass>>,
+    T7 extends F<Object>,
+    T8 extends F<int>,
+    S1 extends G,
+    S2 extends G<dynamic>,
+    S3 extends G<Class>,
+    S4 extends G<Class<dynamic>>,
+    S5 extends G<ConcreteClass>,
+    S6 extends G<Class<ConcreteClass>>,
+    S7 extends G<Object>,
+    S8 extends G<int>> {}
+
+class Class2<
+    T1 extends F,
+    T2 extends F<dynamic>,
+    T3 extends F<Class>,
+    T4 extends F<Class<dynamic>>,
+    T5 extends F<ConcreteClass>,
+    T6 extends F<Class<ConcreteClass>>,
+    T7 extends F<Object>,
+    T8 extends F<int>,
+    S1 extends G,
+    S2 extends G<dynamic>,
+    S3 extends G<Class>,
+    S4 extends G<Class<dynamic>>,
+    S5 extends G<ConcreteClass>,
+    S6 extends G<Class<ConcreteClass>>,
+    S7 extends G<Object>,
+    S8 extends G<int>> = Object with Class;
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+class G<X extends Class<X>> {}
+
+enum Enum1<
+    T1 extends F,
+    T2 extends F<dynamic>,
+    T3 extends F<Class>,
+    T4 extends F<Class<dynamic>>,
+    T5 extends F<ConcreteClass>,
+    T6 extends F<Class<ConcreteClass>>,
+    T7 extends F<Object>,
+    T8 extends F<int>,
+    S1 extends G,
+    S2 extends G<dynamic>,
+    S3 extends G<Class>,
+    S4 extends G<Class<dynamic>>,
+    S5 extends G<ConcreteClass>,
+    S6 extends G<Class<ConcreteClass>>,
+    S7 extends G<Object>,
+    S8 extends G<int>> {
+  a<
+      ConcreteClass,
+      ConcreteClass,
+      ConcreteClass,
+      ConcreteClass,
+      ConcreteClass,
+      ConcreteClass,
+      ConcreteClass,
+      ConcreteClass,
+      G<ConcreteClass>,
+      G<ConcreteClass>,
+      G<ConcreteClass>,
+      G<ConcreteClass>,
+      G<ConcreteClass>,
+      G<ConcreteClass>,
+      G<ConcreteClass>,
+      G<ConcreteClass>>()
+}
+
+extension Extension<
+    T1 extends F,
+    T2 extends F<dynamic>,
+    T3 extends F<Class>,
+    T4 extends F<Class<dynamic>>,
+    T5 extends F<ConcreteClass>,
+    T6 extends F<Class<ConcreteClass>>,
+    T7 extends F<Object>,
+    T8 extends F<int>,
+    S1 extends G,
+    S2 extends G<dynamic>,
+    S3 extends G<Class>,
+    S4 extends G<Class<dynamic>>,
+    S5 extends G<ConcreteClass>,
+    S6 extends G<Class<ConcreteClass>>,
+    S7 extends G<Object>,
+    S8 extends G<int>> on Class {}
+
+main() {}
+mixin Mixin1<
+    T1 extends F,
+    T2 extends F<dynamic>,
+    T3 extends F<Class>,
+    T4 extends F<Class<dynamic>>,
+    T5 extends F<ConcreteClass>,
+    T6 extends F<Class<ConcreteClass>>,
+    T7 extends F<Object>,
+    T8 extends F<int>,
+    S1 extends G,
+    S2 extends G<dynamic>,
+    S3 extends G<Class>,
+    S4 extends G<Class<dynamic>>,
+    S5 extends G<ConcreteClass>,
+    S6 extends G<Class<ConcreteClass>>,
+    S7 extends G<Object>,
+    S8 extends G<int>> {}
+test() {}
+typedef F<X extends Class<X>> = X;
+typedef Typedef1<
+        T1 extends F,
+        T2 extends F<dynamic>,
+        T3 extends F<Class>,
+        T4 extends F<Class<dynamic>>,
+        T5 extends F<ConcreteClass>,
+        T6 extends F<Class<ConcreteClass>>,
+        T7 extends F<Object>,
+        T8 extends F<int>,
+        S1 extends G,
+        S2 extends G<dynamic>,
+        S3 extends G<Class>,
+        S4 extends G<Class<dynamic>>,
+        S5 extends G<ConcreteClass>,
+        S6 extends G<Class<ConcreteClass>>,
+        S7 extends G<Object>,
+        S8 extends G<int>>
+    = void Function();
+typedef Typedef2 = void Function<
+    T1 extends F,
+    T2 extends F<dynamic>,
+    T3 extends F<Class>,
+    T4 extends F<Class<dynamic>>,
+    T5 extends F<ConcreteClass>,
+    T6 extends F<Class<ConcreteClass>>,
+    T7 extends F<Object>,
+    T8 extends F<int>,
+    S1 extends G,
+    S2 extends G<dynamic>,
+    S3 extends G<Class>,
+    S4 extends G<Class<dynamic>>,
+    S5 extends G<ConcreteClass>,
+    S6 extends G<Class<ConcreteClass>>,
+    S7 extends G<Object>,
+    S8 extends G<int>>();
+typedef void Typedef3<
+    T1 extends F,
+    T2 extends F<dynamic>,
+    T3 extends F<Class>,
+    T4 extends F<Class<dynamic>>,
+    T5 extends F<ConcreteClass>,
+    T6 extends F<Class<ConcreteClass>>,
+    T7 extends F<Object>,
+    T8 extends F<int>,
+    S1 extends G,
+    S2 extends G<dynamic>,
+    S3 extends G<Class>,
+    S4 extends G<Class<dynamic>>,
+    S5 extends G<ConcreteClass>,
+    S6 extends G<Class<ConcreteClass>>,
+    S7 extends G<Object>,
+    S8 extends G<int>>();
+void method1<
+    T1 extends F,
+    T2 extends F<dynamic>,
+    T3 extends F<Class>,
+    T4 extends F<Class<dynamic>>,
+    T5 extends F<ConcreteClass>,
+    T6 extends F<Class<ConcreteClass>>,
+    T7 extends F<Object>,
+    T8 extends F<int>,
+    S1 extends G,
+    S2 extends G<dynamic>,
+    S3 extends G<Class>,
+    S4 extends G<Class<dynamic>>,
+    S5 extends G<ConcreteClass>,
+    S6 extends G<Class<ConcreteClass>>,
+    S7 extends G<Object>,
+    S8 extends G<int>>() {}
diff --git a/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.expect b/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.expect
new file mode 100644
index 0000000..dbd7faa
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.expect
@@ -0,0 +1,634 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:14:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//         T1 extends F, // Error
+//         ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:22:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//         S1 extends G, // Error
+//         ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:34:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:42:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:53:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:61:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:72:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:80:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:91:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:99:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:110:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:118:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:130:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:138:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:186:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:194:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:20:20: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//         T7 extends F<Object>, // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:21:20: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//         T8 extends F<int>, // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:28:20: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//         S7 extends G<Object>, // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:29:20: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//         S8 extends G<int> // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:40:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:41:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:48:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:49:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:59:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:60:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:67:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:68:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:78:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:79:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:86:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:87:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:97:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:98:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:105:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:106:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:116:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:117:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:124:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:125:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:136:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:137:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:144:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:145:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:173:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:174:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:181:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:182:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:192:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:193:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:200:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:201:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:147:3: Error: Type argument 'ConcreteClass' doesn't conform to the bound 'int' of the type variable 'T8' on 'Enum1'.
+//  - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   a<
+//   ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:137:5: Context: This is the type variable whose bound isn't conformed to.
+//     T8 extends F<int>, // Error
+//     ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:147:3: Error: Type argument 'G<ConcreteClass>' doesn't conform to the bound 'G<int>' of the type variable 'S8' on 'Enum1'.
+//  - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+//  - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   a<
+//   ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:145:5: Context: This is the type variable whose bound isn't conformed to.
+//     S8 extends G<int> // Error
+//     ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:212:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       T7 extends F<Object>, // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:213:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       T8 extends F<int>, // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:220:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       S7 extends G<Object>, // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:221:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       S8 extends G<int> // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:230:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       T7 extends F<Object>, // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:231:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       T8 extends F<int>, // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:238:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       S7 extends G<Object>, // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:239:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       S8 extends G<int> // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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;
+typedef Typedef1<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
+typedef Typedef2 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void;
+typedef Typedef3<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
+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<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class1<self::Class1::T1, self::Class1::T2%, self::Class1::T3, self::Class1::T4, self::Class1::T5, self::Class1::T6, self::Class1::T7, self::Class1::T8, self::Class1::S1, self::Class1::S2, self::Class1::S3, self::Class1::S4, self::Class1::S5, self::Class1::S6, self::Class1::S7, self::Class1::S8>
+    : super core::Object::•()
+    ;
+}
+class Class2<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> = core::Object with self::Class<dynamic> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Class2<self::Class2::T1, self::Class2::T2%, self::Class2::T3, self::Class2::T4, self::Class2::T5, self::Class2::T6, self::Class2::T7, self::Class2::T8, self::Class2::S1, self::Class2::S2, self::Class2::S3, self::Class2::S4, self::Class2::S5, self::Class2::S6, self::Class2::S7, self::Class2::S8>
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object /*isMixinDeclaration*/  {
+}
+class Enum1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>> values = #C4;
+  static const field self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>> a = #C3;
+  const constructor •(core::int index, core::String name) → self::Enum1<self::Enum1::T1, self::Enum1::T2%, self::Enum1::T3, self::Enum1::T4, self::Enum1::T5, self::Enum1::T6, self::Enum1::T7, self::Enum1::T8, self::Enum1::S1, self::Enum1::S2, self::Enum1::S3, self::Enum1::S4, self::Enum1::S5, self::Enum1::S6, self::Enum1::S7, self::Enum1::S8>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum1.${this.{core::_Enum::_name}{core::String}}";
+}
+extension Extension<T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>> on self::Class<dynamic> {
+}
+static method method1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void {}
+static method test() → dynamic {
+  function local1<T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>>() → void {}
+  <T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>>() → void local;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::Enum1<self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*> {index:#C1, _name:#C2}
+  #C4 = <self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///bounds_type_parameters.dart:
+- Enum1. (from org-dartlang-testcase:///bounds_type_parameters.dart:129:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.modular.expect
new file mode 100644
index 0000000..dbd7faa
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.modular.expect
@@ -0,0 +1,634 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:14:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//         T1 extends F, // Error
+//         ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:22:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//         S1 extends G, // Error
+//         ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:34:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:42:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:53:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:61:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:72:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:80:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:91:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:99:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:110:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:118:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:130:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:138:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:186:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:194:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:20:20: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//         T7 extends F<Object>, // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:21:20: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//         T8 extends F<int>, // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:28:20: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//         S7 extends G<Object>, // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:29:20: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//         S8 extends G<int> // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:40:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:41:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:48:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:49:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:59:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:60:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:67:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:68:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:78:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:79:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:86:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:87:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:97:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:98:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:105:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:106:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:116:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:117:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:124:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:125:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:136:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:137:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:144:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:145:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:173:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:174:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:181:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:182:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:192:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:193:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:200:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:201:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:147:3: Error: Type argument 'ConcreteClass' doesn't conform to the bound 'int' of the type variable 'T8' on 'Enum1'.
+//  - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   a<
+//   ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:137:5: Context: This is the type variable whose bound isn't conformed to.
+//     T8 extends F<int>, // Error
+//     ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:147:3: Error: Type argument 'G<ConcreteClass>' doesn't conform to the bound 'G<int>' of the type variable 'S8' on 'Enum1'.
+//  - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+//  - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   a<
+//   ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:145:5: Context: This is the type variable whose bound isn't conformed to.
+//     S8 extends G<int> // Error
+//     ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:212:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       T7 extends F<Object>, // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:213:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       T8 extends F<int>, // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:220:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       S7 extends G<Object>, // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:221:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       S8 extends G<int> // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:230:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       T7 extends F<Object>, // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:231:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       T8 extends F<int>, // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:238:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       S7 extends G<Object>, // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:239:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       S8 extends G<int> // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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;
+typedef Typedef1<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
+typedef Typedef2 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void;
+typedef Typedef3<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
+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<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class1<self::Class1::T1, self::Class1::T2%, self::Class1::T3, self::Class1::T4, self::Class1::T5, self::Class1::T6, self::Class1::T7, self::Class1::T8, self::Class1::S1, self::Class1::S2, self::Class1::S3, self::Class1::S4, self::Class1::S5, self::Class1::S6, self::Class1::S7, self::Class1::S8>
+    : super core::Object::•()
+    ;
+}
+class Class2<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> = core::Object with self::Class<dynamic> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Class2<self::Class2::T1, self::Class2::T2%, self::Class2::T3, self::Class2::T4, self::Class2::T5, self::Class2::T6, self::Class2::T7, self::Class2::T8, self::Class2::S1, self::Class2::S2, self::Class2::S3, self::Class2::S4, self::Class2::S5, self::Class2::S6, self::Class2::S7, self::Class2::S8>
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object /*isMixinDeclaration*/  {
+}
+class Enum1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>> values = #C4;
+  static const field self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>> a = #C3;
+  const constructor •(core::int index, core::String name) → self::Enum1<self::Enum1::T1, self::Enum1::T2%, self::Enum1::T3, self::Enum1::T4, self::Enum1::T5, self::Enum1::T6, self::Enum1::T7, self::Enum1::T8, self::Enum1::S1, self::Enum1::S2, self::Enum1::S3, self::Enum1::S4, self::Enum1::S5, self::Enum1::S6, self::Enum1::S7, self::Enum1::S8>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum1.${this.{core::_Enum::_name}{core::String}}";
+}
+extension Extension<T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>> on self::Class<dynamic> {
+}
+static method method1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void {}
+static method test() → dynamic {
+  function local1<T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>>() → void {}
+  <T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>>() → void local;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::Enum1<self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*> {index:#C1, _name:#C2}
+  #C4 = <self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///bounds_type_parameters.dart:
+- Enum1. (from org-dartlang-testcase:///bounds_type_parameters.dart:129:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.outline.expect
new file mode 100644
index 0000000..ad2a952
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.outline.expect
@@ -0,0 +1,546 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:14:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//         T1 extends F, // Error
+//         ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:22:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//         S1 extends G, // Error
+//         ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:34:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:42:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:53:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:61:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:72:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:80:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:91:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:99:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:110:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:118:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:130:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:138:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:186:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:194:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:20:20: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//         T7 extends F<Object>, // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:21:20: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//         T8 extends F<int>, // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:28:20: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//         S7 extends G<Object>, // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:29:20: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//         S8 extends G<int> // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:40:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:41:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:48:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:49:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:59:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:60:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:67:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:68:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:78:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:79:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:86:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:87:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:97:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:98:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:105:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:106:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:116:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:117:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:124:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:125:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:136:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:137:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:144:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:145:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:173:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:174:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:181:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:182:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:192:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:193:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:200:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:201:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:147:3: Error: Type argument 'ConcreteClass' doesn't conform to the bound 'int' of the type variable 'T8' on 'Enum1'.
+//  - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   a<
+//   ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:137:5: Context: This is the type variable whose bound isn't conformed to.
+//     T8 extends F<int>, // Error
+//     ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:147:3: Error: Type argument 'G<ConcreteClass>' doesn't conform to the bound 'G<int>' of the type variable 'S8' on 'Enum1'.
+//  - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+//  - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   a<
+//   ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:145:5: Context: This is the type variable whose bound isn't conformed to.
+//     S8 extends G<int> // Error
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<X extends self::Class<X> = self::Class<dynamic>> = X;
+typedef Typedef1<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
+typedef Typedef2 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void;
+typedef Typedef3<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
+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<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class1<self::Class1::T1, self::Class1::T2%, self::Class1::T3, self::Class1::T4, self::Class1::T5, self::Class1::T6, self::Class1::T7, self::Class1::T8, self::Class1::S1, self::Class1::S2, self::Class1::S3, self::Class1::S4, self::Class1::S5, self::Class1::S6, self::Class1::S7, self::Class1::S8>
+    ;
+}
+class Class2<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> = core::Object with self::Class<dynamic> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Class2<self::Class2::T1, self::Class2::T2%, self::Class2::T3, self::Class2::T4, self::Class2::T5, self::Class2::T6, self::Class2::T7, self::Class2::T8, self::Class2::S1, self::Class2::S2, self::Class2::S3, self::Class2::S4, self::Class2::S5, self::Class2::S6, self::Class2::S7, self::Class2::S8>
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object /*isMixinDeclaration*/  {
+}
+class Enum1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>> values = const <self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>>[self::Enum1::a];
+  static const field self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>> a = const self::Enum1::•<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>>(0, "a");
+  const constructor •(core::int index, core::String name) → self::Enum1<self::Enum1::T1, self::Enum1::T2%, self::Enum1::T3, self::Enum1::T4, self::Enum1::T5, self::Enum1::T6, self::Enum1::T7, self::Enum1::T8, self::Enum1::S1, self::Enum1::S2, self::Enum1::S3, self::Enum1::S4, self::Enum1::S5, self::Enum1::S6, self::Enum1::S7, self::Enum1::S8>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum1.${this.{core::_Enum::_name}{core::String}}";
+}
+extension Extension<T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>> on self::Class<dynamic> {
+}
+static method method1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void
+  ;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///bounds_type_parameters.dart:129:6 -> ListConstant(const <Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>*>[const Enum1<ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*>{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_type_parameters.dart:147:3 -> InstanceConstant(const Enum1<ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*>{_Enum.index: 0, _Enum._name: "a"})
+Extra constant evaluation: evaluated: 7, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.transformed.expect
new file mode 100644
index 0000000..9bede0a
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.transformed.expect
@@ -0,0 +1,634 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:14:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//         T1 extends F, // Error
+//         ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:22:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//         S1 extends G, // Error
+//         ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:34:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:42:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:53:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:61:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:72:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:80:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:91:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:99:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:110:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:118:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:130:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:138:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:186:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+//     T1 extends F, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+//           ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:194:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+//     S1 extends G, // Error
+//     ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:20:20: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//         T7 extends F<Object>, // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:21:20: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//         T8 extends F<int>, // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:28:20: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//         S7 extends G<Object>, // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:29:20: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//         S8 extends G<int> // Error
+//                    ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:40:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:41:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:48:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:49:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:59:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:60:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:67:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:68:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:78:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:79:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:86:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:87:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:97:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:98:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:105:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:106:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:116:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:117:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:124:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:125:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:136:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:137:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:144:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:145:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:173:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:174:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:181:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:182:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:192:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T7 extends F<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:193:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     T8 extends F<int>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:200:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S7 extends G<Object>, // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:201:16: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     S8 extends G<int> // Error
+//                ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:147:3: Error: Type argument 'ConcreteClass' doesn't conform to the bound 'int' of the type variable 'T8' on 'Enum1'.
+//  - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   a<
+//   ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:137:5: Context: This is the type variable whose bound isn't conformed to.
+//     T8 extends F<int>, // Error
+//     ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:147:3: Error: Type argument 'G<ConcreteClass>' doesn't conform to the bound 'G<int>' of the type variable 'S8' on 'Enum1'.
+//  - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+//  - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   a<
+//   ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:145:5: Context: This is the type variable whose bound isn't conformed to.
+//     S8 extends G<int> // Error
+//     ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:212:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       T7 extends F<Object>, // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:213:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       T8 extends F<int>, // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:220:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       S7 extends G<Object>, // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:221:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       S8 extends G<int> // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:230:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       T7 extends F<Object>, // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:231:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       T8 extends F<int>, // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:238:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       S7 extends G<Object>, // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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_type_parameters.dart:239:18: 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_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//       S8 extends G<int> // Error
+//                  ^
+// pkg/front_end/testcases/general/bounds_type_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;
+typedef Typedef1<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
+typedef Typedef2 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void;
+typedef Typedef3<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
+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<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class1<self::Class1::T1, self::Class1::T2%, self::Class1::T3, self::Class1::T4, self::Class1::T5, self::Class1::T6, self::Class1::T7, self::Class1::T8, self::Class1::S1, self::Class1::S2, self::Class1::S3, self::Class1::S4, self::Class1::S5, self::Class1::S6, self::Class1::S7, self::Class1::S8>
+    : super core::Object::•()
+    ;
+}
+class Class2<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object implements self::Class<dynamic> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Class2<self::Class2::T1, self::Class2::T2%, self::Class2::T3, self::Class2::T4, self::Class2::T5, self::Class2::T6, self::Class2::T7, self::Class2::T8, self::Class2::S1, self::Class2::S2, self::Class2::S3, self::Class2::S4, self::Class2::S5, self::Class2::S6, self::Class2::S7, self::Class2::S8>
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object /*isMixinDeclaration*/  {
+}
+class Enum1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>> values = #C4;
+  static const field self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>> a = #C3;
+  const constructor •(core::int index, core::String name) → self::Enum1<self::Enum1::T1, self::Enum1::T2%, self::Enum1::T3, self::Enum1::T4, self::Enum1::T5, self::Enum1::T6, self::Enum1::T7, self::Enum1::T8, self::Enum1::S1, self::Enum1::S2, self::Enum1::S3, self::Enum1::S4, self::Enum1::S5, self::Enum1::S6, self::Enum1::S7, self::Enum1::S8>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum1.${this.{core::_Enum::_name}{core::String}}";
+}
+extension Extension<T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>> on self::Class<dynamic> {
+}
+static method method1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void {}
+static method test() → dynamic {
+  function local1<T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>>() → void {}
+  <T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>>() → void local;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::Enum1<self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*> {index:#C1, _name:#C2}
+  #C4 = <self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///bounds_type_parameters.dart:
+- Enum1. (from org-dartlang-testcase:///bounds_type_parameters.dart:129:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/bounds_variables.dart b/pkg/front_end/testcases/general/bounds_variables.dart
new file mode 100644
index 0000000..244219f
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_variables.dart
@@ -0,0 +1,110 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+test1() {
+  F local1a, local1b; // Ok
+  F<dynamic> local2a, local2b; // Ok
+  F<Class> local3a, local3b; // Ok
+  F<Class<dynamic>> local4a, local4b; // Ok
+  F<ConcreteClass> local5a, local5b; // Ok
+  F<Class<ConcreteClass>> local6a, local6b; // Ok
+  F<Object> local7a, local7b; // Error
+  F<int> local8a, local8b; // Error
+  G local1c, local1d; // Ok
+  G<dynamic> local2c, local2d; // Ok
+  G<Class> local3c, local3d; // Ok
+  G<Class<dynamic>> local4c, local4d; // Ok
+  G<ConcreteClass> local5c, local5d; // Ok
+  G<Class<ConcreteClass>> local6c, local6d; // Ok
+  G<Object> local7c, local8d; // Error
+  G<int> local8c, local7d; // Error
+}
+
+test2() {
+  void Function(F) local1a, local1b; // Ok
+  void Function(F<dynamic>) local2a, local2b; // Ok
+  void Function(F<Class>) local3a, local3b; // Ok
+  void Function(F<Class<dynamic>>) local4a, local4b; // Ok
+  void Function(F<ConcreteClass>) local5a, local5b; // Ok
+  void Function(F<Class<ConcreteClass>>) local6a, local6b; // Ok
+  void Function(F<Object>) local7a, local7b; // Error
+  void Function(F<int>) local8a, local8b; // Error
+  void Function(G) local1c, local1d; // Ok
+  void Function(G<dynamic>) local2c, local2d; // Ok
+  void Function(G<Class>) local3c, local3d; // Ok
+  void Function(G<Class<dynamic>>) local4c, local4d; // Ok
+  void Function(G<ConcreteClass>) local5c, local5d; // Ok
+  void Function(G<Class<ConcreteClass>>) local6c, local6d; // Ok
+  void Function(G<Object>) local7c, local8d; // Error
+  void Function(G<int>) local8c, local7d; // Error
+}
+
+test3() {
+  void Function(F f) local1a, local1b; // Ok
+  void Function(F<dynamic> f) local2a, local2b; // Ok
+  void Function(F<Class> f) local3a, local3b; // Ok
+  void Function(F<Class<dynamic>> f) local4a, local4b; // Ok
+  void Function(F<ConcreteClass> f) local5a, local5b; // Ok
+  void Function(F<Class<ConcreteClass>> f) local6a, local6b; // Ok
+  void Function(F<Object> f) local7a, local7b; // Error
+  void Function(F<int> f) local8a, local8b; // Error
+  void Function(G g) local1c, local1d; // Ok
+  void Function(G<dynamic> g) local2c, local2d; // Ok
+  void Function(G<Class> g) local3c, local3d; // Ok
+  void Function(G<Class<dynamic>> g) local4c, local4d; // Ok
+  void Function(G<ConcreteClass> g) local5c, local5d; // Ok
+  void Function(G<Class<ConcreteClass>> g) local6c, local6d; // Ok
+  void Function(G<Object> g) local7c, local8d; // Error
+  void Function(G<int> g) local8c, local7d; // Error
+}
+
+test4() {
+  void Function(void Function(F)) local1a, local1b; // Ok
+  void Function(void Function(F<dynamic>)) local2a, local2b; // Ok
+  void Function(void Function(F<Class>)) local3a, local3b; // Ok
+  void Function(void Function(F<Class<dynamic>>)) local4a, local4b; // Ok
+  void Function(void Function(F<ConcreteClass>)) local5a, local5b; // Ok
+  void Function(void Function(F<Class<ConcreteClass>>)) local6a, local6b; // Ok
+  void Function(void Function(F<Object>)) local7a, local7b; // Error
+  void Function(void Function(F<int>)) local8a, local8b; // Error
+  void Function(void Function(G)) local1c, local1d; // Ok
+  void Function(void Function(G<dynamic>)) local2c, local2d; // Ok
+  void Function(void Function(G<Class>)) local3c, local3d; // Ok
+  void Function(void Function(G<Class<dynamic>>)) local4c, local4d; // Ok
+  void Function(void Function(G<ConcreteClass>)) local5c, local5d; // Ok
+  void Function(void Function(G<Class<ConcreteClass>>)) local6c, local6d; // Ok
+  void Function(void Function(G<Object>)) local7c, local8d; // Error
+  void Function(void Function(G<int>)) local8c, local7d; // Error
+}
+
+test5() {
+  void Function(void Function(F f) f) local1a, local1b; // Ok
+  void Function(void Function(F<dynamic> f) f) local2a, local2b; // Ok
+  void Function(void Function(F<Class> f) f) local3a, local3b; // Ok
+  void Function(void Function(F<Class<dynamic>> f) f) local4a, local4b; // Ok
+  void Function(void Function(F<ConcreteClass> f) f) local5a, local5b; // Ok
+  void Function(void Function(F<Class<ConcreteClass>> f) f) local6a,
+      local6b; // Ok
+  void Function(void Function(F<Object> f) f) local7a, local7b; // Error
+  void Function(void Function(F<int> f) f) local8a, local8b; // Error
+  void Function(void Function(G g) g) local1c, local1d; // Ok
+  void Function(void Function(G<dynamic> g) g) local2c, local2d; // Ok
+  void Function(void Function(G<Class> g) g) local3c, local3d; // Ok
+  void Function(void Function(G<Class<dynamic>> g) g) local4c, local4d; // Ok
+  void Function(void Function(G<ConcreteClass> g) g) local5c, local5d; // Ok
+  void Function(void Function(G<Class<ConcreteClass>> g) g) local6c,
+      local6d; // Ok
+  void Function(void Function(G<Object> g) g) local7c, local8d; // Error
+  void Function(void Function(G<int> g) g) local8c, local7d; // Error
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_variables.dart.textual_outline.expect b/pkg/front_end/testcases/general/bounds_variables.dart.textual_outline.expect
new file mode 100644
index 0000000..27ec92e
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_variables.dart.textual_outline.expect
@@ -0,0 +1,14 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+typedef F<X extends Class<X>> = X;
+
+class G<X extends Class<X>> {}
+
+test1() {}
+test2() {}
+test3() {}
+test4() {}
+test5() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/bounds_variables.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bounds_variables.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..61c13bb
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_variables.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+class Class<T> {}
+
+class ConcreteClass implements Class<ConcreteClass> {}
+
+class G<X extends Class<X>> {}
+
+main() {}
+test1() {}
+test2() {}
+test3() {}
+test4() {}
+test5() {}
+typedef F<X extends Class<X>> = X;
diff --git a/pkg/front_end/testcases/general/bounds_variables.dart.weak.expect b/pkg/front_end/testcases/general/bounds_variables.dart.weak.expect
new file mode 100644
index 0000000..e0d7046
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_variables.dart.weak.expect
@@ -0,0 +1,384 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<Object> local7a, local7b; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<int> local8a, local8b; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:28: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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<Object> local7c, local8d; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:29: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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<int> local8c, local7d; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:39:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(F<Object>) local7a, local7b; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:40:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(F<int>) local8a, local8b; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:47:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(G<Object>) local7c, local8d; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:48:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(G<int>) local8c, local7d; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:58:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(F<Object> f) local7a, local7b; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:59:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(F<int> f) local8a, local8b; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:66:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(G<Object> g) local7c, local8d; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:67:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(G<int> g) local8c, local7d; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:77:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(F<Object>)) local7a, local7b; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:78:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(F<int>)) local8a, local8b; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:85:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(G<Object>)) local7c, local8d; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:86:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(G<int>)) local8c, local7d; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:97:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(F<Object> f) f) local7a, local7b; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:98:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(F<int> f) f) local8a, local8b; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:106:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(G<Object> g) g) local7c, local8d; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:107:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(G<int> g) g) local8c, local7d; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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 test1() → dynamic {
+  self::Class<dynamic> local1a;
+  self::Class<dynamic> local1b;
+  dynamic local2a;
+  dynamic local2b;
+  self::Class<dynamic> local3a;
+  self::Class<dynamic> local3b;
+  self::Class<dynamic> local4a;
+  self::Class<dynamic> local4b;
+  self::ConcreteClass local5a;
+  self::ConcreteClass local5b;
+  self::Class<self::ConcreteClass> local6a;
+  self::Class<self::ConcreteClass> local6b;
+  core::Object local7a;
+  core::Object local7b;
+  core::int local8a;
+  core::int local8b;
+  self::G<self::Class<dynamic>> local1c;
+  self::G<self::Class<dynamic>> local1d;
+  self::G<dynamic> local2c;
+  self::G<dynamic> local2d;
+  self::G<self::Class<dynamic>> local3c;
+  self::G<self::Class<dynamic>> local3d;
+  self::G<self::Class<dynamic>> local4c;
+  self::G<self::Class<dynamic>> local4d;
+  self::G<self::ConcreteClass> local5c;
+  self::G<self::ConcreteClass> local5d;
+  self::G<self::Class<self::ConcreteClass>> local6c;
+  self::G<self::Class<self::ConcreteClass>> local6d;
+  self::G<core::Object> local7c;
+  self::G<core::Object> local8d;
+  self::G<core::int> local8c;
+  self::G<core::int> local7d;
+}
+static method test2() → dynamic {
+  (self::Class<dynamic>) → void local1a;
+  (self::Class<dynamic>) → void local1b;
+  (dynamic) → void local2a;
+  (dynamic) → void local2b;
+  (self::Class<dynamic>) → void local3a;
+  (self::Class<dynamic>) → void local3b;
+  (self::Class<dynamic>) → void local4a;
+  (self::Class<dynamic>) → void local4b;
+  (self::ConcreteClass) → void local5a;
+  (self::ConcreteClass) → void local5b;
+  (self::Class<self::ConcreteClass>) → void local6a;
+  (self::Class<self::ConcreteClass>) → void local6b;
+  (core::Object) → void local7a;
+  (core::Object) → void local7b;
+  (core::int) → void local8a;
+  (core::int) → void local8b;
+  (self::G<self::Class<dynamic>>) → void local1c;
+  (self::G<self::Class<dynamic>>) → void local1d;
+  (self::G<dynamic>) → void local2c;
+  (self::G<dynamic>) → void local2d;
+  (self::G<self::Class<dynamic>>) → void local3c;
+  (self::G<self::Class<dynamic>>) → void local3d;
+  (self::G<self::Class<dynamic>>) → void local4c;
+  (self::G<self::Class<dynamic>>) → void local4d;
+  (self::G<self::ConcreteClass>) → void local5c;
+  (self::G<self::ConcreteClass>) → void local5d;
+  (self::G<self::Class<self::ConcreteClass>>) → void local6c;
+  (self::G<self::Class<self::ConcreteClass>>) → void local6d;
+  (self::G<core::Object>) → void local7c;
+  (self::G<core::Object>) → void local8d;
+  (self::G<core::int>) → void local8c;
+  (self::G<core::int>) → void local7d;
+}
+static method test3() → dynamic {
+  (self::Class<dynamic>) → void local1a;
+  (self::Class<dynamic>) → void local1b;
+  (dynamic) → void local2a;
+  (dynamic) → void local2b;
+  (self::Class<dynamic>) → void local3a;
+  (self::Class<dynamic>) → void local3b;
+  (self::Class<dynamic>) → void local4a;
+  (self::Class<dynamic>) → void local4b;
+  (self::ConcreteClass) → void local5a;
+  (self::ConcreteClass) → void local5b;
+  (self::Class<self::ConcreteClass>) → void local6a;
+  (self::Class<self::ConcreteClass>) → void local6b;
+  (core::Object) → void local7a;
+  (core::Object) → void local7b;
+  (core::int) → void local8a;
+  (core::int) → void local8b;
+  (self::G<self::Class<dynamic>>) → void local1c;
+  (self::G<self::Class<dynamic>>) → void local1d;
+  (self::G<dynamic>) → void local2c;
+  (self::G<dynamic>) → void local2d;
+  (self::G<self::Class<dynamic>>) → void local3c;
+  (self::G<self::Class<dynamic>>) → void local3d;
+  (self::G<self::Class<dynamic>>) → void local4c;
+  (self::G<self::Class<dynamic>>) → void local4d;
+  (self::G<self::ConcreteClass>) → void local5c;
+  (self::G<self::ConcreteClass>) → void local5d;
+  (self::G<self::Class<self::ConcreteClass>>) → void local6c;
+  (self::G<self::Class<self::ConcreteClass>>) → void local6d;
+  (self::G<core::Object>) → void local7c;
+  (self::G<core::Object>) → void local8d;
+  (self::G<core::int>) → void local8c;
+  (self::G<core::int>) → void local7d;
+}
+static method test4() → dynamic {
+  ((self::Class<dynamic>) → void) → void local1a;
+  ((self::Class<dynamic>) → void) → void local1b;
+  ((dynamic) → void) → void local2a;
+  ((dynamic) → void) → void local2b;
+  ((self::Class<dynamic>) → void) → void local3a;
+  ((self::Class<dynamic>) → void) → void local3b;
+  ((self::Class<dynamic>) → void) → void local4a;
+  ((self::Class<dynamic>) → void) → void local4b;
+  ((self::ConcreteClass) → void) → void local5a;
+  ((self::ConcreteClass) → void) → void local5b;
+  ((self::Class<self::ConcreteClass>) → void) → void local6a;
+  ((self::Class<self::ConcreteClass>) → void) → void local6b;
+  ((core::Object) → void) → void local7a;
+  ((core::Object) → void) → void local7b;
+  ((core::int) → void) → void local8a;
+  ((core::int) → void) → void local8b;
+  ((self::G<self::Class<dynamic>>) → void) → void local1c;
+  ((self::G<self::Class<dynamic>>) → void) → void local1d;
+  ((self::G<dynamic>) → void) → void local2c;
+  ((self::G<dynamic>) → void) → void local2d;
+  ((self::G<self::Class<dynamic>>) → void) → void local3c;
+  ((self::G<self::Class<dynamic>>) → void) → void local3d;
+  ((self::G<self::Class<dynamic>>) → void) → void local4c;
+  ((self::G<self::Class<dynamic>>) → void) → void local4d;
+  ((self::G<self::ConcreteClass>) → void) → void local5c;
+  ((self::G<self::ConcreteClass>) → void) → void local5d;
+  ((self::G<self::Class<self::ConcreteClass>>) → void) → void local6c;
+  ((self::G<self::Class<self::ConcreteClass>>) → void) → void local6d;
+  ((self::G<core::Object>) → void) → void local7c;
+  ((self::G<core::Object>) → void) → void local8d;
+  ((self::G<core::int>) → void) → void local8c;
+  ((self::G<core::int>) → void) → void local7d;
+}
+static method test5() → dynamic {
+  ((self::Class<dynamic>) → void) → void local1a;
+  ((self::Class<dynamic>) → void) → void local1b;
+  ((dynamic) → void) → void local2a;
+  ((dynamic) → void) → void local2b;
+  ((self::Class<dynamic>) → void) → void local3a;
+  ((self::Class<dynamic>) → void) → void local3b;
+  ((self::Class<dynamic>) → void) → void local4a;
+  ((self::Class<dynamic>) → void) → void local4b;
+  ((self::ConcreteClass) → void) → void local5a;
+  ((self::ConcreteClass) → void) → void local5b;
+  ((self::Class<self::ConcreteClass>) → void) → void local6a;
+  ((self::Class<self::ConcreteClass>) → void) → void local6b;
+  ((core::Object) → void) → void local7a;
+  ((core::Object) → void) → void local7b;
+  ((core::int) → void) → void local8a;
+  ((core::int) → void) → void local8b;
+  ((self::G<self::Class<dynamic>>) → void) → void local1c;
+  ((self::G<self::Class<dynamic>>) → void) → void local1d;
+  ((self::G<dynamic>) → void) → void local2c;
+  ((self::G<dynamic>) → void) → void local2d;
+  ((self::G<self::Class<dynamic>>) → void) → void local3c;
+  ((self::G<self::Class<dynamic>>) → void) → void local3d;
+  ((self::G<self::Class<dynamic>>) → void) → void local4c;
+  ((self::G<self::Class<dynamic>>) → void) → void local4d;
+  ((self::G<self::ConcreteClass>) → void) → void local5c;
+  ((self::G<self::ConcreteClass>) → void) → void local5d;
+  ((self::G<self::Class<self::ConcreteClass>>) → void) → void local6c;
+  ((self::G<self::Class<self::ConcreteClass>>) → void) → void local6d;
+  ((self::G<core::Object>) → void) → void local7c;
+  ((self::G<core::Object>) → void) → void local8d;
+  ((self::G<core::int>) → void) → void local8c;
+  ((self::G<core::int>) → void) → void local7d;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_variables.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_variables.dart.weak.modular.expect
new file mode 100644
index 0000000..e0d7046
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_variables.dart.weak.modular.expect
@@ -0,0 +1,384 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<Object> local7a, local7b; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<int> local8a, local8b; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:28: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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<Object> local7c, local8d; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:29: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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<int> local8c, local7d; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:39:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(F<Object>) local7a, local7b; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:40:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(F<int>) local8a, local8b; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:47:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(G<Object>) local7c, local8d; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:48:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(G<int>) local8c, local7d; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:58:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(F<Object> f) local7a, local7b; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:59:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(F<int> f) local8a, local8b; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:66:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(G<Object> g) local7c, local8d; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:67:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(G<int> g) local8c, local7d; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:77:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(F<Object>)) local7a, local7b; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:78:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(F<int>)) local8a, local8b; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:85:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(G<Object>)) local7c, local8d; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:86:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(G<int>)) local8c, local7d; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:97:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(F<Object> f) f) local7a, local7b; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:98:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(F<int> f) f) local8a, local8b; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:106:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(G<Object> g) g) local7c, local8d; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:107:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(G<int> g) g) local8c, local7d; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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 test1() → dynamic {
+  self::Class<dynamic> local1a;
+  self::Class<dynamic> local1b;
+  dynamic local2a;
+  dynamic local2b;
+  self::Class<dynamic> local3a;
+  self::Class<dynamic> local3b;
+  self::Class<dynamic> local4a;
+  self::Class<dynamic> local4b;
+  self::ConcreteClass local5a;
+  self::ConcreteClass local5b;
+  self::Class<self::ConcreteClass> local6a;
+  self::Class<self::ConcreteClass> local6b;
+  core::Object local7a;
+  core::Object local7b;
+  core::int local8a;
+  core::int local8b;
+  self::G<self::Class<dynamic>> local1c;
+  self::G<self::Class<dynamic>> local1d;
+  self::G<dynamic> local2c;
+  self::G<dynamic> local2d;
+  self::G<self::Class<dynamic>> local3c;
+  self::G<self::Class<dynamic>> local3d;
+  self::G<self::Class<dynamic>> local4c;
+  self::G<self::Class<dynamic>> local4d;
+  self::G<self::ConcreteClass> local5c;
+  self::G<self::ConcreteClass> local5d;
+  self::G<self::Class<self::ConcreteClass>> local6c;
+  self::G<self::Class<self::ConcreteClass>> local6d;
+  self::G<core::Object> local7c;
+  self::G<core::Object> local8d;
+  self::G<core::int> local8c;
+  self::G<core::int> local7d;
+}
+static method test2() → dynamic {
+  (self::Class<dynamic>) → void local1a;
+  (self::Class<dynamic>) → void local1b;
+  (dynamic) → void local2a;
+  (dynamic) → void local2b;
+  (self::Class<dynamic>) → void local3a;
+  (self::Class<dynamic>) → void local3b;
+  (self::Class<dynamic>) → void local4a;
+  (self::Class<dynamic>) → void local4b;
+  (self::ConcreteClass) → void local5a;
+  (self::ConcreteClass) → void local5b;
+  (self::Class<self::ConcreteClass>) → void local6a;
+  (self::Class<self::ConcreteClass>) → void local6b;
+  (core::Object) → void local7a;
+  (core::Object) → void local7b;
+  (core::int) → void local8a;
+  (core::int) → void local8b;
+  (self::G<self::Class<dynamic>>) → void local1c;
+  (self::G<self::Class<dynamic>>) → void local1d;
+  (self::G<dynamic>) → void local2c;
+  (self::G<dynamic>) → void local2d;
+  (self::G<self::Class<dynamic>>) → void local3c;
+  (self::G<self::Class<dynamic>>) → void local3d;
+  (self::G<self::Class<dynamic>>) → void local4c;
+  (self::G<self::Class<dynamic>>) → void local4d;
+  (self::G<self::ConcreteClass>) → void local5c;
+  (self::G<self::ConcreteClass>) → void local5d;
+  (self::G<self::Class<self::ConcreteClass>>) → void local6c;
+  (self::G<self::Class<self::ConcreteClass>>) → void local6d;
+  (self::G<core::Object>) → void local7c;
+  (self::G<core::Object>) → void local8d;
+  (self::G<core::int>) → void local8c;
+  (self::G<core::int>) → void local7d;
+}
+static method test3() → dynamic {
+  (self::Class<dynamic>) → void local1a;
+  (self::Class<dynamic>) → void local1b;
+  (dynamic) → void local2a;
+  (dynamic) → void local2b;
+  (self::Class<dynamic>) → void local3a;
+  (self::Class<dynamic>) → void local3b;
+  (self::Class<dynamic>) → void local4a;
+  (self::Class<dynamic>) → void local4b;
+  (self::ConcreteClass) → void local5a;
+  (self::ConcreteClass) → void local5b;
+  (self::Class<self::ConcreteClass>) → void local6a;
+  (self::Class<self::ConcreteClass>) → void local6b;
+  (core::Object) → void local7a;
+  (core::Object) → void local7b;
+  (core::int) → void local8a;
+  (core::int) → void local8b;
+  (self::G<self::Class<dynamic>>) → void local1c;
+  (self::G<self::Class<dynamic>>) → void local1d;
+  (self::G<dynamic>) → void local2c;
+  (self::G<dynamic>) → void local2d;
+  (self::G<self::Class<dynamic>>) → void local3c;
+  (self::G<self::Class<dynamic>>) → void local3d;
+  (self::G<self::Class<dynamic>>) → void local4c;
+  (self::G<self::Class<dynamic>>) → void local4d;
+  (self::G<self::ConcreteClass>) → void local5c;
+  (self::G<self::ConcreteClass>) → void local5d;
+  (self::G<self::Class<self::ConcreteClass>>) → void local6c;
+  (self::G<self::Class<self::ConcreteClass>>) → void local6d;
+  (self::G<core::Object>) → void local7c;
+  (self::G<core::Object>) → void local8d;
+  (self::G<core::int>) → void local8c;
+  (self::G<core::int>) → void local7d;
+}
+static method test4() → dynamic {
+  ((self::Class<dynamic>) → void) → void local1a;
+  ((self::Class<dynamic>) → void) → void local1b;
+  ((dynamic) → void) → void local2a;
+  ((dynamic) → void) → void local2b;
+  ((self::Class<dynamic>) → void) → void local3a;
+  ((self::Class<dynamic>) → void) → void local3b;
+  ((self::Class<dynamic>) → void) → void local4a;
+  ((self::Class<dynamic>) → void) → void local4b;
+  ((self::ConcreteClass) → void) → void local5a;
+  ((self::ConcreteClass) → void) → void local5b;
+  ((self::Class<self::ConcreteClass>) → void) → void local6a;
+  ((self::Class<self::ConcreteClass>) → void) → void local6b;
+  ((core::Object) → void) → void local7a;
+  ((core::Object) → void) → void local7b;
+  ((core::int) → void) → void local8a;
+  ((core::int) → void) → void local8b;
+  ((self::G<self::Class<dynamic>>) → void) → void local1c;
+  ((self::G<self::Class<dynamic>>) → void) → void local1d;
+  ((self::G<dynamic>) → void) → void local2c;
+  ((self::G<dynamic>) → void) → void local2d;
+  ((self::G<self::Class<dynamic>>) → void) → void local3c;
+  ((self::G<self::Class<dynamic>>) → void) → void local3d;
+  ((self::G<self::Class<dynamic>>) → void) → void local4c;
+  ((self::G<self::Class<dynamic>>) → void) → void local4d;
+  ((self::G<self::ConcreteClass>) → void) → void local5c;
+  ((self::G<self::ConcreteClass>) → void) → void local5d;
+  ((self::G<self::Class<self::ConcreteClass>>) → void) → void local6c;
+  ((self::G<self::Class<self::ConcreteClass>>) → void) → void local6d;
+  ((self::G<core::Object>) → void) → void local7c;
+  ((self::G<core::Object>) → void) → void local8d;
+  ((self::G<core::int>) → void) → void local8c;
+  ((self::G<core::int>) → void) → void local7d;
+}
+static method test5() → dynamic {
+  ((self::Class<dynamic>) → void) → void local1a;
+  ((self::Class<dynamic>) → void) → void local1b;
+  ((dynamic) → void) → void local2a;
+  ((dynamic) → void) → void local2b;
+  ((self::Class<dynamic>) → void) → void local3a;
+  ((self::Class<dynamic>) → void) → void local3b;
+  ((self::Class<dynamic>) → void) → void local4a;
+  ((self::Class<dynamic>) → void) → void local4b;
+  ((self::ConcreteClass) → void) → void local5a;
+  ((self::ConcreteClass) → void) → void local5b;
+  ((self::Class<self::ConcreteClass>) → void) → void local6a;
+  ((self::Class<self::ConcreteClass>) → void) → void local6b;
+  ((core::Object) → void) → void local7a;
+  ((core::Object) → void) → void local7b;
+  ((core::int) → void) → void local8a;
+  ((core::int) → void) → void local8b;
+  ((self::G<self::Class<dynamic>>) → void) → void local1c;
+  ((self::G<self::Class<dynamic>>) → void) → void local1d;
+  ((self::G<dynamic>) → void) → void local2c;
+  ((self::G<dynamic>) → void) → void local2d;
+  ((self::G<self::Class<dynamic>>) → void) → void local3c;
+  ((self::G<self::Class<dynamic>>) → void) → void local3d;
+  ((self::G<self::Class<dynamic>>) → void) → void local4c;
+  ((self::G<self::Class<dynamic>>) → void) → void local4d;
+  ((self::G<self::ConcreteClass>) → void) → void local5c;
+  ((self::G<self::ConcreteClass>) → void) → void local5d;
+  ((self::G<self::Class<self::ConcreteClass>>) → void) → void local6c;
+  ((self::G<self::Class<self::ConcreteClass>>) → void) → void local6d;
+  ((self::G<core::Object>) → void) → void local7c;
+  ((self::G<core::Object>) → void) → void local8d;
+  ((self::G<core::int>) → void) → void local8c;
+  ((self::G<core::int>) → void) → void local7d;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_variables.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_variables.dart.weak.outline.expect
new file mode 100644
index 0000000..786cea6
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_variables.dart.weak.outline.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+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>
+    ;
+}
+static method test1() → dynamic
+  ;
+static method test2() → dynamic
+  ;
+static method test3() → dynamic
+  ;
+static method test4() → dynamic
+  ;
+static method test5() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/bounds_variables.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_variables.dart.weak.transformed.expect
new file mode 100644
index 0000000..e0d7046
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_variables.dart.weak.transformed.expect
@@ -0,0 +1,384 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<Object> local7a, local7b; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<int> local8a, local8b; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:28: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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<Object> local7c, local8d; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:29: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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   G<int> local8c, local7d; // Error
+//   ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:39:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(F<Object>) local7a, local7b; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:40:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(F<int>) local8a, local8b; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:47:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(G<Object>) local7c, local8d; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:48:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(G<int>) local8c, local7d; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:58:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(F<Object> f) local7a, local7b; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:59:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(F<int> f) local8a, local8b; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:66:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(G<Object> g) local7c, local8d; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:67:17: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(G<int> g) local8c, local7d; // Error
+//                 ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:77:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(F<Object>)) local7a, local7b; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:78:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(F<int>)) local8a, local8b; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:85:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(G<Object>)) local7c, local8d; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:86:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(G<int>)) local8c, local7d; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:97:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(F<Object> f) f) local7a, local7b; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:98:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(F<int> f) f) local8a, local8b; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:106:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(G<Object> g) g) local7c, local8d; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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_variables.dart:107:31: 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_variables.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void Function(void Function(G<int> g) g) local8c, local7d; // Error
+//                               ^
+// pkg/front_end/testcases/general/bounds_variables.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 test1() → dynamic {
+  self::Class<dynamic> local1a;
+  self::Class<dynamic> local1b;
+  dynamic local2a;
+  dynamic local2b;
+  self::Class<dynamic> local3a;
+  self::Class<dynamic> local3b;
+  self::Class<dynamic> local4a;
+  self::Class<dynamic> local4b;
+  self::ConcreteClass local5a;
+  self::ConcreteClass local5b;
+  self::Class<self::ConcreteClass> local6a;
+  self::Class<self::ConcreteClass> local6b;
+  core::Object local7a;
+  core::Object local7b;
+  core::int local8a;
+  core::int local8b;
+  self::G<self::Class<dynamic>> local1c;
+  self::G<self::Class<dynamic>> local1d;
+  self::G<dynamic> local2c;
+  self::G<dynamic> local2d;
+  self::G<self::Class<dynamic>> local3c;
+  self::G<self::Class<dynamic>> local3d;
+  self::G<self::Class<dynamic>> local4c;
+  self::G<self::Class<dynamic>> local4d;
+  self::G<self::ConcreteClass> local5c;
+  self::G<self::ConcreteClass> local5d;
+  self::G<self::Class<self::ConcreteClass>> local6c;
+  self::G<self::Class<self::ConcreteClass>> local6d;
+  self::G<core::Object> local7c;
+  self::G<core::Object> local8d;
+  self::G<core::int> local8c;
+  self::G<core::int> local7d;
+}
+static method test2() → dynamic {
+  (self::Class<dynamic>) → void local1a;
+  (self::Class<dynamic>) → void local1b;
+  (dynamic) → void local2a;
+  (dynamic) → void local2b;
+  (self::Class<dynamic>) → void local3a;
+  (self::Class<dynamic>) → void local3b;
+  (self::Class<dynamic>) → void local4a;
+  (self::Class<dynamic>) → void local4b;
+  (self::ConcreteClass) → void local5a;
+  (self::ConcreteClass) → void local5b;
+  (self::Class<self::ConcreteClass>) → void local6a;
+  (self::Class<self::ConcreteClass>) → void local6b;
+  (core::Object) → void local7a;
+  (core::Object) → void local7b;
+  (core::int) → void local8a;
+  (core::int) → void local8b;
+  (self::G<self::Class<dynamic>>) → void local1c;
+  (self::G<self::Class<dynamic>>) → void local1d;
+  (self::G<dynamic>) → void local2c;
+  (self::G<dynamic>) → void local2d;
+  (self::G<self::Class<dynamic>>) → void local3c;
+  (self::G<self::Class<dynamic>>) → void local3d;
+  (self::G<self::Class<dynamic>>) → void local4c;
+  (self::G<self::Class<dynamic>>) → void local4d;
+  (self::G<self::ConcreteClass>) → void local5c;
+  (self::G<self::ConcreteClass>) → void local5d;
+  (self::G<self::Class<self::ConcreteClass>>) → void local6c;
+  (self::G<self::Class<self::ConcreteClass>>) → void local6d;
+  (self::G<core::Object>) → void local7c;
+  (self::G<core::Object>) → void local8d;
+  (self::G<core::int>) → void local8c;
+  (self::G<core::int>) → void local7d;
+}
+static method test3() → dynamic {
+  (self::Class<dynamic>) → void local1a;
+  (self::Class<dynamic>) → void local1b;
+  (dynamic) → void local2a;
+  (dynamic) → void local2b;
+  (self::Class<dynamic>) → void local3a;
+  (self::Class<dynamic>) → void local3b;
+  (self::Class<dynamic>) → void local4a;
+  (self::Class<dynamic>) → void local4b;
+  (self::ConcreteClass) → void local5a;
+  (self::ConcreteClass) → void local5b;
+  (self::Class<self::ConcreteClass>) → void local6a;
+  (self::Class<self::ConcreteClass>) → void local6b;
+  (core::Object) → void local7a;
+  (core::Object) → void local7b;
+  (core::int) → void local8a;
+  (core::int) → void local8b;
+  (self::G<self::Class<dynamic>>) → void local1c;
+  (self::G<self::Class<dynamic>>) → void local1d;
+  (self::G<dynamic>) → void local2c;
+  (self::G<dynamic>) → void local2d;
+  (self::G<self::Class<dynamic>>) → void local3c;
+  (self::G<self::Class<dynamic>>) → void local3d;
+  (self::G<self::Class<dynamic>>) → void local4c;
+  (self::G<self::Class<dynamic>>) → void local4d;
+  (self::G<self::ConcreteClass>) → void local5c;
+  (self::G<self::ConcreteClass>) → void local5d;
+  (self::G<self::Class<self::ConcreteClass>>) → void local6c;
+  (self::G<self::Class<self::ConcreteClass>>) → void local6d;
+  (self::G<core::Object>) → void local7c;
+  (self::G<core::Object>) → void local8d;
+  (self::G<core::int>) → void local8c;
+  (self::G<core::int>) → void local7d;
+}
+static method test4() → dynamic {
+  ((self::Class<dynamic>) → void) → void local1a;
+  ((self::Class<dynamic>) → void) → void local1b;
+  ((dynamic) → void) → void local2a;
+  ((dynamic) → void) → void local2b;
+  ((self::Class<dynamic>) → void) → void local3a;
+  ((self::Class<dynamic>) → void) → void local3b;
+  ((self::Class<dynamic>) → void) → void local4a;
+  ((self::Class<dynamic>) → void) → void local4b;
+  ((self::ConcreteClass) → void) → void local5a;
+  ((self::ConcreteClass) → void) → void local5b;
+  ((self::Class<self::ConcreteClass>) → void) → void local6a;
+  ((self::Class<self::ConcreteClass>) → void) → void local6b;
+  ((core::Object) → void) → void local7a;
+  ((core::Object) → void) → void local7b;
+  ((core::int) → void) → void local8a;
+  ((core::int) → void) → void local8b;
+  ((self::G<self::Class<dynamic>>) → void) → void local1c;
+  ((self::G<self::Class<dynamic>>) → void) → void local1d;
+  ((self::G<dynamic>) → void) → void local2c;
+  ((self::G<dynamic>) → void) → void local2d;
+  ((self::G<self::Class<dynamic>>) → void) → void local3c;
+  ((self::G<self::Class<dynamic>>) → void) → void local3d;
+  ((self::G<self::Class<dynamic>>) → void) → void local4c;
+  ((self::G<self::Class<dynamic>>) → void) → void local4d;
+  ((self::G<self::ConcreteClass>) → void) → void local5c;
+  ((self::G<self::ConcreteClass>) → void) → void local5d;
+  ((self::G<self::Class<self::ConcreteClass>>) → void) → void local6c;
+  ((self::G<self::Class<self::ConcreteClass>>) → void) → void local6d;
+  ((self::G<core::Object>) → void) → void local7c;
+  ((self::G<core::Object>) → void) → void local8d;
+  ((self::G<core::int>) → void) → void local8c;
+  ((self::G<core::int>) → void) → void local7d;
+}
+static method test5() → dynamic {
+  ((self::Class<dynamic>) → void) → void local1a;
+  ((self::Class<dynamic>) → void) → void local1b;
+  ((dynamic) → void) → void local2a;
+  ((dynamic) → void) → void local2b;
+  ((self::Class<dynamic>) → void) → void local3a;
+  ((self::Class<dynamic>) → void) → void local3b;
+  ((self::Class<dynamic>) → void) → void local4a;
+  ((self::Class<dynamic>) → void) → void local4b;
+  ((self::ConcreteClass) → void) → void local5a;
+  ((self::ConcreteClass) → void) → void local5b;
+  ((self::Class<self::ConcreteClass>) → void) → void local6a;
+  ((self::Class<self::ConcreteClass>) → void) → void local6b;
+  ((core::Object) → void) → void local7a;
+  ((core::Object) → void) → void local7b;
+  ((core::int) → void) → void local8a;
+  ((core::int) → void) → void local8b;
+  ((self::G<self::Class<dynamic>>) → void) → void local1c;
+  ((self::G<self::Class<dynamic>>) → void) → void local1d;
+  ((self::G<dynamic>) → void) → void local2c;
+  ((self::G<dynamic>) → void) → void local2d;
+  ((self::G<self::Class<dynamic>>) → void) → void local3c;
+  ((self::G<self::Class<dynamic>>) → void) → void local3d;
+  ((self::G<self::Class<dynamic>>) → void) → void local4c;
+  ((self::G<self::Class<dynamic>>) → void) → void local4d;
+  ((self::G<self::ConcreteClass>) → void) → void local5c;
+  ((self::G<self::ConcreteClass>) → void) → void local5d;
+  ((self::G<self::Class<self::ConcreteClass>>) → void) → void local6c;
+  ((self::G<self::Class<self::ConcreteClass>>) → void) → void local6d;
+  ((self::G<core::Object>) → void) → void local7c;
+  ((self::G<core::Object>) → void) → void local8d;
+  ((self::G<core::int>) → void) → void local8c;
+  ((self::G<core::int>) → void) → void local7d;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/clone_function_type.dart.weak.expect b/pkg/front_end/testcases/general/clone_function_type.dart.weak.expect
index 17fbc7c..699f60e 100644
--- a/pkg/front_end/testcases/general/clone_function_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/clone_function_type.dart.weak.expect
@@ -32,70 +32,70 @@
 // class Ef1<X extends Function({int})> {
 //                                  ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:67:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:67:34: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 // Try changing type arguments so that they conform to the bounds.
 // class Bm2<Z> extends Object with Am2<Function(int), Z> {}
-//       ^
+//                                  ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:70:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:70:34: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 // Try changing type arguments so that they conform to the bounds.
 // class Cm2<Z> extends Object with Am2<Function(int x), Z> {}
-//       ^
+//                                  ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:86:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:86:34: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 //  - 'Function' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 // class Jm2<Z> extends Object with Am2<Function, Z> {}
-//       ^
+//                                  ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:89:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:89:34: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 //  - 'Function' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 // class Km2<Z> extends Object with Am2<Function(Function Function), Z> {}
-//       ^
+//                                  ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:95:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Mm2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:95:28: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 // Try changing type arguments so that they conform to the bounds.
 // class Mm2<Z> = Object with Am2<Function(int), Z>;
-//       ^
+//                            ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:98:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Nm2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:98:28: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 // Try changing type arguments so that they conform to the bounds.
 // class Nm2<Z> = Object with Am2<Function(int x), Z>;
-//       ^
+//                            ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:114:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Um2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:114:28: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 //  - 'Function' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 // class Um2<Z> = Object with Am2<Function, Z>;
-//       ^
+//                            ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:117:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Vm2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:117:28: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 //  - 'Function' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 // class Vm2<Z> = Object with Am2<Function(Function Function), Z>;
-//       ^
+//                            ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
diff --git a/pkg/front_end/testcases/general/clone_function_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/clone_function_type.dart.weak.modular.expect
index 17fbc7c..699f60e 100644
--- a/pkg/front_end/testcases/general/clone_function_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/clone_function_type.dart.weak.modular.expect
@@ -32,70 +32,70 @@
 // class Ef1<X extends Function({int})> {
 //                                  ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:67:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:67:34: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 // Try changing type arguments so that they conform to the bounds.
 // class Bm2<Z> extends Object with Am2<Function(int), Z> {}
-//       ^
+//                                  ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:70:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:70:34: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 // Try changing type arguments so that they conform to the bounds.
 // class Cm2<Z> extends Object with Am2<Function(int x), Z> {}
-//       ^
+//                                  ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:86:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:86:34: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 //  - 'Function' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 // class Jm2<Z> extends Object with Am2<Function, Z> {}
-//       ^
+//                                  ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:89:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:89:34: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 //  - 'Function' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 // class Km2<Z> extends Object with Am2<Function(Function Function), Z> {}
-//       ^
+//                                  ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:95:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Mm2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:95:28: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 // Try changing type arguments so that they conform to the bounds.
 // class Mm2<Z> = Object with Am2<Function(int), Z>;
-//       ^
+//                            ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:98:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Nm2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:98:28: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 // Try changing type arguments so that they conform to the bounds.
 // class Nm2<Z> = Object with Am2<Function(int x), Z>;
-//       ^
+//                            ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:114:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Um2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:114:28: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 //  - 'Function' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 // class Um2<Z> = Object with Am2<Function, Z>;
-//       ^
+//                            ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:117:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Vm2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:117:28: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 //  - 'Function' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 // class Vm2<Z> = Object with Am2<Function(Function Function), Z>;
-//       ^
+//                            ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
diff --git a/pkg/front_end/testcases/general/clone_function_type.dart.weak.outline.expect b/pkg/front_end/testcases/general/clone_function_type.dart.weak.outline.expect
index 118b670..a3766e6a 100644
--- a/pkg/front_end/testcases/general/clone_function_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/clone_function_type.dart.weak.outline.expect
@@ -32,70 +32,70 @@
 // class Ef1<X extends Function({int})> {
 //                                  ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:67:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:67:34: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 // Try changing type arguments so that they conform to the bounds.
 // class Bm2<Z> extends Object with Am2<Function(int), Z> {}
-//       ^
+//                                  ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:70:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:70:34: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 // Try changing type arguments so that they conform to the bounds.
 // class Cm2<Z> extends Object with Am2<Function(int x), Z> {}
-//       ^
+//                                  ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:86:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:86:34: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 //  - 'Function' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 // class Jm2<Z> extends Object with Am2<Function, Z> {}
-//       ^
+//                                  ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:89:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:89:34: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 //  - 'Function' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 // class Km2<Z> extends Object with Am2<Function(Function Function), Z> {}
-//       ^
+//                                  ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:95:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Mm2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:95:28: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 // Try changing type arguments so that they conform to the bounds.
 // class Mm2<Z> = Object with Am2<Function(int), Z>;
-//       ^
+//                            ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:98:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Nm2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:98:28: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 // Try changing type arguments so that they conform to the bounds.
 // class Nm2<Z> = Object with Am2<Function(int x), Z>;
-//       ^
+//                            ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:114:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Um2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:114:28: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 //  - 'Function' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 // class Um2<Z> = Object with Am2<Function, Z>;
-//       ^
+//                            ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:117:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Vm2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:117:28: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 //  - 'Function' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 // class Vm2<Z> = Object with Am2<Function(Function Function), Z>;
-//       ^
+//                            ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
diff --git a/pkg/front_end/testcases/general/clone_function_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/clone_function_type.dart.weak.transformed.expect
index 44336bf..6e346c2 100644
--- a/pkg/front_end/testcases/general/clone_function_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/clone_function_type.dart.weak.transformed.expect
@@ -32,70 +32,70 @@
 // class Ef1<X extends Function({int})> {
 //                                  ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:67:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:67:34: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 // Try changing type arguments so that they conform to the bounds.
 // class Bm2<Z> extends Object with Am2<Function(int), Z> {}
-//       ^
+//                                  ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:70:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:70:34: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 // Try changing type arguments so that they conform to the bounds.
 // class Cm2<Z> extends Object with Am2<Function(int x), Z> {}
-//       ^
+//                                  ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:86:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:86:34: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 //  - 'Function' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 // class Jm2<Z> extends Object with Am2<Function, Z> {}
-//       ^
+//                                  ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:89:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:89:34: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 //  - 'Function' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 // class Km2<Z> extends Object with Am2<Function(Function Function), Z> {}
-//       ^
+//                                  ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:95:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Mm2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:95:28: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 // Try changing type arguments so that they conform to the bounds.
 // class Mm2<Z> = Object with Am2<Function(int), Z>;
-//       ^
+//                            ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:98:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Nm2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:98:28: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 // Try changing type arguments so that they conform to the bounds.
 // class Nm2<Z> = Object with Am2<Function(int x), Z>;
-//       ^
+//                            ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:114:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Um2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:114:28: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 //  - 'Function' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 // class Um2<Z> = Object with Am2<Function, Z>;
-//       ^
+//                            ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
 //
-// pkg/front_end/testcases/general/clone_function_type.dart:117:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Vm2'.
+// pkg/front_end/testcases/general/clone_function_type.dart:117:28: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2'.
 //  - 'Function' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 // class Vm2<Z> = Object with Am2<Function(Function Function), Z>;
-//       ^
+//                            ^
 // pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
 // class Am2<X extends Function(), Y> {}
 //           ^
diff --git a/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart b/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart
new file mode 100644
index 0000000..a61fd37
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart
@@ -0,0 +1,19 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart=2.12
+
+typedef F = void Function<T>();
+
+T method<T>() => throw '';
+
+test(F f) {
+  f = method();
+  var list = [f];
+  var set = {f};
+  var map1 = {f: 1};
+  var map2 = {1: f};
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart.textual_outline.expect b/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart.textual_outline.expect
new file mode 100644
index 0000000..f825256
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+// @dart = 2.12
+typedef F = void Function<T>();
+T method<T>() => throw '';
+test(F f) {}
+main() {}
diff --git a/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..edecddf
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart.textual_outline_modelled.expect
@@ -0,0 +1,5 @@
+// @dart = 2.12
+T method<T>() => throw '';
+main() {}
+test(F f) {}
+typedef F = void Function<T>();
diff --git a/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart.weak.expect b/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart.weak.expect
new file mode 100644
index 0000000..07471ec
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart.weak.expect
@@ -0,0 +1,47 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart:12:7: Error: Generic function type 'void Function<T>()' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   f = method();
+//       ^
+//
+// pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart:13:14: Error: Generic function type 'void Function<T>()' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   var list = [f];
+//              ^
+//
+// pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart:14:13: Error: Generic function type 'void Function<T>()' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   var set = {f};
+//             ^
+//
+// pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart:15:14: Error: Generic function type 'void Function<T>()' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   var map1 = {f: 1};
+//              ^
+//
+// pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart:16:14: Error: Generic function type 'void Function<T>()' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   var map2 = {1: f};
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+typedef F = <T extends core::Object? = dynamic>() → void;
+static method method<T extends core::Object? = dynamic>() → self::method::T%
+  return throw "";
+static method test(<T extends core::Object? = dynamic>() → void f) → dynamic {
+  f = self::method<<T extends core::Object? = dynamic>() → void>();
+  core::List<<T extends core::Object? = dynamic>() → void> list = <<T extends core::Object? = dynamic>() → void>[f];
+  core::Set<<T extends core::Object? = dynamic>() → void> set = block {
+    final core::Set<<T extends core::Object? = dynamic>() → void> #t1 = col::LinkedHashSet::•<<T extends core::Object? = dynamic>() → void>();
+    #t1.{core::Set::add}{Invariant}(f){(<T extends core::Object? = dynamic>() → void) → core::bool};
+  } =>#t1;
+  core::Map<<T extends core::Object? = dynamic>() → void, core::int> map1 = <<T extends core::Object? = dynamic>() → void, core::int>{f: 1};
+  core::Map<core::int, <T extends core::Object? = dynamic>() → void> map2 = <core::int, <T extends core::Object? = dynamic>() → void>{1: f};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart.weak.modular.expect b/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart.weak.modular.expect
new file mode 100644
index 0000000..07471ec
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart.weak.modular.expect
@@ -0,0 +1,47 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart:12:7: Error: Generic function type 'void Function<T>()' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   f = method();
+//       ^
+//
+// pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart:13:14: Error: Generic function type 'void Function<T>()' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   var list = [f];
+//              ^
+//
+// pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart:14:13: Error: Generic function type 'void Function<T>()' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   var set = {f};
+//             ^
+//
+// pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart:15:14: Error: Generic function type 'void Function<T>()' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   var map1 = {f: 1};
+//              ^
+//
+// pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart:16:14: Error: Generic function type 'void Function<T>()' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   var map2 = {1: f};
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+typedef F = <T extends core::Object? = dynamic>() → void;
+static method method<T extends core::Object? = dynamic>() → self::method::T%
+  return throw "";
+static method test(<T extends core::Object? = dynamic>() → void f) → dynamic {
+  f = self::method<<T extends core::Object? = dynamic>() → void>();
+  core::List<<T extends core::Object? = dynamic>() → void> list = <<T extends core::Object? = dynamic>() → void>[f];
+  core::Set<<T extends core::Object? = dynamic>() → void> set = block {
+    final core::Set<<T extends core::Object? = dynamic>() → void> #t1 = col::LinkedHashSet::•<<T extends core::Object? = dynamic>() → void>();
+    #t1.{core::Set::add}{Invariant}(f){(<T extends core::Object? = dynamic>() → void) → core::bool};
+  } =>#t1;
+  core::Map<<T extends core::Object? = dynamic>() → void, core::int> map1 = <<T extends core::Object? = dynamic>() → void, core::int>{f: 1};
+  core::Map<core::int, <T extends core::Object? = dynamic>() → void> map2 = <core::int, <T extends core::Object? = dynamic>() → void>{1: f};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart.weak.outline.expect b/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart.weak.outline.expect
new file mode 100644
index 0000000..b8d645e
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart.weak.outline.expect
@@ -0,0 +1,11 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F = <T extends core::Object? = dynamic>() → void;
+static method method<T extends core::Object? = dynamic>() → self::method::T%
+  ;
+static method test(<T extends core::Object? = dynamic>() → void f) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart.weak.transformed.expect b/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart.weak.transformed.expect
new file mode 100644
index 0000000..ccf2bce
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart.weak.transformed.expect
@@ -0,0 +1,47 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart:12:7: Error: Generic function type 'void Function<T>()' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   f = method();
+//       ^
+//
+// pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart:13:14: Error: Generic function type 'void Function<T>()' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   var list = [f];
+//              ^
+//
+// pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart:14:13: Error: Generic function type 'void Function<T>()' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   var set = {f};
+//             ^
+//
+// pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart:15:14: Error: Generic function type 'void Function<T>()' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   var map1 = {f: 1};
+//              ^
+//
+// pkg/front_end/testcases/general/inferred_generic_function_type_argument.dart:16:14: Error: Generic function type 'void Function<T>()' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   var map2 = {1: f};
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+typedef F = <T extends core::Object? = dynamic>() → void;
+static method method<T extends core::Object? = dynamic>() → self::method::T%
+  return throw "";
+static method test(<T extends core::Object? = dynamic>() → void f) → dynamic {
+  f = self::method<<T extends core::Object? = dynamic>() → void>();
+  core::List<<T extends core::Object? = dynamic>() → void> list = core::_GrowableList::_literal1<<T extends core::Object? = dynamic>() → void>(f);
+  core::Set<<T extends core::Object? = dynamic>() → void> set = block {
+    final core::Set<<T extends core::Object? = dynamic>() → void> #t1 = new col::_CompactLinkedHashSet::•<<T extends core::Object? = dynamic>() → void>();
+    #t1.{core::Set::add}{Invariant}(f){(<T extends core::Object? = dynamic>() → void) → core::bool};
+  } =>#t1;
+  core::Map<<T extends core::Object? = dynamic>() → void, core::int> map1 = <<T extends core::Object? = dynamic>() → void, core::int>{f: 1};
+  core::Map<core::int, <T extends core::Object? = dynamic>() → void> map2 = <core::int, <T extends core::Object? = dynamic>() → void>{1: f};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue44476.dart.weak.expect b/pkg/front_end/testcases/general/issue44476.dart.weak.expect
index 0f8715b..795ef97 100644
--- a/pkg/front_end/testcases/general/issue44476.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue44476.dart.weak.expect
@@ -2,58 +2,42 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue44476.dart:7:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/issue44476.dart:7:5: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // foo(A<num> x) {
+//     ^
+// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue44476.dart:8:7: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   bar(A<num> y) {
+//       ^
+// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue44476.dart:9:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//     barbar(A<num> yy) => null;
 //            ^
 // pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/issue44476.dart:9:19: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/issue44476.dart:11:14: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-//     barbar(A<num> yy) => null;
-//                   ^
-// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/issue44476.dart:8:14: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   bar(A<num> y) {
+//   var baz = (A<num> z) {
 //              ^
 // pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/issue44476.dart:12:26: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/issue44476.dart:12:19: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //     var bazbaz = (A<num> zz) => null;
-//                          ^
-// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/issue44476.dart:12:9: Error: Inferred type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//     var bazbaz = (A<num> zz) => null;
-//         ^
-// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/issue44476.dart:11:21: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   var baz = (A<num> z) {
-//                     ^
-// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/issue44476.dart:11:7: Error: Inferred type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   var baz = (A<num> z) {
-//       ^
+//                   ^
 // pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
diff --git a/pkg/front_end/testcases/general/issue44476.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue44476.dart.weak.modular.expect
index 0f8715b..795ef97 100644
--- a/pkg/front_end/testcases/general/issue44476.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue44476.dart.weak.modular.expect
@@ -2,58 +2,42 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue44476.dart:7:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/issue44476.dart:7:5: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // foo(A<num> x) {
+//     ^
+// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue44476.dart:8:7: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   bar(A<num> y) {
+//       ^
+// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue44476.dart:9:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//     barbar(A<num> yy) => null;
 //            ^
 // pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/issue44476.dart:9:19: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/issue44476.dart:11:14: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-//     barbar(A<num> yy) => null;
-//                   ^
-// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/issue44476.dart:8:14: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   bar(A<num> y) {
+//   var baz = (A<num> z) {
 //              ^
 // pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/issue44476.dart:12:26: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/issue44476.dart:12:19: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //     var bazbaz = (A<num> zz) => null;
-//                          ^
-// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/issue44476.dart:12:9: Error: Inferred type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//     var bazbaz = (A<num> zz) => null;
-//         ^
-// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/issue44476.dart:11:21: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   var baz = (A<num> z) {
-//                     ^
-// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/issue44476.dart:11:7: Error: Inferred type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   var baz = (A<num> z) {
-//       ^
+//                   ^
 // pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
diff --git a/pkg/front_end/testcases/general/issue44476.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue44476.dart.weak.outline.expect
index ab893e2..47fde5e 100644
--- a/pkg/front_end/testcases/general/issue44476.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue44476.dart.weak.outline.expect
@@ -2,10 +2,10 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue44476.dart:7:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/issue44476.dart:7:5: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // foo(A<num> x) {
-//            ^
+//     ^
 // pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
diff --git a/pkg/front_end/testcases/general/issue44476.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue44476.dart.weak.transformed.expect
index 0f8715b..795ef97 100644
--- a/pkg/front_end/testcases/general/issue44476.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue44476.dart.weak.transformed.expect
@@ -2,58 +2,42 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue44476.dart:7:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/issue44476.dart:7:5: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // foo(A<num> x) {
+//     ^
+// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue44476.dart:8:7: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   bar(A<num> y) {
+//       ^
+// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue44476.dart:9:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//     barbar(A<num> yy) => null;
 //            ^
 // pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/issue44476.dart:9:19: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/issue44476.dart:11:14: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-//     barbar(A<num> yy) => null;
-//                   ^
-// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/issue44476.dart:8:14: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   bar(A<num> y) {
+//   var baz = (A<num> z) {
 //              ^
 // pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/issue44476.dart:12:26: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/issue44476.dart:12:19: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //     var bazbaz = (A<num> zz) => null;
-//                          ^
-// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/issue44476.dart:12:9: Error: Inferred type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//     var bazbaz = (A<num> zz) => null;
-//         ^
-// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/issue44476.dart:11:21: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   var baz = (A<num> z) {
-//                     ^
-// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/issue44476.dart:11:7: Error: Inferred type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   var baz = (A<num> z) {
-//       ^
+//                   ^
 // pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
diff --git a/pkg/front_end/testcases/general/nested_variance2.dart.weak.expect b/pkg/front_end/testcases/general/nested_variance2.dart.weak.expect
index 8c5790b..130bce3 100644
--- a/pkg/front_end/testcases/general/nested_variance2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/nested_variance2.dart.weak.expect
@@ -2,64 +2,36 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
-// Try changing type arguments so that they conform to the bounds.
-//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
-//                     ^
-// pkg/front_end/testcases/general/nested_variance2.dart:57:57: Context: This is the type variable whose bound isn't conformed to.
-// class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
-//                                                         ^
-// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Context: If you want 'AinvCyclicCoBound<dynamic Function(Never) Function(dynamic Function(Never)), dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
-//  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
-//  - 'Object' is from 'dart:core'.
-//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
-//                     ^
-//
-// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
-// Try changing type arguments so that they conform to the bounds.
-//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
-//                     ^
-// pkg/front_end/testcases/general/nested_variance2.dart:49:27: Context: This is the type variable whose bound isn't conformed to.
-// typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
-//                           ^
-// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Context: If you want 'FinvCyclicCoBound<dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
-//  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
-//  - 'Object' is from 'dart:core'.
-//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
-//                     ^
-//
 // pkg/front_end/testcases/general/nested_variance2.dart:84:42: Error: A value of type 'void Function<Y extends Acon<dynamic Function(Never), dynamic>>()' can't be assigned to a variable of type 'void Function<Y extends Acon<dynamic Function(Null), dynamic>>()' because 'Null' is nullable and 'Never' isn't.
 //  - 'Acon' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
 //   F<Acon<Fcon<Null>, dynamic>> target2 = fsource2;
 //                                          ^
 //
-// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
-// Try changing type arguments so that they conform to the bounds.
-//   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
-//                        ^
+// pkg/front_end/testcases/general/nested_variance2.dart:177:3: Error: Inferred type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+//   ^
 // pkg/front_end/testcases/general/nested_variance2.dart:57:57: Context: This is the type variable whose bound isn't conformed to.
 // class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
 //                                                         ^
-// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Context: If you want 'AinvCyclicCoBound<dynamic Function(Never) Function(dynamic Function(Never)), dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'B<AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/general/nested_variance2.dart:177:3: Context: If you want 'AinvCyclicCoBound<FinvCyclicCoBound<dynamic Function(Never)>, dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
 //  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
-//  - 'B' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
 //  - 'Object' is from 'dart:core'.
-//   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
-//                        ^
+//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+//   ^
 //
-// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
-// Try changing type arguments so that they conform to the bounds.
+// pkg/front_end/testcases/general/nested_variance2.dart:236:5: Error: Inferred type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
 //   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
-//                        ^
-// pkg/front_end/testcases/general/nested_variance2.dart:49:27: Context: This is the type variable whose bound isn't conformed to.
-// typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
-//                           ^
-// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Context: If you want 'FinvCyclicCoBound<dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'B<AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>>' must then satisfy its bounds, which it does not.
-//  - 'B' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//     ^
+// pkg/front_end/testcases/general/nested_variance2.dart:57:57: Context: This is the type variable whose bound isn't conformed to.
+// class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
+//                                                         ^
+// pkg/front_end/testcases/general/nested_variance2.dart:236:5: Context: If you want 'AinvCyclicCoBound<FinvCyclicCoBound<dynamic Function(Never)>, dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
 //  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
 //  - 'Object' is from 'dart:core'.
 //   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
-//                        ^
+//     ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/nested_variance2.dart.weak.modular.expect b/pkg/front_end/testcases/general/nested_variance2.dart.weak.modular.expect
index 8c5790b..130bce3 100644
--- a/pkg/front_end/testcases/general/nested_variance2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/nested_variance2.dart.weak.modular.expect
@@ -2,64 +2,36 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
-// Try changing type arguments so that they conform to the bounds.
-//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
-//                     ^
-// pkg/front_end/testcases/general/nested_variance2.dart:57:57: Context: This is the type variable whose bound isn't conformed to.
-// class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
-//                                                         ^
-// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Context: If you want 'AinvCyclicCoBound<dynamic Function(Never) Function(dynamic Function(Never)), dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
-//  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
-//  - 'Object' is from 'dart:core'.
-//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
-//                     ^
-//
-// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
-// Try changing type arguments so that they conform to the bounds.
-//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
-//                     ^
-// pkg/front_end/testcases/general/nested_variance2.dart:49:27: Context: This is the type variable whose bound isn't conformed to.
-// typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
-//                           ^
-// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Context: If you want 'FinvCyclicCoBound<dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
-//  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
-//  - 'Object' is from 'dart:core'.
-//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
-//                     ^
-//
 // pkg/front_end/testcases/general/nested_variance2.dart:84:42: Error: A value of type 'void Function<Y extends Acon<dynamic Function(Never), dynamic>>()' can't be assigned to a variable of type 'void Function<Y extends Acon<dynamic Function(Null), dynamic>>()' because 'Null' is nullable and 'Never' isn't.
 //  - 'Acon' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
 //   F<Acon<Fcon<Null>, dynamic>> target2 = fsource2;
 //                                          ^
 //
-// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
-// Try changing type arguments so that they conform to the bounds.
-//   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
-//                        ^
+// pkg/front_end/testcases/general/nested_variance2.dart:177:3: Error: Inferred type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+//   ^
 // pkg/front_end/testcases/general/nested_variance2.dart:57:57: Context: This is the type variable whose bound isn't conformed to.
 // class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
 //                                                         ^
-// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Context: If you want 'AinvCyclicCoBound<dynamic Function(Never) Function(dynamic Function(Never)), dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'B<AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/general/nested_variance2.dart:177:3: Context: If you want 'AinvCyclicCoBound<FinvCyclicCoBound<dynamic Function(Never)>, dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
 //  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
-//  - 'B' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
 //  - 'Object' is from 'dart:core'.
-//   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
-//                        ^
+//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+//   ^
 //
-// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
-// Try changing type arguments so that they conform to the bounds.
+// pkg/front_end/testcases/general/nested_variance2.dart:236:5: Error: Inferred type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
 //   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
-//                        ^
-// pkg/front_end/testcases/general/nested_variance2.dart:49:27: Context: This is the type variable whose bound isn't conformed to.
-// typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
-//                           ^
-// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Context: If you want 'FinvCyclicCoBound<dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'B<AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>>' must then satisfy its bounds, which it does not.
-//  - 'B' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//     ^
+// pkg/front_end/testcases/general/nested_variance2.dart:57:57: Context: This is the type variable whose bound isn't conformed to.
+// class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
+//                                                         ^
+// pkg/front_end/testcases/general/nested_variance2.dart:236:5: Context: If you want 'AinvCyclicCoBound<FinvCyclicCoBound<dynamic Function(Never)>, dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
 //  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
 //  - 'Object' is from 'dart:core'.
 //   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
-//                        ^
+//     ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/nested_variance2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/nested_variance2.dart.weak.transformed.expect
index 77f1c4c..2b81a6e 100644
--- a/pkg/front_end/testcases/general/nested_variance2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/nested_variance2.dart.weak.transformed.expect
@@ -2,64 +2,36 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
-// Try changing type arguments so that they conform to the bounds.
-//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
-//                     ^
-// pkg/front_end/testcases/general/nested_variance2.dart:57:57: Context: This is the type variable whose bound isn't conformed to.
-// class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
-//                                                         ^
-// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Context: If you want 'AinvCyclicCoBound<dynamic Function(Never) Function(dynamic Function(Never)), dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
-//  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
-//  - 'Object' is from 'dart:core'.
-//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
-//                     ^
-//
-// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
-// Try changing type arguments so that they conform to the bounds.
-//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
-//                     ^
-// pkg/front_end/testcases/general/nested_variance2.dart:49:27: Context: This is the type variable whose bound isn't conformed to.
-// typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
-//                           ^
-// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Context: If you want 'FinvCyclicCoBound<dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
-//  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
-//  - 'Object' is from 'dart:core'.
-//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
-//                     ^
-//
 // pkg/front_end/testcases/general/nested_variance2.dart:84:42: Error: A value of type 'void Function<Y extends Acon<dynamic Function(Never), dynamic>>()' can't be assigned to a variable of type 'void Function<Y extends Acon<dynamic Function(Null), dynamic>>()' because 'Null' is nullable and 'Never' isn't.
 //  - 'Acon' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
 //   F<Acon<Fcon<Null>, dynamic>> target2 = fsource2;
 //                                          ^
 //
-// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
-// Try changing type arguments so that they conform to the bounds.
-//   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
-//                        ^
+// pkg/front_end/testcases/general/nested_variance2.dart:177:3: Error: Inferred type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+//   ^
 // pkg/front_end/testcases/general/nested_variance2.dart:57:57: Context: This is the type variable whose bound isn't conformed to.
 // class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
 //                                                         ^
-// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Context: If you want 'AinvCyclicCoBound<dynamic Function(Never) Function(dynamic Function(Never)), dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'B<AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/general/nested_variance2.dart:177:3: Context: If you want 'AinvCyclicCoBound<FinvCyclicCoBound<dynamic Function(Never)>, dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
 //  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
-//  - 'B' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
 //  - 'Object' is from 'dart:core'.
-//   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
-//                        ^
+//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+//   ^
 //
-// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
-// Try changing type arguments so that they conform to the bounds.
+// pkg/front_end/testcases/general/nested_variance2.dart:236:5: Error: Inferred type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
 //   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
-//                        ^
-// pkg/front_end/testcases/general/nested_variance2.dart:49:27: Context: This is the type variable whose bound isn't conformed to.
-// typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
-//                           ^
-// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Context: If you want 'FinvCyclicCoBound<dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'B<AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>>' must then satisfy its bounds, which it does not.
-//  - 'B' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//     ^
+// pkg/front_end/testcases/general/nested_variance2.dart:57:57: Context: This is the type variable whose bound isn't conformed to.
+// class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
+//                                                         ^
+// pkg/front_end/testcases/general/nested_variance2.dart:236:5: Context: If you want 'AinvCyclicCoBound<FinvCyclicCoBound<dynamic Function(Never)>, dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
 //  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
 //  - 'Object' is from 'dart:core'.
 //   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
-//                        ^
+//     ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/super_bounded.dart b/pkg/front_end/testcases/general/super_bounded.dart
new file mode 100644
index 0000000..6d74f81
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_bounded.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+typedef F<X> = X Function(X);
+
+class A<T> {}
+
+class Class<T extends A<T>> {}
+
+method(Class c1, Class<dynamic> c2) {}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/super_bounded.dart.textual_outline.expect b/pkg/front_end/testcases/general/super_bounded.dart.textual_outline.expect
new file mode 100644
index 0000000..ca7b1c6
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_bounded.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+typedef F<X> = X Function(X);
+
+class A<T> {}
+
+class Class<T extends A<T>> {}
+
+method(Class c1, Class<dynamic> c2) {}
+main() {}
diff --git a/pkg/front_end/testcases/general/super_bounded.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/super_bounded.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..c1e72c5
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_bounded.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+class A<T> {}
+
+class Class<T extends A<T>> {}
+
+main() {}
+method(Class c1, Class<dynamic> c2) {}
+typedef F<X> = X Function(X);
diff --git a/pkg/front_end/testcases/general/super_bounded.dart.weak.expect b/pkg/front_end/testcases/general/super_bounded.dart.weak.expect
new file mode 100644
index 0000000..d6a4196
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_bounded.dart.weak.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<invariant X extends core::Object? = dynamic> = (X%) → X%;
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+}
+class Class<T extends self::A<self::Class::T> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
+    : super core::Object::•()
+    ;
+}
+static method method(self::Class<self::A<dynamic>> c1, self::Class<dynamic> c2) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/super_bounded.dart.weak.modular.expect b/pkg/front_end/testcases/general/super_bounded.dart.weak.modular.expect
new file mode 100644
index 0000000..d6a4196
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_bounded.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<invariant X extends core::Object? = dynamic> = (X%) → X%;
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+}
+class Class<T extends self::A<self::Class::T> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
+    : super core::Object::•()
+    ;
+}
+static method method(self::Class<self::A<dynamic>> c1, self::Class<dynamic> c2) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/super_bounded.dart.weak.outline.expect b/pkg/front_end/testcases/general/super_bounded.dart.weak.outline.expect
new file mode 100644
index 0000000..7bae477
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_bounded.dart.weak.outline.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<invariant X extends core::Object? = dynamic> = (X%) → X%;
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    ;
+}
+class Class<T extends self::A<self::Class::T> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
+    ;
+}
+static method method(self::Class<self::A<dynamic>> c1, self::Class<dynamic> c2) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/super_bounded.dart.weak.transformed.expect b/pkg/front_end/testcases/general/super_bounded.dart.weak.transformed.expect
new file mode 100644
index 0000000..d6a4196
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_bounded.dart.weak.transformed.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<invariant X extends core::Object? = dynamic> = (X%) → X%;
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+}
+class Class<T extends self::A<self::Class::T> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
+    : super core::Object::•()
+    ;
+}
+static method method(self::Class<self::A<dynamic>> c1, self::Class<dynamic> c2) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.expect
index 145ed00..aae0506 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.expect
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.expect
@@ -2,57 +2,57 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:10:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:23: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// extension E<X extends A<num>> // Error.
+//                       ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:19:25: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void bazOfE<Y extends A<num>>() {} // Error.
+//                         ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:10:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num> fieldOfA; // Error.
+//   ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:11:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num> staticFieldOfA; // Error.
 //          ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:11:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   static A<num> staticFieldOfA; // Error.
-//                 ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-// extension E<X extends A<num>> // Error.
-//             ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   static A<num> fieldOfE; // Error.
-//                 ^
+//          ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num> fooOfE() => null; // Error.
-//                ^
+//   ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:18:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:18:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   void barOfE(A<num> a) {} // Error.
-//                      ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:19:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   void bazOfE<Y extends A<num>>() {} // Error.
 //               ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.modular.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.modular.expect
index 145ed00..aae0506 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.modular.expect
@@ -2,57 +2,57 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:10:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:23: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// extension E<X extends A<num>> // Error.
+//                       ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:19:25: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void bazOfE<Y extends A<num>>() {} // Error.
+//                         ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:10:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num> fieldOfA; // Error.
+//   ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:11:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num> staticFieldOfA; // Error.
 //          ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:11:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   static A<num> staticFieldOfA; // Error.
-//                 ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-// extension E<X extends A<num>> // Error.
-//             ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   static A<num> fieldOfE; // Error.
-//                 ^
+//          ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num> fooOfE() => null; // Error.
-//                ^
+//   ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:18:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:18:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   void barOfE(A<num> a) {} // Error.
-//                      ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:19:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   void bazOfE<Y extends A<num>>() {} // Error.
 //               ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.outline.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.outline.expect
index 401ed4e..e65a4dc 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.outline.expect
@@ -2,57 +2,57 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:10:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:23: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// extension E<X extends A<num>> // Error.
+//                       ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:19:25: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void bazOfE<Y extends A<num>>() {} // Error.
+//                         ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:10:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num> fieldOfA; // Error.
+//   ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:11:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num> staticFieldOfA; // Error.
 //          ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:11:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   static A<num> staticFieldOfA; // Error.
-//                 ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-// extension E<X extends A<num>> // Error.
-//             ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   static A<num> fieldOfE; // Error.
-//                 ^
+//          ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num> fooOfE() => null; // Error.
-//                ^
+//   ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:18:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:18:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   void barOfE(A<num> a) {} // Error.
-//                      ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:19:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   void bazOfE<Y extends A<num>>() {} // Error.
 //               ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.transformed.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.transformed.expect
index 145ed00..aae0506 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.transformed.expect
@@ -2,57 +2,57 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:10:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:23: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// extension E<X extends A<num>> // Error.
+//                       ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:19:25: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void bazOfE<Y extends A<num>>() {} // Error.
+//                         ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:10:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num> fieldOfA; // Error.
+//   ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:11:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num> staticFieldOfA; // Error.
 //          ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:11:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   static A<num> staticFieldOfA; // Error.
-//                 ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-// extension E<X extends A<num>> // Error.
-//             ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   static A<num> fieldOfE; // Error.
-//                 ^
+//          ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num> fooOfE() => null; // Error.
-//                ^
+//   ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:18:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:18:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   void barOfE(A<num> a) {} // Error.
-//                      ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:19:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   void bazOfE<Y extends A<num>>() {} // Error.
 //               ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.expect
index c19f798..7f9ecea 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.expect
@@ -2,57 +2,57 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:8:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   A<num>? fieldOfA; // Error.
-//           ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:9:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   static A<num>? staticFieldOfA; // Error.
-//                  ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:12:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:12:23: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // extension E<X extends A<num>> // Error.
-//             ^
+//                       ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:14:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   static A<num>? fieldOfE; // Error.
-//                  ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:15:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
-// Try changing type arguments so that they conform to the bounds.
-//   A<num>? fooOfE() => null; // Error.
-//                 ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:16:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   void barOfE(A<num> a) {} // Error.
-//                      ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:17:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:17:25: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   void bazOfE<Y extends A<num>>() {} // Error.
+//                         ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:8:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num>? fieldOfA; // Error.
+//   ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:9:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num>? staticFieldOfA; // Error.
+//          ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:14:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num>? fieldOfE; // Error.
+//          ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:15:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num>? fooOfE() => null; // Error.
+//   ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:16:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void barOfE(A<num> a) {} // Error.
 //               ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.modular.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.modular.expect
index c19f798..7f9ecea 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.modular.expect
@@ -2,57 +2,57 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:8:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   A<num>? fieldOfA; // Error.
-//           ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:9:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   static A<num>? staticFieldOfA; // Error.
-//                  ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:12:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:12:23: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // extension E<X extends A<num>> // Error.
-//             ^
+//                       ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:14:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   static A<num>? fieldOfE; // Error.
-//                  ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:15:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
-// Try changing type arguments so that they conform to the bounds.
-//   A<num>? fooOfE() => null; // Error.
-//                 ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:16:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   void barOfE(A<num> a) {} // Error.
-//                      ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:17:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:17:25: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   void bazOfE<Y extends A<num>>() {} // Error.
+//                         ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:8:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num>? fieldOfA; // Error.
+//   ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:9:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num>? staticFieldOfA; // Error.
+//          ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:14:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num>? fieldOfE; // Error.
+//          ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:15:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num>? fooOfE() => null; // Error.
+//   ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:16:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void barOfE(A<num> a) {} // Error.
 //               ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.outline.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.outline.expect
index ed99e3a..3047353 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.outline.expect
@@ -2,57 +2,57 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:8:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   A<num>? fieldOfA; // Error.
-//           ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:9:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   static A<num>? staticFieldOfA; // Error.
-//                  ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:12:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:12:23: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // extension E<X extends A<num>> // Error.
-//             ^
+//                       ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:14:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   static A<num>? fieldOfE; // Error.
-//                  ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:15:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
-// Try changing type arguments so that they conform to the bounds.
-//   A<num>? fooOfE() => null; // Error.
-//                 ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:16:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   void barOfE(A<num> a) {} // Error.
-//                      ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:17:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:17:25: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   void bazOfE<Y extends A<num>>() {} // Error.
+//                         ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:8:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num>? fieldOfA; // Error.
+//   ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:9:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num>? staticFieldOfA; // Error.
+//          ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:14:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num>? fieldOfE; // Error.
+//          ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:15:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num>? fooOfE() => null; // Error.
+//   ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:16:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void barOfE(A<num> a) {} // Error.
 //               ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.transformed.expect
index c19f798..7f9ecea 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.transformed.expect
@@ -2,57 +2,57 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:8:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   A<num>? fieldOfA; // Error.
-//           ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:9:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   static A<num>? staticFieldOfA; // Error.
-//                  ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:12:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:12:23: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // extension E<X extends A<num>> // Error.
-//             ^
+//                       ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:14:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   static A<num>? fieldOfE; // Error.
-//                  ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:15:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
-// Try changing type arguments so that they conform to the bounds.
-//   A<num>? fooOfE() => null; // Error.
-//                 ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:16:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-//   void barOfE(A<num> a) {} // Error.
-//                      ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:17:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:17:25: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   void bazOfE<Y extends A<num>>() {} // Error.
+//                         ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:8:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num>? fieldOfA; // Error.
+//   ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:9:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num>? staticFieldOfA; // Error.
+//          ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:14:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num>? fieldOfE; // Error.
+//          ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:15:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num>? fooOfE() => null; // Error.
+//   ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:16:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void barOfE(A<num> a) {} // Error.
 //               ^
 // pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
diff --git a/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart
new file mode 100644
index 0000000..314fc2a
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart
@@ -0,0 +1,33 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart=2.12
+
+import 'alias_from_opt_in_lib.dart';
+
+test(
+  T1 t1a, // Ok
+  List<T1> t1b, // Error
+  void Function(T1) t1c, // Ok
+  void Function(List<T1>) t1d, // Error
+  T2 t2a, // Ok
+  List<T2> t2b, // // Ok
+  void Function(T2) t2c, // Ok
+  void Function(List<T2>) t2d, // // Ok
+  T3 t3a, // Error
+  List<T3> t3b, // Error
+  void Function(T3) t3c, // Error
+  void Function(List<T3>) t3d, // Error
+  T4 t4a, // Error,
+  List<T4> t4b, // Error,
+  void Function(T4) t4c, // Error
+  void Function(List<T4>) t4d, // Error
+) {
+  new T4(); // Error
+  <T4>[]; // Error
+  <void Function(T4)>[]; // Error
+  <void Function(List<T4>)>[]; // Error
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.strong.expect b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.strong.expect
new file mode 100644
index 0000000..046ad77
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.strong.expect
@@ -0,0 +1,110 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:11:3: Error: A generic function type can't be used as a type argument.
+// Try using a non-generic function type.
+//   List<T1> t1b, // Error
+//   ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:13:17: Error: A generic function type can't be used as a type argument.
+// Try using a non-generic function type.
+//   void Function(List<T1>) t1d, // Error
+//                 ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:22:3: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   T4 t4a, // Error,
+//   ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:23:8: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   List<T4> t4b, // Error,
+//        ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:24:17: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   void Function(T4) t4c, // Error
+//                 ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:25:22: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   void Function(List<T4>) t4d, // Error
+//                      ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:18:3: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   T3 t3a, // Error
+//   ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:19:8: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   List<T3> t3b, // Error
+//        ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:20:17: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   void Function(T3) t3c, // Error
+//                 ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:21:22: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   void Function(List<T3>) t3d, // Error
+//                      ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:27:7: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   new T4(); // Error
+//       ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:28:4: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   <T4>[]; // Error
+//    ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:29:18: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   <void Function(T4)>[]; // Error
+//                  ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:30:23: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   <void Function(List<T4>)>[]; // Error
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+import "alias_from_opt_in_lib.dart" as ali;
+
+import "org-dartlang-testcase:///alias_from_opt_in_lib.dart";
+
+static method test(<T extends core::Object? = dynamic>(T%) → void t1a, core::List<<T extends core::Object? = dynamic>(T%) → void> t1b, (<T extends core::Object? = dynamic>(T%) → void) → void t1c, (core::List<<T extends core::Object? = dynamic>(T%) → void>) → void t1d, (<T extends core::Object? = dynamic>(T%) → void) → void t2a, core::List<(<T extends core::Object? = dynamic>(T%) → void) → void> t2b, ((<T extends core::Object? = dynamic>(T%) → void) → void) → void t2c, (core::List<(<T extends core::Object? = dynamic>(T%) → void) → void>) → void t2d, core::List<<T extends core::Object? = dynamic>(T%) → void> t3a, core::List<core::List<<T extends core::Object? = dynamic>(T%) → void>> t3b, (core::List<<T extends core::Object? = dynamic>(T%) → void>) → void t3c, (core::List<core::List<<T extends core::Object? = dynamic>(T%) → void>>) → void t3d, ali::Class<<T extends core::Object? = dynamic>(T%) → void> t4a, core::List<ali::Class<<T extends core::Object? = dynamic>(T%) → void>> t4b, (ali::Class<<T extends core::Object? = dynamic>(T%) → void>) → void t4c, (core::List<ali::Class<<T extends core::Object? = dynamic>(T%) → void>>) → void t4d) → dynamic {
+  new ali::Class::•<<T extends core::Object? = dynamic>(T%) → void>();
+  <ali::Class<<T extends core::Object? = dynamic>(T%) → void>>[];
+  <(ali::Class<<T extends core::Object? = dynamic>(T%) → void>) → void>[];
+  <(core::List<ali::Class<<T extends core::Object? = dynamic>(T%) → void>>) → void>[];
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as ali;
+import "dart:core" as core;
+
+typedef T1 = <T extends core::Object? = dynamic>(T%) → void;
+typedef T2 = (<T extends core::Object? = dynamic>(T%) → void) → void;
+typedef T3 = core::List<<T extends core::Object? = dynamic>(T%) → void>;
+typedef T4<X extends <T extends core::Object? = dynamic>(T%) → void> = ali::Class<X>;
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → ali::Class<ali::Class::T%>
+    : super core::Object::•()
+    ;
+}
+static method test(<T extends core::Object? = dynamic>(T%) → void t1, <T extends core::Object? = dynamic>(T%) → void t2, core::List<<T extends core::Object? = dynamic>(T%) → void> t3) → dynamic {
+  new ali::Class::•<<T extends core::Object? = dynamic>(T%) → void>();
+}
+static method _#T4#new#tearOff<X extends <T extends core::Object? = dynamic>(T%) → void>() → ali::Class<ali::_#T4#new#tearOff::X>
+  return new ali::Class::•<ali::_#T4#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.strong.transformed.expect b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.strong.transformed.expect
new file mode 100644
index 0000000..0ef0673
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.strong.transformed.expect
@@ -0,0 +1,110 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:11:3: Error: A generic function type can't be used as a type argument.
+// Try using a non-generic function type.
+//   List<T1> t1b, // Error
+//   ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:13:17: Error: A generic function type can't be used as a type argument.
+// Try using a non-generic function type.
+//   void Function(List<T1>) t1d, // Error
+//                 ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:22:3: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   T4 t4a, // Error,
+//   ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:23:8: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   List<T4> t4b, // Error,
+//        ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:24:17: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   void Function(T4) t4c, // Error
+//                 ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:25:22: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   void Function(List<T4>) t4d, // Error
+//                      ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:18:3: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   T3 t3a, // Error
+//   ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:19:8: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   List<T3> t3b, // Error
+//        ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:20:17: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   void Function(T3) t3c, // Error
+//                 ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:21:22: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   void Function(List<T3>) t3d, // Error
+//                      ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:27:7: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   new T4(); // Error
+//       ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:28:4: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   <T4>[]; // Error
+//    ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:29:18: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   <void Function(T4)>[]; // Error
+//                  ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:30:23: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   <void Function(List<T4>)>[]; // Error
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+import "alias_from_opt_in_lib.dart" as ali;
+
+import "org-dartlang-testcase:///alias_from_opt_in_lib.dart";
+
+static method test(<T extends core::Object? = dynamic>(T%) → void t1a, core::List<<T extends core::Object? = dynamic>(T%) → void> t1b, (<T extends core::Object? = dynamic>(T%) → void) → void t1c, (core::List<<T extends core::Object? = dynamic>(T%) → void>) → void t1d, (<T extends core::Object? = dynamic>(T%) → void) → void t2a, core::List<(<T extends core::Object? = dynamic>(T%) → void) → void> t2b, ((<T extends core::Object? = dynamic>(T%) → void) → void) → void t2c, (core::List<(<T extends core::Object? = dynamic>(T%) → void) → void>) → void t2d, core::List<<T extends core::Object? = dynamic>(T%) → void> t3a, core::List<core::List<<T extends core::Object? = dynamic>(T%) → void>> t3b, (core::List<<T extends core::Object? = dynamic>(T%) → void>) → void t3c, (core::List<core::List<<T extends core::Object? = dynamic>(T%) → void>>) → void t3d, ali::Class<<T extends core::Object? = dynamic>(T%) → void> t4a, core::List<ali::Class<<T extends core::Object? = dynamic>(T%) → void>> t4b, (ali::Class<<T extends core::Object? = dynamic>(T%) → void>) → void t4c, (core::List<ali::Class<<T extends core::Object? = dynamic>(T%) → void>>) → void t4d) → dynamic {
+  new ali::Class::•<<T extends core::Object? = dynamic>(T%) → void>();
+  core::_GrowableList::•<ali::Class<<T extends core::Object? = dynamic>(T%) → void>>(0);
+  core::_GrowableList::•<(ali::Class<<T extends core::Object? = dynamic>(T%) → void>) → void>(0);
+  core::_GrowableList::•<(core::List<ali::Class<<T extends core::Object? = dynamic>(T%) → void>>) → void>(0);
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as ali;
+import "dart:core" as core;
+
+typedef T1 = <T extends core::Object? = dynamic>(T%) → void;
+typedef T2 = (<T extends core::Object? = dynamic>(T%) → void) → void;
+typedef T3 = core::List<<T extends core::Object? = dynamic>(T%) → void>;
+typedef T4<X extends <T extends core::Object? = dynamic>(T%) → void> = ali::Class<X>;
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → ali::Class<ali::Class::T%>
+    : super core::Object::•()
+    ;
+}
+static method test(<T extends core::Object? = dynamic>(T%) → void t1, <T extends core::Object? = dynamic>(T%) → void t2, core::List<<T extends core::Object? = dynamic>(T%) → void> t3) → dynamic {
+  new ali::Class::•<<T extends core::Object? = dynamic>(T%) → void>();
+}
+static method _#T4#new#tearOff<X extends <T extends core::Object? = dynamic>(T%) → void>() → ali::Class<ali::_#T4#new#tearOff::X>
+  return new ali::Class::•<ali::_#T4#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.textual_outline.expect b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.textual_outline.expect
new file mode 100644
index 0000000..bc7045b
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.textual_outline.expect
@@ -0,0 +1,22 @@
+// @dart = 2.12
+import 'alias_from_opt_in_lib.dart';
+
+test(
+  T1 t1a,
+  List<T1> t1b,
+  void Function(T1) t1c,
+  void Function(List<T1>) t1d,
+  T2 t2a,
+  List<T2> t2b,
+  void Function(T2) t2c,
+  void Function(List<T2>) t2d,
+  T3 t3a,
+  List<T3> t3b,
+  void Function(T3) t3c,
+  void Function(List<T3>) t3d,
+  T4 t4a,
+  List<T4> t4b,
+  void Function(T4) t4c,
+  void Function(List<T4>) t4d,
+) {}
+main() {}
diff --git a/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..803b7714
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.textual_outline_modelled.expect
@@ -0,0 +1,22 @@
+// @dart = 2.12
+import 'alias_from_opt_in_lib.dart';
+
+main() {}
+test(
+  T1 t1a,
+  List<T1> t1b,
+  void Function(T1) t1c,
+  void Function(List<T1>) t1d,
+  T2 t2a,
+  List<T2> t2b,
+  void Function(T2) t2c,
+  void Function(List<T2>) t2d,
+  T3 t3a,
+  List<T3> t3b,
+  void Function(T3) t3c,
+  void Function(List<T3>) t3d,
+  T4 t4a,
+  List<T4> t4b,
+  void Function(T4) t4c,
+  void Function(List<T4>) t4d,
+) {}
diff --git a/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.weak.expect b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.weak.expect
new file mode 100644
index 0000000..046ad77
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.weak.expect
@@ -0,0 +1,110 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:11:3: Error: A generic function type can't be used as a type argument.
+// Try using a non-generic function type.
+//   List<T1> t1b, // Error
+//   ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:13:17: Error: A generic function type can't be used as a type argument.
+// Try using a non-generic function type.
+//   void Function(List<T1>) t1d, // Error
+//                 ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:22:3: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   T4 t4a, // Error,
+//   ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:23:8: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   List<T4> t4b, // Error,
+//        ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:24:17: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   void Function(T4) t4c, // Error
+//                 ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:25:22: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   void Function(List<T4>) t4d, // Error
+//                      ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:18:3: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   T3 t3a, // Error
+//   ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:19:8: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   List<T3> t3b, // Error
+//        ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:20:17: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   void Function(T3) t3c, // Error
+//                 ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:21:22: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   void Function(List<T3>) t3d, // Error
+//                      ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:27:7: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   new T4(); // Error
+//       ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:28:4: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   <T4>[]; // Error
+//    ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:29:18: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   <void Function(T4)>[]; // Error
+//                  ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:30:23: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   <void Function(List<T4>)>[]; // Error
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+import "alias_from_opt_in_lib.dart" as ali;
+
+import "org-dartlang-testcase:///alias_from_opt_in_lib.dart";
+
+static method test(<T extends core::Object? = dynamic>(T%) → void t1a, core::List<<T extends core::Object? = dynamic>(T%) → void> t1b, (<T extends core::Object? = dynamic>(T%) → void) → void t1c, (core::List<<T extends core::Object? = dynamic>(T%) → void>) → void t1d, (<T extends core::Object? = dynamic>(T%) → void) → void t2a, core::List<(<T extends core::Object? = dynamic>(T%) → void) → void> t2b, ((<T extends core::Object? = dynamic>(T%) → void) → void) → void t2c, (core::List<(<T extends core::Object? = dynamic>(T%) → void) → void>) → void t2d, core::List<<T extends core::Object? = dynamic>(T%) → void> t3a, core::List<core::List<<T extends core::Object? = dynamic>(T%) → void>> t3b, (core::List<<T extends core::Object? = dynamic>(T%) → void>) → void t3c, (core::List<core::List<<T extends core::Object? = dynamic>(T%) → void>>) → void t3d, ali::Class<<T extends core::Object? = dynamic>(T%) → void> t4a, core::List<ali::Class<<T extends core::Object? = dynamic>(T%) → void>> t4b, (ali::Class<<T extends core::Object? = dynamic>(T%) → void>) → void t4c, (core::List<ali::Class<<T extends core::Object? = dynamic>(T%) → void>>) → void t4d) → dynamic {
+  new ali::Class::•<<T extends core::Object? = dynamic>(T%) → void>();
+  <ali::Class<<T extends core::Object? = dynamic>(T%) → void>>[];
+  <(ali::Class<<T extends core::Object? = dynamic>(T%) → void>) → void>[];
+  <(core::List<ali::Class<<T extends core::Object? = dynamic>(T%) → void>>) → void>[];
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as ali;
+import "dart:core" as core;
+
+typedef T1 = <T extends core::Object? = dynamic>(T%) → void;
+typedef T2 = (<T extends core::Object? = dynamic>(T%) → void) → void;
+typedef T3 = core::List<<T extends core::Object? = dynamic>(T%) → void>;
+typedef T4<X extends <T extends core::Object? = dynamic>(T%) → void> = ali::Class<X>;
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → ali::Class<ali::Class::T%>
+    : super core::Object::•()
+    ;
+}
+static method test(<T extends core::Object? = dynamic>(T%) → void t1, <T extends core::Object? = dynamic>(T%) → void t2, core::List<<T extends core::Object? = dynamic>(T%) → void> t3) → dynamic {
+  new ali::Class::•<<T extends core::Object? = dynamic>(T%) → void>();
+}
+static method _#T4#new#tearOff<X extends <T extends core::Object? = dynamic>(T%) → void>() → ali::Class<ali::_#T4#new#tearOff::X>
+  return new ali::Class::•<ali::_#T4#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.weak.modular.expect b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.weak.modular.expect
new file mode 100644
index 0000000..046ad77
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.weak.modular.expect
@@ -0,0 +1,110 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:11:3: Error: A generic function type can't be used as a type argument.
+// Try using a non-generic function type.
+//   List<T1> t1b, // Error
+//   ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:13:17: Error: A generic function type can't be used as a type argument.
+// Try using a non-generic function type.
+//   void Function(List<T1>) t1d, // Error
+//                 ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:22:3: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   T4 t4a, // Error,
+//   ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:23:8: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   List<T4> t4b, // Error,
+//        ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:24:17: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   void Function(T4) t4c, // Error
+//                 ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:25:22: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   void Function(List<T4>) t4d, // Error
+//                      ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:18:3: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   T3 t3a, // Error
+//   ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:19:8: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   List<T3> t3b, // Error
+//        ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:20:17: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   void Function(T3) t3c, // Error
+//                 ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:21:22: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   void Function(List<T3>) t3d, // Error
+//                      ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:27:7: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   new T4(); // Error
+//       ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:28:4: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   <T4>[]; // Error
+//    ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:29:18: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   <void Function(T4)>[]; // Error
+//                  ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:30:23: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   <void Function(List<T4>)>[]; // Error
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+import "alias_from_opt_in_lib.dart" as ali;
+
+import "org-dartlang-testcase:///alias_from_opt_in_lib.dart";
+
+static method test(<T extends core::Object? = dynamic>(T%) → void t1a, core::List<<T extends core::Object? = dynamic>(T%) → void> t1b, (<T extends core::Object? = dynamic>(T%) → void) → void t1c, (core::List<<T extends core::Object? = dynamic>(T%) → void>) → void t1d, (<T extends core::Object? = dynamic>(T%) → void) → void t2a, core::List<(<T extends core::Object? = dynamic>(T%) → void) → void> t2b, ((<T extends core::Object? = dynamic>(T%) → void) → void) → void t2c, (core::List<(<T extends core::Object? = dynamic>(T%) → void) → void>) → void t2d, core::List<<T extends core::Object? = dynamic>(T%) → void> t3a, core::List<core::List<<T extends core::Object? = dynamic>(T%) → void>> t3b, (core::List<<T extends core::Object? = dynamic>(T%) → void>) → void t3c, (core::List<core::List<<T extends core::Object? = dynamic>(T%) → void>>) → void t3d, ali::Class<<T extends core::Object? = dynamic>(T%) → void> t4a, core::List<ali::Class<<T extends core::Object? = dynamic>(T%) → void>> t4b, (ali::Class<<T extends core::Object? = dynamic>(T%) → void>) → void t4c, (core::List<ali::Class<<T extends core::Object? = dynamic>(T%) → void>>) → void t4d) → dynamic {
+  new ali::Class::•<<T extends core::Object? = dynamic>(T%) → void>();
+  <ali::Class<<T extends core::Object? = dynamic>(T%) → void>>[];
+  <(ali::Class<<T extends core::Object? = dynamic>(T%) → void>) → void>[];
+  <(core::List<ali::Class<<T extends core::Object? = dynamic>(T%) → void>>) → void>[];
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as ali;
+import "dart:core" as core;
+
+typedef T1 = <T extends core::Object? = dynamic>(T%) → void;
+typedef T2 = (<T extends core::Object? = dynamic>(T%) → void) → void;
+typedef T3 = core::List<<T extends core::Object? = dynamic>(T%) → void>;
+typedef T4<X extends <T extends core::Object? = dynamic>(T%) → void> = ali::Class<X>;
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → ali::Class<ali::Class::T%>
+    : super core::Object::•()
+    ;
+}
+static method test(<T extends core::Object? = dynamic>(T%) → void t1, <T extends core::Object? = dynamic>(T%) → void t2, core::List<<T extends core::Object? = dynamic>(T%) → void> t3) → dynamic {
+  new ali::Class::•<<T extends core::Object? = dynamic>(T%) → void>();
+}
+static method _#T4#new#tearOff<X extends <T extends core::Object? = dynamic>(T%) → void>() → ali::Class<ali::_#T4#new#tearOff::X>
+  return new ali::Class::•<ali::_#T4#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.weak.outline.expect b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.weak.outline.expect
new file mode 100644
index 0000000..08796ca
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.weak.outline.expect
@@ -0,0 +1,85 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:11:3: Error: A generic function type can't be used as a type argument.
+// Try using a non-generic function type.
+//   List<T1> t1b, // Error
+//   ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:13:17: Error: A generic function type can't be used as a type argument.
+// Try using a non-generic function type.
+//   void Function(List<T1>) t1d, // Error
+//                 ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:22:3: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   T4 t4a, // Error,
+//   ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:23:8: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   List<T4> t4b, // Error,
+//        ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:24:17: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   void Function(T4) t4c, // Error
+//                 ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:25:22: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   void Function(List<T4>) t4d, // Error
+//                      ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:18:3: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   T3 t3a, // Error
+//   ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:19:8: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   List<T3> t3b, // Error
+//        ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:20:17: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   void Function(T3) t3c, // Error
+//                 ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:21:22: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   void Function(List<T3>) t3d, // Error
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+import "alias_from_opt_in_lib.dart" as ali;
+
+import "org-dartlang-testcase:///alias_from_opt_in_lib.dart";
+
+static method test(<T extends core::Object? = dynamic>(T%) → void t1a, core::List<<T extends core::Object? = dynamic>(T%) → void> t1b, (<T extends core::Object? = dynamic>(T%) → void) → void t1c, (core::List<<T extends core::Object? = dynamic>(T%) → void>) → void t1d, (<T extends core::Object? = dynamic>(T%) → void) → void t2a, core::List<(<T extends core::Object? = dynamic>(T%) → void) → void> t2b, ((<T extends core::Object? = dynamic>(T%) → void) → void) → void t2c, (core::List<(<T extends core::Object? = dynamic>(T%) → void) → void>) → void t2d, core::List<<T extends core::Object? = dynamic>(T%) → void> t3a, core::List<core::List<<T extends core::Object? = dynamic>(T%) → void>> t3b, (core::List<<T extends core::Object? = dynamic>(T%) → void>) → void t3c, (core::List<core::List<<T extends core::Object? = dynamic>(T%) → void>>) → void t3d, ali::Class<<T extends core::Object? = dynamic>(T%) → void> t4a, core::List<ali::Class<<T extends core::Object? = dynamic>(T%) → void>> t4b, (ali::Class<<T extends core::Object? = dynamic>(T%) → void>) → void t4c, (core::List<ali::Class<<T extends core::Object? = dynamic>(T%) → void>>) → void t4d) → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+library /*isNonNullableByDefault*/;
+import self as ali;
+import "dart:core" as core;
+
+typedef T1 = <T extends core::Object? = dynamic>(T%) → void;
+typedef T2 = (<T extends core::Object? = dynamic>(T%) → void) → void;
+typedef T3 = core::List<<T extends core::Object? = dynamic>(T%) → void>;
+typedef T4<X extends <T extends core::Object? = dynamic>(T%) → void> = ali::Class<X>;
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → ali::Class<ali::Class::T%>
+    ;
+}
+static method test(<T extends core::Object? = dynamic>(T%) → void t1, <T extends core::Object? = dynamic>(T%) → void t2, core::List<<T extends core::Object? = dynamic>(T%) → void> t3) → dynamic
+  ;
+static method _#T4#new#tearOff<X extends <T extends core::Object? = dynamic>(T%) → void>() → ali::Class<ali::_#T4#new#tearOff::X>
+  return new ali::Class::•<ali::_#T4#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.weak.transformed.expect
new file mode 100644
index 0000000..0ef0673
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart.weak.transformed.expect
@@ -0,0 +1,110 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:11:3: Error: A generic function type can't be used as a type argument.
+// Try using a non-generic function type.
+//   List<T1> t1b, // Error
+//   ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:13:17: Error: A generic function type can't be used as a type argument.
+// Try using a non-generic function type.
+//   void Function(List<T1>) t1d, // Error
+//                 ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:22:3: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   T4 t4a, // Error,
+//   ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:23:8: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   List<T4> t4b, // Error,
+//        ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:24:17: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   void Function(T4) t4c, // Error
+//                 ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:25:22: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   void Function(List<T4>) t4d, // Error
+//                      ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:18:3: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   T3 t3a, // Error
+//   ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:19:8: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   List<T3> t3b, // Error
+//        ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:20:17: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   void Function(T3) t3c, // Error
+//                 ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:21:22: Error: Generic function type 'List<void Function<T>(T)>' used as a type argument through typedef 'T3'.
+//  - 'List' is from 'dart:core'.
+// Try providing a non-generic function type explicitly.
+//   void Function(List<T3>) t3d, // Error
+//                      ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:27:7: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   new T4(); // Error
+//       ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:28:4: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   <T4>[]; // Error
+//    ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:29:18: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   <void Function(T4)>[]; // Error
+//                  ^
+//
+// pkg/front_end/testcases/generic_metadata/alias_from_opt_in.dart:30:23: Error: Generic function type 'void Function<T>(T)' inferred as a type argument.
+// Try providing a non-generic function type explicitly.
+//   <void Function(List<T4>)>[]; // Error
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+import "alias_from_opt_in_lib.dart" as ali;
+
+import "org-dartlang-testcase:///alias_from_opt_in_lib.dart";
+
+static method test(<T extends core::Object? = dynamic>(T%) → void t1a, core::List<<T extends core::Object? = dynamic>(T%) → void> t1b, (<T extends core::Object? = dynamic>(T%) → void) → void t1c, (core::List<<T extends core::Object? = dynamic>(T%) → void>) → void t1d, (<T extends core::Object? = dynamic>(T%) → void) → void t2a, core::List<(<T extends core::Object? = dynamic>(T%) → void) → void> t2b, ((<T extends core::Object? = dynamic>(T%) → void) → void) → void t2c, (core::List<(<T extends core::Object? = dynamic>(T%) → void) → void>) → void t2d, core::List<<T extends core::Object? = dynamic>(T%) → void> t3a, core::List<core::List<<T extends core::Object? = dynamic>(T%) → void>> t3b, (core::List<<T extends core::Object? = dynamic>(T%) → void>) → void t3c, (core::List<core::List<<T extends core::Object? = dynamic>(T%) → void>>) → void t3d, ali::Class<<T extends core::Object? = dynamic>(T%) → void> t4a, core::List<ali::Class<<T extends core::Object? = dynamic>(T%) → void>> t4b, (ali::Class<<T extends core::Object? = dynamic>(T%) → void>) → void t4c, (core::List<ali::Class<<T extends core::Object? = dynamic>(T%) → void>>) → void t4d) → dynamic {
+  new ali::Class::•<<T extends core::Object? = dynamic>(T%) → void>();
+  core::_GrowableList::•<ali::Class<<T extends core::Object? = dynamic>(T%) → void>>(0);
+  core::_GrowableList::•<(ali::Class<<T extends core::Object? = dynamic>(T%) → void>) → void>(0);
+  core::_GrowableList::•<(core::List<ali::Class<<T extends core::Object? = dynamic>(T%) → void>>) → void>(0);
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as ali;
+import "dart:core" as core;
+
+typedef T1 = <T extends core::Object? = dynamic>(T%) → void;
+typedef T2 = (<T extends core::Object? = dynamic>(T%) → void) → void;
+typedef T3 = core::List<<T extends core::Object? = dynamic>(T%) → void>;
+typedef T4<X extends <T extends core::Object? = dynamic>(T%) → void> = ali::Class<X>;
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → ali::Class<ali::Class::T%>
+    : super core::Object::•()
+    ;
+}
+static method test(<T extends core::Object? = dynamic>(T%) → void t1, <T extends core::Object? = dynamic>(T%) → void t2, core::List<<T extends core::Object? = dynamic>(T%) → void> t3) → dynamic {
+  new ali::Class::•<<T extends core::Object? = dynamic>(T%) → void>();
+}
+static method _#T4#new#tearOff<X extends <T extends core::Object? = dynamic>(T%) → void>() → ali::Class<ali::_#T4#new#tearOff::X>
+  return new ali::Class::•<ali::_#T4#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/generic_metadata/alias_from_opt_in_lib.dart b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in_lib.dart
new file mode 100644
index 0000000..b1b273a
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/alias_from_opt_in_lib.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class<T> {}
+
+typedef T1 = void Function<T>(T);
+typedef T2 = void Function(void Function<T>(T));
+typedef T3 = List<void Function<T>(T)>;
+typedef T4<X extends void Function<T>(T)> = Class<X>;
+
+test(
+  T1 t1, // Ok
+  T1 t2, // Ok
+  T3 t3, // Ok
+) {
+  new T4(); // Ok
+}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.expect
index 3ed0854..cdeaa48 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.expect
@@ -12,16 +12,6 @@
 // class C<T extends A> {
 //         ^
 //
-// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:21:29: Error: Inferred type argument 'NotA' doesn't conform to the bound 'A' of the type variable 'T' on 'C'.
-//  - 'NotA' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
-//  - 'A' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   var /*@ type=C<NotA*>* */ x =
-//                             ^
-// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:12:9: Context: This is the type variable whose bound isn't conformed to.
-// class C<T extends A> {
-//         ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.modular.expect
index 3ed0854..cdeaa48 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.modular.expect
@@ -12,16 +12,6 @@
 // class C<T extends A> {
 //         ^
 //
-// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:21:29: Error: Inferred type argument 'NotA' doesn't conform to the bound 'A' of the type variable 'T' on 'C'.
-//  - 'NotA' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
-//  - 'A' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   var /*@ type=C<NotA*>* */ x =
-//                             ^
-// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:12:9: Context: This is the type variable whose bound isn't conformed to.
-// class C<T extends A> {
-//         ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.expect
index 69d5022..05a10e7 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:7: Error: Type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<Y>' of the type variable 'Y' on 'M0' in the supertype 'M0' of class 'M1 with M0'.
+// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:25: Error: Inferred type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<Y>' of the type variable 'Y' on 'M0'.
 //  - 'Comparable' is from 'dart:core'.
-// Try changing type arguments so that they conform to the bounds.
+// Try specifying type arguments explicitly so that they conform to the bounds.
 // class A extends M1 with M0 {}
-//       ^
+//                         ^
 // pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:7:13: Context: This is the type variable whose bound isn't conformed to.
 // class M0<X, Y extends Comparable<Y>> extends I<X> {}
 //             ^
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect
index 69d5022..05a10e7 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:7: Error: Type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<Y>' of the type variable 'Y' on 'M0' in the supertype 'M0' of class 'M1 with M0'.
+// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:25: Error: Inferred type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<Y>' of the type variable 'Y' on 'M0'.
 //  - 'Comparable' is from 'dart:core'.
-// Try changing type arguments so that they conform to the bounds.
+// Try specifying type arguments explicitly so that they conform to the bounds.
 // class A extends M1 with M0 {}
-//       ^
+//                         ^
 // pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:7:13: Context: This is the type variable whose bound isn't conformed to.
 // class M0<X, Y extends Comparable<Y>> extends I<X> {}
 //             ^
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.outline.expect
index c887609..98c5c87 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.outline.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:7: Error: Type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<Y>' of the type variable 'Y' on 'M0' in the supertype 'M0' of class 'M1 with M0'.
+// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:25: Error: Inferred type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<Y>' of the type variable 'Y' on 'M0'.
 //  - 'Comparable' is from 'dart:core'.
-// Try changing type arguments so that they conform to the bounds.
+// Try specifying type arguments explicitly so that they conform to the bounds.
 // class A extends M1 with M0 {}
-//       ^
+//                         ^
 // pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:7:13: Context: This is the type variable whose bound isn't conformed to.
 // class M0<X, Y extends Comparable<Y>> extends I<X> {}
 //             ^
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.transformed.expect
index c133ecb..06c6423 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.transformed.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:7: Error: Type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<Y>' of the type variable 'Y' on 'M0' in the supertype 'M0' of class 'M1 with M0'.
+// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:25: Error: Inferred type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<Y>' of the type variable 'Y' on 'M0'.
 //  - 'Comparable' is from 'dart:core'.
-// Try changing type arguments so that they conform to the bounds.
+// Try specifying type arguments explicitly so that they conform to the bounds.
 // class A extends M1 with M0 {}
-//       ^
+//                         ^
 // pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:7:13: Context: This is the type variable whose bound isn't conformed to.
 // class M0<X, Y extends Comparable<Y>> extends I<X> {}
 //             ^
diff --git a/pkg/front_end/testcases/modular.status b/pkg/front_end/testcases/modular.status
index a3e7ee6..b2aa3a1 100644
--- a/pkg/front_end/testcases/modular.status
+++ b/pkg/front_end/testcases/modular.status
@@ -23,6 +23,7 @@
 extensions/extension_setter_error: TypeCheckError
 general/abstract_members: TypeCheckError
 general/bounded_implicit_instantiation: TypeCheckError
+general/bounds_instances: TypeCheckError
 general/bug30695: TypeCheckError
 general/covariant_field: TypeCheckError
 general/crashes/crash_02/main: Crash
diff --git a/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.expect b/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.expect
index ab741a5..0926cb3 100644
--- a/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.expect
@@ -2,42 +2,42 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:7:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-// foo(A<num?> a) {} // Error
-//             ^
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the return type.
-// Try changing type arguments so that they conform to the bounds.
-// A<num?>? bar() {} // Error
-//             ^
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:11:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:11:15: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // baz<T extends A<num?>>() {} // Error
+//               ^
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:15:19: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// class C<T extends A<num?>> {} // Error
+//                   ^
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:7:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// foo(A<num?> a) {} // Error
 //     ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:13:7: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:1: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// class B extends A<num?> {} // Error
-//       ^
+// A<num?>? bar() {} // Error
+// ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:15:9: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:13:17: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// class C<T extends A<num?>> {} // Error
-//         ^
+// class B extends A<num?> {} // Error
+//                 ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.transformed.expect
index ab741a5..0926cb3 100644
--- a/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.transformed.expect
@@ -2,42 +2,42 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:7:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-// foo(A<num?> a) {} // Error
-//             ^
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the return type.
-// Try changing type arguments so that they conform to the bounds.
-// A<num?>? bar() {} // Error
-//             ^
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:11:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:11:15: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // baz<T extends A<num?>>() {} // Error
+//               ^
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:15:19: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// class C<T extends A<num?>> {} // Error
+//                   ^
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:7:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// foo(A<num?> a) {} // Error
 //     ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:13:7: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:1: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// class B extends A<num?> {} // Error
-//       ^
+// A<num?>? bar() {} // Error
+// ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:15:9: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:13:17: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// class C<T extends A<num?>> {} // Error
-//         ^
+// class B extends A<num?> {} // Error
+//                 ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.expect b/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.expect
index ab741a5..0926cb3 100644
--- a/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.expect
@@ -2,42 +2,42 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:7:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-// foo(A<num?> a) {} // Error
-//             ^
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the return type.
-// Try changing type arguments so that they conform to the bounds.
-// A<num?>? bar() {} // Error
-//             ^
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:11:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:11:15: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // baz<T extends A<num?>>() {} // Error
+//               ^
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:15:19: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// class C<T extends A<num?>> {} // Error
+//                   ^
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:7:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// foo(A<num?> a) {} // Error
 //     ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:13:7: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:1: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// class B extends A<num?> {} // Error
-//       ^
+// A<num?>? bar() {} // Error
+// ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:15:9: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:13:17: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// class C<T extends A<num?>> {} // Error
-//         ^
+// class B extends A<num?> {} // Error
+//                 ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.modular.expect
index ab741a5..0926cb3 100644
--- a/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.modular.expect
@@ -2,42 +2,42 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:7:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-// foo(A<num?> a) {} // Error
-//             ^
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the return type.
-// Try changing type arguments so that they conform to the bounds.
-// A<num?>? bar() {} // Error
-//             ^
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:11:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:11:15: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // baz<T extends A<num?>>() {} // Error
+//               ^
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:15:19: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// class C<T extends A<num?>> {} // Error
+//                   ^
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:7:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// foo(A<num?> a) {} // Error
 //     ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:13:7: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:1: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// class B extends A<num?> {} // Error
-//       ^
+// A<num?>? bar() {} // Error
+// ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:15:9: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:13:17: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// class C<T extends A<num?>> {} // Error
-//         ^
+// class B extends A<num?> {} // Error
+//                 ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.outline.expect
index be5c01e..47d8657 100644
--- a/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.outline.expect
@@ -2,42 +2,42 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:7:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-// foo(A<num?> a) {} // Error
-//             ^
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the return type.
-// Try changing type arguments so that they conform to the bounds.
-// A<num?>? bar() {} // Error
-//             ^
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:11:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:11:15: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // baz<T extends A<num?>>() {} // Error
+//               ^
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:15:19: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// class C<T extends A<num?>> {} // Error
+//                   ^
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:7:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// foo(A<num?> a) {} // Error
 //     ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:13:7: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:1: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// class B extends A<num?> {} // Error
-//       ^
+// A<num?>? bar() {} // Error
+// ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:15:9: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:13:17: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// class C<T extends A<num?>> {} // Error
-//         ^
+// class B extends A<num?> {} // Error
+//                 ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.transformed.expect
index ab741a5..0926cb3 100644
--- a/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.transformed.expect
@@ -2,42 +2,42 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:7:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
-// Try changing type arguments so that they conform to the bounds.
-// foo(A<num?> a) {} // Error
-//             ^
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the return type.
-// Try changing type arguments so that they conform to the bounds.
-// A<num?>? bar() {} // Error
-//             ^
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:11:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:11:15: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // baz<T extends A<num?>>() {} // Error
+//               ^
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:15:19: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// class C<T extends A<num?>> {} // Error
+//                   ^
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:7:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// foo(A<num?> a) {} // Error
 //     ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:13:7: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:1: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// class B extends A<num?> {} // Error
-//       ^
+// A<num?>? bar() {} // Error
+// ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:15:9: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:13:17: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// class C<T extends A<num?>> {} // Error
-//         ^
+// class B extends A<num?> {} // Error
+//                 ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/issue42429.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42429.dart.strong.expect
index 717c859..0cbdeae 100644
--- a/pkg/front_end/testcases/nnbd/issue42429.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42429.dart.strong.expect
@@ -2,192 +2,192 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:13:13: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:13:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<Object> aObject; // Error.
-//             ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:14:11: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:14:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num?> aNumNullable; // Error.
-//           ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:15:11: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:15:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<int?> aIntNullable; // Error.
-//           ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:16:11: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:16:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<Null> aNull; // Error.
-//           ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:17:21: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:17:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<Object> fArgumentObject; // Error.
-//                     ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:18:19: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:18:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<num?> fArgumentNumNullable; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:19:19: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:19:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<int?> fArgumentIntNullable; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:20:19: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:20:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<Null> fArgumentNull; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:21:19: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:21:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<Object> fReturnObject; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:22:17: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:22:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<num?> fReturnNumNullable; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:23:17: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:23:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<int?> fReturnIntNullable; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:24:17: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:24:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<Null> fReturnNull; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:25:17: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:25:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<Object> fBothObject; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:26:15: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:26:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<num?> fBothNumNullable; // Error.
-//               ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:27:15: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:27:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<int?> fBothIntNullable; // Error.
-//               ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:28:15: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:28:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<Null> fBothNull; // Error.
-//               ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:29:20: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:29:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<Object> fNowhereObject; // Error.
-//                    ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:30:18: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:30:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<num?> fNowhereNumNullable; // Error.
-//                  ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:31:18: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:31:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<int?> fNowhereIntNullable; // Error.
-//                  ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:32:18: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:32:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<Null> fNowhereNull; // Error.
-//                  ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:33:22: Error: Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:33:3: Error: Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<Object?> fArgumentObjectNullable; // Error.
-//                      ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:34:22: Error: Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:34:3: Error: Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<dynamic> fArgumentDynamic; // Error.
-//                      ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:35:19: Error: Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:35:3: Error: Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<void> fArgumentVoid; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
diff --git a/pkg/front_end/testcases/nnbd/issue42429.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42429.dart.strong.transformed.expect
index 717c859..0cbdeae 100644
--- a/pkg/front_end/testcases/nnbd/issue42429.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42429.dart.strong.transformed.expect
@@ -2,192 +2,192 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:13:13: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:13:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<Object> aObject; // Error.
-//             ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:14:11: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:14:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num?> aNumNullable; // Error.
-//           ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:15:11: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:15:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<int?> aIntNullable; // Error.
-//           ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:16:11: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:16:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<Null> aNull; // Error.
-//           ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:17:21: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:17:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<Object> fArgumentObject; // Error.
-//                     ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:18:19: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:18:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<num?> fArgumentNumNullable; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:19:19: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:19:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<int?> fArgumentIntNullable; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:20:19: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:20:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<Null> fArgumentNull; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:21:19: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:21:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<Object> fReturnObject; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:22:17: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:22:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<num?> fReturnNumNullable; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:23:17: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:23:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<int?> fReturnIntNullable; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:24:17: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:24:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<Null> fReturnNull; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:25:17: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:25:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<Object> fBothObject; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:26:15: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:26:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<num?> fBothNumNullable; // Error.
-//               ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:27:15: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:27:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<int?> fBothIntNullable; // Error.
-//               ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:28:15: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:28:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<Null> fBothNull; // Error.
-//               ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:29:20: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:29:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<Object> fNowhereObject; // Error.
-//                    ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:30:18: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:30:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<num?> fNowhereNumNullable; // Error.
-//                  ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:31:18: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:31:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<int?> fNowhereIntNullable; // Error.
-//                  ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:32:18: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:32:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<Null> fNowhereNull; // Error.
-//                  ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:33:22: Error: Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:33:3: Error: Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<Object?> fArgumentObjectNullable; // Error.
-//                      ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:34:22: Error: Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:34:3: Error: Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<dynamic> fArgumentDynamic; // Error.
-//                      ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:35:19: Error: Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:35:3: Error: Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<void> fArgumentVoid; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
diff --git a/pkg/front_end/testcases/nnbd/issue42429.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42429.dart.weak.expect
index 717c859..0cbdeae 100644
--- a/pkg/front_end/testcases/nnbd/issue42429.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42429.dart.weak.expect
@@ -2,192 +2,192 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:13:13: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:13:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<Object> aObject; // Error.
-//             ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:14:11: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:14:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num?> aNumNullable; // Error.
-//           ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:15:11: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:15:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<int?> aIntNullable; // Error.
-//           ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:16:11: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:16:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<Null> aNull; // Error.
-//           ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:17:21: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:17:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<Object> fArgumentObject; // Error.
-//                     ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:18:19: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:18:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<num?> fArgumentNumNullable; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:19:19: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:19:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<int?> fArgumentIntNullable; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:20:19: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:20:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<Null> fArgumentNull; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:21:19: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:21:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<Object> fReturnObject; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:22:17: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:22:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<num?> fReturnNumNullable; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:23:17: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:23:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<int?> fReturnIntNullable; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:24:17: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:24:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<Null> fReturnNull; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:25:17: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:25:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<Object> fBothObject; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:26:15: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:26:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<num?> fBothNumNullable; // Error.
-//               ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:27:15: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:27:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<int?> fBothIntNullable; // Error.
-//               ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:28:15: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:28:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<Null> fBothNull; // Error.
-//               ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:29:20: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:29:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<Object> fNowhereObject; // Error.
-//                    ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:30:18: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:30:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<num?> fNowhereNumNullable; // Error.
-//                  ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:31:18: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:31:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<int?> fNowhereIntNullable; // Error.
-//                  ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:32:18: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:32:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<Null> fNowhereNull; // Error.
-//                  ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:33:22: Error: Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:33:3: Error: Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<Object?> fArgumentObjectNullable; // Error.
-//                      ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:34:22: Error: Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:34:3: Error: Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<dynamic> fArgumentDynamic; // Error.
-//                      ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:35:19: Error: Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:35:3: Error: Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<void> fArgumentVoid; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
diff --git a/pkg/front_end/testcases/nnbd/issue42429.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42429.dart.weak.modular.expect
index 717c859..0cbdeae 100644
--- a/pkg/front_end/testcases/nnbd/issue42429.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue42429.dart.weak.modular.expect
@@ -2,192 +2,192 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:13:13: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:13:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<Object> aObject; // Error.
-//             ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:14:11: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:14:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num?> aNumNullable; // Error.
-//           ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:15:11: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:15:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<int?> aIntNullable; // Error.
-//           ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:16:11: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:16:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<Null> aNull; // Error.
-//           ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:17:21: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:17:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<Object> fArgumentObject; // Error.
-//                     ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:18:19: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:18:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<num?> fArgumentNumNullable; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:19:19: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:19:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<int?> fArgumentIntNullable; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:20:19: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:20:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<Null> fArgumentNull; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:21:19: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:21:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<Object> fReturnObject; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:22:17: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:22:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<num?> fReturnNumNullable; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:23:17: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:23:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<int?> fReturnIntNullable; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:24:17: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:24:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<Null> fReturnNull; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:25:17: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:25:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<Object> fBothObject; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:26:15: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:26:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<num?> fBothNumNullable; // Error.
-//               ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:27:15: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:27:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<int?> fBothIntNullable; // Error.
-//               ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:28:15: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:28:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<Null> fBothNull; // Error.
-//               ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:29:20: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:29:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<Object> fNowhereObject; // Error.
-//                    ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:30:18: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:30:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<num?> fNowhereNumNullable; // Error.
-//                  ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:31:18: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:31:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<int?> fNowhereIntNullable; // Error.
-//                  ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:32:18: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:32:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<Null> fNowhereNull; // Error.
-//                  ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:33:22: Error: Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:33:3: Error: Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<Object?> fArgumentObjectNullable; // Error.
-//                      ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:34:22: Error: Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:34:3: Error: Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<dynamic> fArgumentDynamic; // Error.
-//                      ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:35:19: Error: Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:35:3: Error: Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<void> fArgumentVoid; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
diff --git a/pkg/front_end/testcases/nnbd/issue42429.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42429.dart.weak.transformed.expect
index 717c859..0cbdeae 100644
--- a/pkg/front_end/testcases/nnbd/issue42429.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42429.dart.weak.transformed.expect
@@ -2,192 +2,192 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:13:13: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:13:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<Object> aObject; // Error.
-//             ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:14:11: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:14:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num?> aNumNullable; // Error.
-//           ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:15:11: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:15:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<int?> aIntNullable; // Error.
-//           ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:16:11: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:16:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<Null> aNull; // Error.
-//           ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<T extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:17:21: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:17:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<Object> fArgumentObject; // Error.
-//                     ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:18:19: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:18:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<num?> fArgumentNumNullable; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:19:19: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:19:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<int?> fArgumentIntNullable; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:20:19: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:20:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<Null> fArgumentNull; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:21:19: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:21:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<Object> fReturnObject; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:22:17: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:22:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<num?> fReturnNumNullable; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:23:17: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:23:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<int?> fReturnIntNullable; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:24:17: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:24:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
 // Try changing type arguments so that they conform to the bounds.
 //   FReturn<Null> fReturnNull; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
 // typedef FReturn<X extends num> = X Function();
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:25:17: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:25:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<Object> fBothObject; // Error.
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:26:15: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:26:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<num?> fBothNumNullable; // Error.
-//               ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:27:15: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:27:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<int?> fBothIntNullable; // Error.
-//               ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:28:15: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:28:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
 // Try changing type arguments so that they conform to the bounds.
 //   FBoth<Null> fBothNull; // Error.
-//               ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
 // typedef FBoth<X extends num> = X Function(X);
 //               ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:29:20: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:29:3: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<Object> fNowhereObject; // Error.
-//                    ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:30:18: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:30:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<num?> fNowhereNumNullable; // Error.
-//                  ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:31:18: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:31:3: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<int?> fNowhereIntNullable; // Error.
-//                  ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:32:18: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:32:3: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
 // Try changing type arguments so that they conform to the bounds.
 //   FNowhere<Null> fNowhereNull; // Error.
-//                  ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:33:22: Error: Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:33:3: Error: Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 //  - 'Object' is from 'dart:core'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<Object?> fArgumentObjectNullable; // Error.
-//                      ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:34:22: Error: Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:34:3: Error: Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<dynamic> fArgumentDynamic; // Error.
-//                      ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/issue42429.dart:35:19: Error: Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// pkg/front_end/testcases/nnbd/issue42429.dart:35:3: Error: Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
 // Try changing type arguments so that they conform to the bounds.
 //   FArgument<void> fArgumentVoid; // Error.
-//                   ^
+//   ^
 // pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef FArgument<X extends num> = Function(X);
 //                   ^
diff --git a/pkg/front_end/testcases/nnbd/issue42434.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42434.dart.strong.expect
index e263ad8..1495f43 100644
--- a/pkg/front_end/testcases/nnbd/issue42434.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42434.dart.strong.expect
@@ -2,13 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue42434.dart:7:21: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42434.dart:7:41: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>' of the type variable 'X' on 'A'.
 //  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
 //  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef AAlias<X> = Function<X1 extends A<X>> ();
-//                     ^
+//                                         ^
 // pkg/front_end/testcases/nnbd/issue42434.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/issue42434.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42434.dart.strong.transformed.expect
index e263ad8..1495f43 100644
--- a/pkg/front_end/testcases/nnbd/issue42434.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42434.dart.strong.transformed.expect
@@ -2,13 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue42434.dart:7:21: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42434.dart:7:41: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>' of the type variable 'X' on 'A'.
 //  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
 //  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef AAlias<X> = Function<X1 extends A<X>> ();
-//                     ^
+//                                         ^
 // pkg/front_end/testcases/nnbd/issue42434.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/issue42434.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42434.dart.weak.expect
index e263ad8..1495f43 100644
--- a/pkg/front_end/testcases/nnbd/issue42434.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42434.dart.weak.expect
@@ -2,13 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue42434.dart:7:21: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42434.dart:7:41: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>' of the type variable 'X' on 'A'.
 //  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
 //  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef AAlias<X> = Function<X1 extends A<X>> ();
-//                     ^
+//                                         ^
 // pkg/front_end/testcases/nnbd/issue42434.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/issue42434.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42434.dart.weak.modular.expect
index e263ad8..1495f43 100644
--- a/pkg/front_end/testcases/nnbd/issue42434.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue42434.dart.weak.modular.expect
@@ -2,13 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue42434.dart:7:21: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42434.dart:7:41: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>' of the type variable 'X' on 'A'.
 //  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
 //  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef AAlias<X> = Function<X1 extends A<X>> ();
-//                     ^
+//                                         ^
 // pkg/front_end/testcases/nnbd/issue42434.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/issue42434.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42434.dart.weak.outline.expect
index 46e4efc..ec07cf7 100644
--- a/pkg/front_end/testcases/nnbd/issue42434.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42434.dart.weak.outline.expect
@@ -2,13 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue42434.dart:7:21: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42434.dart:7:41: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>' of the type variable 'X' on 'A'.
 //  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
 //  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef AAlias<X> = Function<X1 extends A<X>> ();
-//                     ^
+//                                         ^
 // pkg/front_end/testcases/nnbd/issue42434.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/issue42434.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42434.dart.weak.transformed.expect
index e263ad8..1495f43 100644
--- a/pkg/front_end/testcases/nnbd/issue42434.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42434.dart.weak.transformed.expect
@@ -2,13 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue42434.dart:7:21: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42434.dart:7:41: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>' of the type variable 'X' on 'A'.
 //  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
 //  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef AAlias<X> = Function<X1 extends A<X>> ();
-//                     ^
+//                                         ^
 // pkg/front_end/testcases/nnbd/issue42434.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/issue42434_2.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42434_2.dart.strong.expect
index 88588f6..a478b42 100644
--- a/pkg/front_end/testcases/nnbd/issue42434_2.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42434_2.dart.strong.expect
@@ -2,13 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue42434_2.dart:5:21: Error: Type argument 'X/*1*/' doesn't conform to the bound 'B<X/*2*/>' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42434_2.dart:5:41: Error: Type argument 'X/*1*/' doesn't conform to the bound 'B<X/*2*/>' of the type variable 'X' on 'A'.
 //  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
 //  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef AAlias<X> = Function<X1 extends A<X>> ();
-//                     ^
+//                                         ^
 // pkg/front_end/testcases/nnbd/issue42434_2.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef A<X extends B<X>> = Function();
 //           ^
diff --git a/pkg/front_end/testcases/nnbd/issue42434_2.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42434_2.dart.strong.transformed.expect
index 88588f6..a478b42 100644
--- a/pkg/front_end/testcases/nnbd/issue42434_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42434_2.dart.strong.transformed.expect
@@ -2,13 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue42434_2.dart:5:21: Error: Type argument 'X/*1*/' doesn't conform to the bound 'B<X/*2*/>' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42434_2.dart:5:41: Error: Type argument 'X/*1*/' doesn't conform to the bound 'B<X/*2*/>' of the type variable 'X' on 'A'.
 //  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
 //  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef AAlias<X> = Function<X1 extends A<X>> ();
-//                     ^
+//                                         ^
 // pkg/front_end/testcases/nnbd/issue42434_2.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef A<X extends B<X>> = Function();
 //           ^
diff --git a/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.expect
index 88588f6..a478b42 100644
--- a/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.expect
@@ -2,13 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue42434_2.dart:5:21: Error: Type argument 'X/*1*/' doesn't conform to the bound 'B<X/*2*/>' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42434_2.dart:5:41: Error: Type argument 'X/*1*/' doesn't conform to the bound 'B<X/*2*/>' of the type variable 'X' on 'A'.
 //  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
 //  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef AAlias<X> = Function<X1 extends A<X>> ();
-//                     ^
+//                                         ^
 // pkg/front_end/testcases/nnbd/issue42434_2.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef A<X extends B<X>> = Function();
 //           ^
diff --git a/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.modular.expect
index 88588f6..a478b42 100644
--- a/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.modular.expect
@@ -2,13 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue42434_2.dart:5:21: Error: Type argument 'X/*1*/' doesn't conform to the bound 'B<X/*2*/>' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42434_2.dart:5:41: Error: Type argument 'X/*1*/' doesn't conform to the bound 'B<X/*2*/>' of the type variable 'X' on 'A'.
 //  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
 //  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef AAlias<X> = Function<X1 extends A<X>> ();
-//                     ^
+//                                         ^
 // pkg/front_end/testcases/nnbd/issue42434_2.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef A<X extends B<X>> = Function();
 //           ^
diff --git a/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.outline.expect
index d314070..7167cc7 100644
--- a/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.outline.expect
@@ -2,13 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue42434_2.dart:5:21: Error: Type argument 'X/*1*/' doesn't conform to the bound 'B<X/*2*/>' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42434_2.dart:5:41: Error: Type argument 'X/*1*/' doesn't conform to the bound 'B<X/*2*/>' of the type variable 'X' on 'A'.
 //  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
 //  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef AAlias<X> = Function<X1 extends A<X>> ();
-//                     ^
+//                                         ^
 // pkg/front_end/testcases/nnbd/issue42434_2.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef A<X extends B<X>> = Function();
 //           ^
diff --git a/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.transformed.expect
index 88588f6..a478b42 100644
--- a/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.transformed.expect
@@ -2,13 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue42434_2.dart:5:21: Error: Type argument 'X/*1*/' doesn't conform to the bound 'B<X/*2*/>' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue42434_2.dart:5:41: Error: Type argument 'X/*1*/' doesn't conform to the bound 'B<X/*2*/>' of the type variable 'X' on 'A'.
 //  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
 //  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // typedef AAlias<X> = Function<X1 extends A<X>> ();
-//                     ^
+//                                         ^
 // pkg/front_end/testcases/nnbd/issue42434_2.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef A<X extends B<X>> = Function();
 //           ^
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
index 46f6782..c89209d 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
@@ -2,27 +2,27 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:10:53: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:10:41: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   void method1<Y extends A<Y>?>(A<Y> a, A<A<Null>>? b) {
-//                                                     ^
+//                                         ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:15:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:34: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                       ^
+//                                  ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:15:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:42: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                                     ^
+//                                          ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
@@ -38,158 +38,158 @@
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:23:7: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:36: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                    ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:44: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                            ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:34: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                  ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:42: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                          ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:23:40: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A'.
 //  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 //  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // class B<X extends A<Null>?> implements A<X> {
-//       ^
+//                                        ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:24:41: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
-//                                         ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends A<X>?> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:24:56: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
-//                                                        ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends A<X>?> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:29:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                       ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class D<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:29:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                                     ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class D<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:36:34: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:36:22: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   factory C.redirect(A<A<Null>>? a) = C.internal;
-//                                  ^
+//                      ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:38:30: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:38:18: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   factory C.fact(A<A<Null>>? a) {
-//                              ^
+//                  ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:12:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:12:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? d;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:16:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:16:5: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<Y>? c;
-//           ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:17:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:17:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? d;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:25:11: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:25:5: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<Y>? c;
-//           ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:26:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:26:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? d;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:30:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:30:5: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<Y>? c;
-//           ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:31:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:31:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? d;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:39:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:39:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? b;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:40:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:40:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? c;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:45:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:45:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? a;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:46:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:46:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? b;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
index 46f6782..c89209d 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
@@ -2,27 +2,27 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:10:53: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:10:41: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   void method1<Y extends A<Y>?>(A<Y> a, A<A<Null>>? b) {
-//                                                     ^
+//                                         ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:15:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:34: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                       ^
+//                                  ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:15:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:42: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                                     ^
+//                                          ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
@@ -38,158 +38,158 @@
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:23:7: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:36: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                    ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:44: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                            ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:34: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                  ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:42: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                          ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:23:40: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A'.
 //  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 //  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // class B<X extends A<Null>?> implements A<X> {
-//       ^
+//                                        ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:24:41: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
-//                                         ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends A<X>?> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:24:56: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
-//                                                        ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends A<X>?> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:29:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                       ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class D<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:29:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                                     ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class D<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:36:34: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:36:22: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   factory C.redirect(A<A<Null>>? a) = C.internal;
-//                                  ^
+//                      ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:38:30: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:38:18: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   factory C.fact(A<A<Null>>? a) {
-//                              ^
+//                  ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:12:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:12:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? d;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:16:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:16:5: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<Y>? c;
-//           ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:17:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:17:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? d;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:25:11: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:25:5: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<Y>? c;
-//           ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:26:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:26:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? d;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:30:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:30:5: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<Y>? c;
-//           ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:31:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:31:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? d;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:39:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:39:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? b;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:40:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:40:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? c;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:45:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:45:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? a;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:46:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:46:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? b;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
index 46f6782..c89209d 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
@@ -2,27 +2,27 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:10:53: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:10:41: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   void method1<Y extends A<Y>?>(A<Y> a, A<A<Null>>? b) {
-//                                                     ^
+//                                         ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:15:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:34: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                       ^
+//                                  ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:15:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:42: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                                     ^
+//                                          ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
@@ -38,158 +38,158 @@
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:23:7: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:36: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                    ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:44: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                            ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:34: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                  ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:42: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                          ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:23:40: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A'.
 //  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 //  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // class B<X extends A<Null>?> implements A<X> {
-//       ^
+//                                        ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:24:41: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
-//                                         ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends A<X>?> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:24:56: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
-//                                                        ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends A<X>?> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:29:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                       ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class D<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:29:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                                     ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class D<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:36:34: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:36:22: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   factory C.redirect(A<A<Null>>? a) = C.internal;
-//                                  ^
+//                      ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:38:30: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:38:18: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   factory C.fact(A<A<Null>>? a) {
-//                              ^
+//                  ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:12:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:12:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? d;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:16:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:16:5: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<Y>? c;
-//           ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:17:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:17:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? d;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:25:11: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:25:5: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<Y>? c;
-//           ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:26:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:26:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? d;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:30:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:30:5: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<Y>? c;
-//           ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:31:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:31:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? d;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:39:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:39:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? b;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:40:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:40:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? c;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:45:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:45:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? a;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:46:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:46:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? b;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.modular.expect
index 46f6782..c89209d 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.modular.expect
@@ -2,27 +2,27 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:10:53: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:10:41: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   void method1<Y extends A<Y>?>(A<Y> a, A<A<Null>>? b) {
-//                                                     ^
+//                                         ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:15:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:34: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                       ^
+//                                  ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:15:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:42: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                                     ^
+//                                          ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
@@ -38,158 +38,158 @@
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:23:7: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:36: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                    ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:44: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                            ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:34: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                  ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:42: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                          ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:23:40: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A'.
 //  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 //  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // class B<X extends A<Null>?> implements A<X> {
-//       ^
+//                                        ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:24:41: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
-//                                         ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends A<X>?> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:24:56: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
-//                                                        ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends A<X>?> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:29:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                       ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class D<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:29:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                                     ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class D<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:36:34: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:36:22: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   factory C.redirect(A<A<Null>>? a) = C.internal;
-//                                  ^
+//                      ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:38:30: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:38:18: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   factory C.fact(A<A<Null>>? a) {
-//                              ^
+//                  ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:12:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:12:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? d;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:16:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:16:5: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<Y>? c;
-//           ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:17:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:17:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? d;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:25:11: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:25:5: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<Y>? c;
-//           ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:26:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:26:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? d;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:30:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:30:5: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<Y>? c;
-//           ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:31:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:31:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? d;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:39:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:39:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? b;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:40:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:40:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? c;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:45:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:45:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? a;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:46:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:46:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? b;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.outline.expect
index ffca4b4..07d69b7 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.outline.expect
@@ -2,27 +2,27 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:10:53: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:10:41: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   void method1<Y extends A<Y>?>(A<Y> a, A<A<Null>>? b) {
-//                                                     ^
+//                                         ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:15:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:34: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                       ^
+//                                  ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:15:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:42: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                                     ^
+//                                          ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
@@ -38,65 +38,65 @@
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:23:7: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:36: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                    ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:44: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                            ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:34: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                  ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:42: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                          ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:23:40: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A'.
 //  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 //  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // class B<X extends A<Null>?> implements A<X> {
-//       ^
+//                                        ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:24:41: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
-//                                         ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends A<X>?> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:24:56: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
-//                                                        ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends A<X>?> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:29:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                       ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class D<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:29:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                                     ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class D<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:36:34: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:36:22: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   factory C.redirect(A<A<Null>>? a) = C.internal;
-//                                  ^
+//                      ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:38:30: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:38:18: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   factory C.fact(A<A<Null>>? a) {
-//                              ^
+//                  ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
index 46f6782..c89209d 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
@@ -2,27 +2,27 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:10:53: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:10:41: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   void method1<Y extends A<Y>?>(A<Y> a, A<A<Null>>? b) {
-//                                                     ^
+//                                         ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:15:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:34: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                       ^
+//                                  ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:15:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:42: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                                     ^
+//                                          ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
@@ -38,158 +38,158 @@
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:23:7: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:36: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                    ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:44: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                            ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:34: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                  ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:42: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                          ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:23:40: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A'.
 //  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 //  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // class B<X extends A<Null>?> implements A<X> {
-//       ^
+//                                        ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:24:41: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
-//                                         ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends A<X>?> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:24:56: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
-//                                                        ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
-// class A<X extends A<X>?> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:29:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                       ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class D<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:29:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
-// Try changing type arguments so that they conform to the bounds.
-//   void method2<Y extends String>(D<Y> a, D<String>? b) {
-//                                                     ^
-// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
-// class D<X extends num> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/issue43211.dart:36:34: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:36:22: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   factory C.redirect(A<A<Null>>? a) = C.internal;
-//                                  ^
+//                      ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:38:30: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:38:18: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   factory C.fact(A<A<Null>>? a) {
-//                              ^
+//                  ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:12:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:12:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? d;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:16:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:16:5: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<Y>? c;
-//           ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:17:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:17:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? d;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:25:11: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:25:5: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<Y>? c;
-//           ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:26:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:26:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? d;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:30:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:30:5: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<Y>? c;
-//           ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:31:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:31:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? d;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:39:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:39:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? b;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:40:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:40:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? c;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:45:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:45:5: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //     A<A<Null>>? a;
-//                 ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends A<X>?> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/issue43211.dart:46:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// pkg/front_end/testcases/nnbd/issue43211.dart:46:5: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
 // Try changing type arguments so that they conform to the bounds.
 //     D<String>? b;
-//                ^
+//     ^
 // pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class D<X extends num> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/issue44455.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue44455.dart.strong.expect
index d0065b3..4c7be00 100644
--- a/pkg/front_end/testcases/nnbd/issue44455.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue44455.dart.strong.expect
@@ -2,18 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue44455.dart:6:9: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F'.
+// pkg/front_end/testcases/nnbd/issue44455.dart:6:19: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F'.
 // Try changing type arguments so that they conform to the bounds.
 // class A<X extends F<X>> {}
-//         ^
+//                   ^
 // pkg/front_end/testcases/nnbd/issue44455.dart:5:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<Y extends num> = Y Function();
 //           ^
 //
-// pkg/front_end/testcases/nnbd/issue44455.dart:8:10: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F2'.
+// pkg/front_end/testcases/nnbd/issue44455.dart:8:20: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F2'.
 // Try changing type arguments so that they conform to the bounds.
 // class A2<X extends F2<X>> {}
-//          ^
+//                    ^
 // pkg/front_end/testcases/nnbd/issue44455.dart:9:12: Context: This is the type variable whose bound isn't conformed to.
 // typedef F2<Y extends num> = Y Function();
 //            ^
diff --git a/pkg/front_end/testcases/nnbd/issue44455.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue44455.dart.strong.transformed.expect
index d0065b3..4c7be00 100644
--- a/pkg/front_end/testcases/nnbd/issue44455.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue44455.dart.strong.transformed.expect
@@ -2,18 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue44455.dart:6:9: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F'.
+// pkg/front_end/testcases/nnbd/issue44455.dart:6:19: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F'.
 // Try changing type arguments so that they conform to the bounds.
 // class A<X extends F<X>> {}
-//         ^
+//                   ^
 // pkg/front_end/testcases/nnbd/issue44455.dart:5:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<Y extends num> = Y Function();
 //           ^
 //
-// pkg/front_end/testcases/nnbd/issue44455.dart:8:10: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F2'.
+// pkg/front_end/testcases/nnbd/issue44455.dart:8:20: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F2'.
 // Try changing type arguments so that they conform to the bounds.
 // class A2<X extends F2<X>> {}
-//          ^
+//                    ^
 // pkg/front_end/testcases/nnbd/issue44455.dart:9:12: Context: This is the type variable whose bound isn't conformed to.
 // typedef F2<Y extends num> = Y Function();
 //            ^
diff --git a/pkg/front_end/testcases/nnbd/issue44455.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue44455.dart.weak.expect
index d0065b3..4c7be00 100644
--- a/pkg/front_end/testcases/nnbd/issue44455.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue44455.dart.weak.expect
@@ -2,18 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue44455.dart:6:9: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F'.
+// pkg/front_end/testcases/nnbd/issue44455.dart:6:19: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F'.
 // Try changing type arguments so that they conform to the bounds.
 // class A<X extends F<X>> {}
-//         ^
+//                   ^
 // pkg/front_end/testcases/nnbd/issue44455.dart:5:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<Y extends num> = Y Function();
 //           ^
 //
-// pkg/front_end/testcases/nnbd/issue44455.dart:8:10: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F2'.
+// pkg/front_end/testcases/nnbd/issue44455.dart:8:20: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F2'.
 // Try changing type arguments so that they conform to the bounds.
 // class A2<X extends F2<X>> {}
-//          ^
+//                    ^
 // pkg/front_end/testcases/nnbd/issue44455.dart:9:12: Context: This is the type variable whose bound isn't conformed to.
 // typedef F2<Y extends num> = Y Function();
 //            ^
diff --git a/pkg/front_end/testcases/nnbd/issue44455.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue44455.dart.weak.modular.expect
index d0065b3..4c7be00 100644
--- a/pkg/front_end/testcases/nnbd/issue44455.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue44455.dart.weak.modular.expect
@@ -2,18 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue44455.dart:6:9: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F'.
+// pkg/front_end/testcases/nnbd/issue44455.dart:6:19: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F'.
 // Try changing type arguments so that they conform to the bounds.
 // class A<X extends F<X>> {}
-//         ^
+//                   ^
 // pkg/front_end/testcases/nnbd/issue44455.dart:5:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<Y extends num> = Y Function();
 //           ^
 //
-// pkg/front_end/testcases/nnbd/issue44455.dart:8:10: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F2'.
+// pkg/front_end/testcases/nnbd/issue44455.dart:8:20: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F2'.
 // Try changing type arguments so that they conform to the bounds.
 // class A2<X extends F2<X>> {}
-//          ^
+//                    ^
 // pkg/front_end/testcases/nnbd/issue44455.dart:9:12: Context: This is the type variable whose bound isn't conformed to.
 // typedef F2<Y extends num> = Y Function();
 //            ^
diff --git a/pkg/front_end/testcases/nnbd/issue44455.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue44455.dart.weak.outline.expect
index 5fc32cd..2f4ff7f 100644
--- a/pkg/front_end/testcases/nnbd/issue44455.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue44455.dart.weak.outline.expect
@@ -2,18 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue44455.dart:6:9: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F'.
+// pkg/front_end/testcases/nnbd/issue44455.dart:6:19: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F'.
 // Try changing type arguments so that they conform to the bounds.
 // class A<X extends F<X>> {}
-//         ^
+//                   ^
 // pkg/front_end/testcases/nnbd/issue44455.dart:5:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<Y extends num> = Y Function();
 //           ^
 //
-// pkg/front_end/testcases/nnbd/issue44455.dart:8:10: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F2'.
+// pkg/front_end/testcases/nnbd/issue44455.dart:8:20: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F2'.
 // Try changing type arguments so that they conform to the bounds.
 // class A2<X extends F2<X>> {}
-//          ^
+//                    ^
 // pkg/front_end/testcases/nnbd/issue44455.dart:9:12: Context: This is the type variable whose bound isn't conformed to.
 // typedef F2<Y extends num> = Y Function();
 //            ^
diff --git a/pkg/front_end/testcases/nnbd/issue44455.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue44455.dart.weak.transformed.expect
index d0065b3..4c7be00 100644
--- a/pkg/front_end/testcases/nnbd/issue44455.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue44455.dart.weak.transformed.expect
@@ -2,18 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue44455.dart:6:9: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F'.
+// pkg/front_end/testcases/nnbd/issue44455.dart:6:19: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F'.
 // Try changing type arguments so that they conform to the bounds.
 // class A<X extends F<X>> {}
-//         ^
+//                   ^
 // pkg/front_end/testcases/nnbd/issue44455.dart:5:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<Y extends num> = Y Function();
 //           ^
 //
-// pkg/front_end/testcases/nnbd/issue44455.dart:8:10: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F2'.
+// pkg/front_end/testcases/nnbd/issue44455.dart:8:20: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F2'.
 // Try changing type arguments so that they conform to the bounds.
 // class A2<X extends F2<X>> {}
-//          ^
+//                    ^
 // pkg/front_end/testcases/nnbd/issue44455.dart:9:12: Context: This is the type variable whose bound isn't conformed to.
 // typedef F2<Y extends num> = Y Function();
 //            ^
diff --git a/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.strong.expect b/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.strong.expect
index 5537cc3..8b88b00 100644
--- a/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.strong.expect
@@ -18,455 +18,425 @@
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:31: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// foo1a(F<A<dynamic>, A<Never>> x) {}
-//                               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:31: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo1a(F<A<dynamic>, A<Never>> x) {}
-//                               ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:9: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-// foo1b(F x) {}
-//         ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:9: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo1b(F x) {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:7: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:17: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // foo2a<X extends F<A<dynamic>, A<Never>>>() {}
-//       ^
+//                 ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
 // foo2a<X extends F<A<dynamic>, A<Never>>>() {}
-//       ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:7: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:17: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 // foo2b<X extends F>() {}
-//       ^
+//                 ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
 // foo2b<X extends F>() {}
-//       ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:13: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:23: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // class Foo3a<X extends F<A<dynamic>, A<Never>>> {}
-//             ^
+//                       ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:13: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:23: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
 // class Foo3a<X extends F<A<dynamic>, A<Never>>> {}
-//             ^
+//                       ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:30: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// F<A<dynamic>, A<Never>> foo4a() => throw 42;
-//                              ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:30: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// F<A<dynamic>, A<Never>> foo4a() => throw 42;
-//                              ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:8: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// F foo4b() => throw 42;
-//        ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:8: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// F foo4b() => throw 42;
-//        ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:41: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// foo5a({required F<A<dynamic>, A<Never>> x}) {}
-//                                         ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:41: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo5a({required F<A<dynamic>, A<Never>> x}) {}
-//                                         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:19: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:19:23: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-// foo5b({required F x}) {}
-//                   ^
+// class Foo3b<X extends F> {}
+//                       ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:19: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:19:23: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
-// foo5b({required F x}) {}
-//                   ^
+// class Foo3b<X extends F> {}
+//                       ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:33: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:56:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
-// foo7a([F<A<dynamic>, A<Never>>? x]) {}
-//                                 ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:33: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo7a([F<A<dynamic>, A<Never>>? x]) {}
-//                                 ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:11: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-// foo7b([F? x]) {}
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:11: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo7b([F? x]) {}
-//           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:54:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-// bar1(B<num> x) {}
-//             ^
+// bar2<X extends B<num>>() {}
+//                ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:56:6: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:58:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
-// bar2<X extends B<num>>() {}
+// class Bar3<X extends B<num>> {}
+//                      ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:7: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo1a(F<A<dynamic>, A<Never>> x) {}
+//       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo1a(F<A<dynamic>, A<Never>> x) {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:7: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo1b(F x) {}
+//       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo1b(F x) {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:1: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// F<A<dynamic>, A<Never>> foo4a() => throw 42;
+// ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:1: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// F<A<dynamic>, A<Never>> foo4a() => throw 42;
+// ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:1: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// F foo4b() => throw 42;
+// ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:1: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// F foo4b() => throw 42;
+// ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:17: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo5a({required F<A<dynamic>, A<Never>> x}) {}
+//                 ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo5a({required F<A<dynamic>, A<Never>> x}) {}
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:17: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo5b({required F x}) {}
+//                 ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo5b({required F x}) {}
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:8: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo7a([F<A<dynamic>, A<Never>>? x]) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:8: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo7a([F<A<dynamic>, A<Never>>? x]) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:8: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo7b([F? x]) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:8: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo7b([F? x]) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:54:6: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+// bar1(B<num> x) {}
 //      ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:58:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-// class Bar3<X extends B<num>> {}
-//            ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:60:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the return type.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:60:1: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // B<num> bar4() => throw 42;
-//            ^
+// ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:62:23: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:62:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // bar5({required B<num> x}) {}
-//                       ^
+//                ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:76:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:76:7: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // bar7([B<num>? x]) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:78:7: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the supertype 'B' of class 'Bar8'.
-// Try changing type arguments so that they conform to the bounds.
-// class Bar8 extends B<dynamic> {}
 //       ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:27: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:78:20: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
-//   F<A<dynamic>, A<Never>> x;
-//                           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:27: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F<A<dynamic>, A<Never>> x;
-//                           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:32: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:32: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:37: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                     ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:37: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                     ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:35: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
-//                                   ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:35: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
-//                                   ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:11: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
-//           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:34: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
-//                                  ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:34: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
-//                                  ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:45: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
-//                                             ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:45: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
-//                                             ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:37: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
-//                                     ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:37: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
-//                                     ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:5: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   F x;
-//     ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:5: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F x;
-//     ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:10: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   for (F x in []) {}
-//          ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:10: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F x in []) {}
-//          ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:15: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   for (F x in []) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:15: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F x in []) {}
-//               ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:13: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo1(F x) {}
-//             ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:13: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo1(F x) {}
-//             ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:11: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo2<X extends F>() {}
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo2<X extends F>() {}
-//           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:12: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   F fooFoo4() => throw 42;
-//            ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:12: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F fooFoo4() => throw 42;
-//            ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:23: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo5({required F x}) {}
-//                       ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:23: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo5({required F x}) {}
-//                       ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:15: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo7([F? x]) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:15: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo7([F? x]) {}
-//               ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:65:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-//   B<num> x;
-//          ^
+// class Bar8 extends B<dynamic> {}
+//                    ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:66:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:3: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try changing type arguments so that they conform to the bounds.
-//   for (B<num> x in []) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
+//   F<A<dynamic>, A<Never>> x;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F<A<dynamic>, A<Never>> x;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:8: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   for (F<A<dynamic>, A<Never>> x in []) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:8: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   for (F<A<dynamic>, A<Never>> x in []) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:11: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
+//           ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:21: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:3: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:21: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:12: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
+//            ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:12: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:3: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   F x;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F x;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:8: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   for (F x in []) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:8: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   for (F x in []) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:11: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo1(F x) {}
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo1(F x) {}
+//           ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:21: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo2<X extends F>() {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo2<X extends F>() {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:3: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   F fooFoo4() => throw 42;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F fooFoo4() => throw 42;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:21: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo5({required F x}) {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo5({required F x}) {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:12: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo7([F? x]) {}
+//            ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:12: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo7([F? x]) {}
+//            ^
 //
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:72:7: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
@@ -476,50 +446,58 @@
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:66:20: Error: Inferred type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   for (B<num> x in []) {}
-//                    ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:65:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   B<num> x;
+//   ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:67:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:66:8: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   for (B<num> x in []) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:67:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   barBar1(B<num> x) {}
-//                  ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:68:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-//   barBar2<X extends B<num>>() {}
 //           ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:69:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the return type.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:68:21: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   barBar2<X extends B<num>>() {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:69:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   B<num> barBar4() => throw 42;
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:70:28: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:70:21: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   barBar5({required B<num> x}) {}
-//                            ^
+//                     ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:71:20: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:71:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   barBar7([B<num>? x]) {}
-//                    ^
+//            ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.strong.transformed.expect
index c007963..96f0d73 100644
--- a/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.strong.transformed.expect
@@ -18,455 +18,425 @@
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:31: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// foo1a(F<A<dynamic>, A<Never>> x) {}
-//                               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:31: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo1a(F<A<dynamic>, A<Never>> x) {}
-//                               ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:9: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-// foo1b(F x) {}
-//         ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:9: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo1b(F x) {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:7: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:17: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // foo2a<X extends F<A<dynamic>, A<Never>>>() {}
-//       ^
+//                 ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
 // foo2a<X extends F<A<dynamic>, A<Never>>>() {}
-//       ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:7: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:17: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 // foo2b<X extends F>() {}
-//       ^
+//                 ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
 // foo2b<X extends F>() {}
-//       ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:13: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:23: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // class Foo3a<X extends F<A<dynamic>, A<Never>>> {}
-//             ^
+//                       ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:13: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:23: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
 // class Foo3a<X extends F<A<dynamic>, A<Never>>> {}
-//             ^
+//                       ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:30: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// F<A<dynamic>, A<Never>> foo4a() => throw 42;
-//                              ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:30: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// F<A<dynamic>, A<Never>> foo4a() => throw 42;
-//                              ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:8: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// F foo4b() => throw 42;
-//        ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:8: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// F foo4b() => throw 42;
-//        ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:41: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// foo5a({required F<A<dynamic>, A<Never>> x}) {}
-//                                         ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:41: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo5a({required F<A<dynamic>, A<Never>> x}) {}
-//                                         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:19: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:19:23: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-// foo5b({required F x}) {}
-//                   ^
+// class Foo3b<X extends F> {}
+//                       ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:19: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:19:23: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
-// foo5b({required F x}) {}
-//                   ^
+// class Foo3b<X extends F> {}
+//                       ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:33: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:56:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
-// foo7a([F<A<dynamic>, A<Never>>? x]) {}
-//                                 ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:33: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo7a([F<A<dynamic>, A<Never>>? x]) {}
-//                                 ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:11: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-// foo7b([F? x]) {}
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:11: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo7b([F? x]) {}
-//           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:54:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-// bar1(B<num> x) {}
-//             ^
+// bar2<X extends B<num>>() {}
+//                ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:56:6: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:58:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
-// bar2<X extends B<num>>() {}
+// class Bar3<X extends B<num>> {}
+//                      ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:7: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo1a(F<A<dynamic>, A<Never>> x) {}
+//       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo1a(F<A<dynamic>, A<Never>> x) {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:7: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo1b(F x) {}
+//       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo1b(F x) {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:1: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// F<A<dynamic>, A<Never>> foo4a() => throw 42;
+// ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:1: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// F<A<dynamic>, A<Never>> foo4a() => throw 42;
+// ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:1: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// F foo4b() => throw 42;
+// ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:1: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// F foo4b() => throw 42;
+// ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:17: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo5a({required F<A<dynamic>, A<Never>> x}) {}
+//                 ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo5a({required F<A<dynamic>, A<Never>> x}) {}
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:17: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo5b({required F x}) {}
+//                 ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo5b({required F x}) {}
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:8: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo7a([F<A<dynamic>, A<Never>>? x]) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:8: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo7a([F<A<dynamic>, A<Never>>? x]) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:8: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo7b([F? x]) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:8: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo7b([F? x]) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:54:6: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+// bar1(B<num> x) {}
 //      ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:58:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-// class Bar3<X extends B<num>> {}
-//            ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:60:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the return type.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:60:1: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // B<num> bar4() => throw 42;
-//            ^
+// ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:62:23: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:62:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // bar5({required B<num> x}) {}
-//                       ^
+//                ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:76:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:76:7: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // bar7([B<num>? x]) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:78:7: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the supertype 'B' of class 'Bar8'.
-// Try changing type arguments so that they conform to the bounds.
-// class Bar8 extends B<dynamic> {}
 //       ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:27: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:78:20: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
-//   F<A<dynamic>, A<Never>> x;
-//                           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:27: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F<A<dynamic>, A<Never>> x;
-//                           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:32: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:32: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:37: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                     ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:37: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                     ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:35: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
-//                                   ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:35: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
-//                                   ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:11: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
-//           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:34: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
-//                                  ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:34: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
-//                                  ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:45: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
-//                                             ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:45: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
-//                                             ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:37: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
-//                                     ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:37: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
-//                                     ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:5: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   F x;
-//     ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:5: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F x;
-//     ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:10: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   for (F x in []) {}
-//          ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:10: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F x in []) {}
-//          ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:15: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   for (F x in []) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:15: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F x in []) {}
-//               ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:13: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo1(F x) {}
-//             ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:13: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo1(F x) {}
-//             ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:11: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo2<X extends F>() {}
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo2<X extends F>() {}
-//           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:12: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   F fooFoo4() => throw 42;
-//            ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:12: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F fooFoo4() => throw 42;
-//            ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:23: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo5({required F x}) {}
-//                       ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:23: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo5({required F x}) {}
-//                       ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:15: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo7([F? x]) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:15: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo7([F? x]) {}
-//               ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:65:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-//   B<num> x;
-//          ^
+// class Bar8 extends B<dynamic> {}
+//                    ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:66:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:3: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try changing type arguments so that they conform to the bounds.
-//   for (B<num> x in []) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
+//   F<A<dynamic>, A<Never>> x;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F<A<dynamic>, A<Never>> x;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:8: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   for (F<A<dynamic>, A<Never>> x in []) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:8: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   for (F<A<dynamic>, A<Never>> x in []) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:11: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
+//           ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:21: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:3: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:21: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:12: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
+//            ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:12: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:3: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   F x;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F x;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:8: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   for (F x in []) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:8: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   for (F x in []) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:11: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo1(F x) {}
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo1(F x) {}
+//           ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:21: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo2<X extends F>() {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo2<X extends F>() {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:3: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   F fooFoo4() => throw 42;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F fooFoo4() => throw 42;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:21: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo5({required F x}) {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo5({required F x}) {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:12: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo7([F? x]) {}
+//            ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:12: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo7([F? x]) {}
+//            ^
 //
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:72:7: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
@@ -476,50 +446,58 @@
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:66:20: Error: Inferred type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   for (B<num> x in []) {}
-//                    ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:65:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   B<num> x;
+//   ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:67:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:66:8: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   for (B<num> x in []) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:67:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   barBar1(B<num> x) {}
-//                  ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:68:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-//   barBar2<X extends B<num>>() {}
 //           ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:69:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the return type.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:68:21: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   barBar2<X extends B<num>>() {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:69:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   B<num> barBar4() => throw 42;
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:70:28: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:70:21: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   barBar5({required B<num> x}) {}
-//                            ^
+//                     ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:71:20: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:71:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   barBar7([B<num>? x]) {}
-//                    ^
+//            ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.expect b/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.expect
index 5537cc3..8b88b00 100644
--- a/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.expect
@@ -18,455 +18,425 @@
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:31: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// foo1a(F<A<dynamic>, A<Never>> x) {}
-//                               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:31: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo1a(F<A<dynamic>, A<Never>> x) {}
-//                               ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:9: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-// foo1b(F x) {}
-//         ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:9: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo1b(F x) {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:7: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:17: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // foo2a<X extends F<A<dynamic>, A<Never>>>() {}
-//       ^
+//                 ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
 // foo2a<X extends F<A<dynamic>, A<Never>>>() {}
-//       ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:7: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:17: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 // foo2b<X extends F>() {}
-//       ^
+//                 ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
 // foo2b<X extends F>() {}
-//       ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:13: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:23: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // class Foo3a<X extends F<A<dynamic>, A<Never>>> {}
-//             ^
+//                       ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:13: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:23: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
 // class Foo3a<X extends F<A<dynamic>, A<Never>>> {}
-//             ^
+//                       ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:30: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// F<A<dynamic>, A<Never>> foo4a() => throw 42;
-//                              ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:30: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// F<A<dynamic>, A<Never>> foo4a() => throw 42;
-//                              ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:8: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// F foo4b() => throw 42;
-//        ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:8: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// F foo4b() => throw 42;
-//        ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:41: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// foo5a({required F<A<dynamic>, A<Never>> x}) {}
-//                                         ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:41: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo5a({required F<A<dynamic>, A<Never>> x}) {}
-//                                         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:19: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:19:23: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-// foo5b({required F x}) {}
-//                   ^
+// class Foo3b<X extends F> {}
+//                       ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:19: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:19:23: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
-// foo5b({required F x}) {}
-//                   ^
+// class Foo3b<X extends F> {}
+//                       ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:33: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:56:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
-// foo7a([F<A<dynamic>, A<Never>>? x]) {}
-//                                 ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:33: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo7a([F<A<dynamic>, A<Never>>? x]) {}
-//                                 ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:11: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-// foo7b([F? x]) {}
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:11: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo7b([F? x]) {}
-//           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:54:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-// bar1(B<num> x) {}
-//             ^
+// bar2<X extends B<num>>() {}
+//                ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:56:6: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:58:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
-// bar2<X extends B<num>>() {}
+// class Bar3<X extends B<num>> {}
+//                      ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:7: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo1a(F<A<dynamic>, A<Never>> x) {}
+//       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo1a(F<A<dynamic>, A<Never>> x) {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:7: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo1b(F x) {}
+//       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo1b(F x) {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:1: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// F<A<dynamic>, A<Never>> foo4a() => throw 42;
+// ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:1: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// F<A<dynamic>, A<Never>> foo4a() => throw 42;
+// ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:1: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// F foo4b() => throw 42;
+// ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:1: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// F foo4b() => throw 42;
+// ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:17: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo5a({required F<A<dynamic>, A<Never>> x}) {}
+//                 ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo5a({required F<A<dynamic>, A<Never>> x}) {}
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:17: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo5b({required F x}) {}
+//                 ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo5b({required F x}) {}
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:8: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo7a([F<A<dynamic>, A<Never>>? x]) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:8: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo7a([F<A<dynamic>, A<Never>>? x]) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:8: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo7b([F? x]) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:8: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo7b([F? x]) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:54:6: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+// bar1(B<num> x) {}
 //      ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:58:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-// class Bar3<X extends B<num>> {}
-//            ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:60:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the return type.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:60:1: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // B<num> bar4() => throw 42;
-//            ^
+// ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:62:23: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:62:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // bar5({required B<num> x}) {}
-//                       ^
+//                ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:76:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:76:7: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // bar7([B<num>? x]) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:78:7: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the supertype 'B' of class 'Bar8'.
-// Try changing type arguments so that they conform to the bounds.
-// class Bar8 extends B<dynamic> {}
 //       ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:27: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:78:20: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
-//   F<A<dynamic>, A<Never>> x;
-//                           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:27: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F<A<dynamic>, A<Never>> x;
-//                           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:32: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:32: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:37: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                     ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:37: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                     ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:35: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
-//                                   ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:35: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
-//                                   ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:11: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
-//           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:34: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
-//                                  ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:34: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
-//                                  ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:45: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
-//                                             ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:45: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
-//                                             ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:37: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
-//                                     ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:37: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
-//                                     ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:5: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   F x;
-//     ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:5: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F x;
-//     ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:10: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   for (F x in []) {}
-//          ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:10: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F x in []) {}
-//          ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:15: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   for (F x in []) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:15: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F x in []) {}
-//               ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:13: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo1(F x) {}
-//             ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:13: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo1(F x) {}
-//             ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:11: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo2<X extends F>() {}
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo2<X extends F>() {}
-//           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:12: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   F fooFoo4() => throw 42;
-//            ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:12: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F fooFoo4() => throw 42;
-//            ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:23: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo5({required F x}) {}
-//                       ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:23: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo5({required F x}) {}
-//                       ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:15: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo7([F? x]) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:15: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo7([F? x]) {}
-//               ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:65:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-//   B<num> x;
-//          ^
+// class Bar8 extends B<dynamic> {}
+//                    ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:66:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:3: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try changing type arguments so that they conform to the bounds.
-//   for (B<num> x in []) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
+//   F<A<dynamic>, A<Never>> x;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F<A<dynamic>, A<Never>> x;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:8: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   for (F<A<dynamic>, A<Never>> x in []) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:8: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   for (F<A<dynamic>, A<Never>> x in []) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:11: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
+//           ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:21: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:3: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:21: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:12: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
+//            ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:12: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:3: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   F x;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F x;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:8: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   for (F x in []) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:8: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   for (F x in []) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:11: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo1(F x) {}
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo1(F x) {}
+//           ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:21: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo2<X extends F>() {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo2<X extends F>() {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:3: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   F fooFoo4() => throw 42;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F fooFoo4() => throw 42;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:21: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo5({required F x}) {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo5({required F x}) {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:12: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo7([F? x]) {}
+//            ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:12: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo7([F? x]) {}
+//            ^
 //
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:72:7: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
@@ -476,50 +446,58 @@
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:66:20: Error: Inferred type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   for (B<num> x in []) {}
-//                    ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:65:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   B<num> x;
+//   ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:67:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:66:8: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   for (B<num> x in []) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:67:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   barBar1(B<num> x) {}
-//                  ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:68:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-//   barBar2<X extends B<num>>() {}
 //           ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:69:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the return type.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:68:21: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   barBar2<X extends B<num>>() {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:69:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   B<num> barBar4() => throw 42;
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:70:28: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:70:21: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   barBar5({required B<num> x}) {}
-//                            ^
+//                     ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:71:20: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:71:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   barBar7([B<num>? x]) {}
-//                    ^
+//            ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.modular.expect
index 5537cc3..8b88b00 100644
--- a/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.modular.expect
@@ -18,455 +18,425 @@
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:31: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// foo1a(F<A<dynamic>, A<Never>> x) {}
-//                               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:31: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo1a(F<A<dynamic>, A<Never>> x) {}
-//                               ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:9: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-// foo1b(F x) {}
-//         ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:9: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo1b(F x) {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:7: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:17: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // foo2a<X extends F<A<dynamic>, A<Never>>>() {}
-//       ^
+//                 ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
 // foo2a<X extends F<A<dynamic>, A<Never>>>() {}
-//       ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:7: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:17: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 // foo2b<X extends F>() {}
-//       ^
+//                 ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
 // foo2b<X extends F>() {}
-//       ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:13: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:23: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // class Foo3a<X extends F<A<dynamic>, A<Never>>> {}
-//             ^
+//                       ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:13: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:23: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
 // class Foo3a<X extends F<A<dynamic>, A<Never>>> {}
-//             ^
+//                       ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:30: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// F<A<dynamic>, A<Never>> foo4a() => throw 42;
-//                              ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:30: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// F<A<dynamic>, A<Never>> foo4a() => throw 42;
-//                              ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:8: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// F foo4b() => throw 42;
-//        ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:8: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// F foo4b() => throw 42;
-//        ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:41: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// foo5a({required F<A<dynamic>, A<Never>> x}) {}
-//                                         ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:41: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo5a({required F<A<dynamic>, A<Never>> x}) {}
-//                                         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:19: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:19:23: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-// foo5b({required F x}) {}
-//                   ^
+// class Foo3b<X extends F> {}
+//                       ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:19: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:19:23: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
-// foo5b({required F x}) {}
-//                   ^
+// class Foo3b<X extends F> {}
+//                       ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:33: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:56:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
-// foo7a([F<A<dynamic>, A<Never>>? x]) {}
-//                                 ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:33: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo7a([F<A<dynamic>, A<Never>>? x]) {}
-//                                 ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:11: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-// foo7b([F? x]) {}
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:11: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo7b([F? x]) {}
-//           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:54:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-// bar1(B<num> x) {}
-//             ^
+// bar2<X extends B<num>>() {}
+//                ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:56:6: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:58:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
-// bar2<X extends B<num>>() {}
+// class Bar3<X extends B<num>> {}
+//                      ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:7: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo1a(F<A<dynamic>, A<Never>> x) {}
+//       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo1a(F<A<dynamic>, A<Never>> x) {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:7: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo1b(F x) {}
+//       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo1b(F x) {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:1: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// F<A<dynamic>, A<Never>> foo4a() => throw 42;
+// ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:1: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// F<A<dynamic>, A<Never>> foo4a() => throw 42;
+// ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:1: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// F foo4b() => throw 42;
+// ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:1: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// F foo4b() => throw 42;
+// ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:17: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo5a({required F<A<dynamic>, A<Never>> x}) {}
+//                 ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo5a({required F<A<dynamic>, A<Never>> x}) {}
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:17: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo5b({required F x}) {}
+//                 ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo5b({required F x}) {}
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:8: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo7a([F<A<dynamic>, A<Never>>? x]) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:8: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo7a([F<A<dynamic>, A<Never>>? x]) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:8: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo7b([F? x]) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:8: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo7b([F? x]) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:54:6: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+// bar1(B<num> x) {}
 //      ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:58:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-// class Bar3<X extends B<num>> {}
-//            ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:60:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the return type.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:60:1: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // B<num> bar4() => throw 42;
-//            ^
+// ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:62:23: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:62:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // bar5({required B<num> x}) {}
-//                       ^
+//                ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:76:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:76:7: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // bar7([B<num>? x]) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:78:7: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the supertype 'B' of class 'Bar8'.
-// Try changing type arguments so that they conform to the bounds.
-// class Bar8 extends B<dynamic> {}
 //       ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:27: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:78:20: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
-//   F<A<dynamic>, A<Never>> x;
-//                           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:27: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F<A<dynamic>, A<Never>> x;
-//                           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:32: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:32: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:37: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                     ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:37: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                     ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:35: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
-//                                   ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:35: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
-//                                   ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:11: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
-//           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:34: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
-//                                  ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:34: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
-//                                  ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:45: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
-//                                             ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:45: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
-//                                             ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:37: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
-//                                     ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:37: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
-//                                     ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:5: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   F x;
-//     ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:5: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F x;
-//     ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:10: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   for (F x in []) {}
-//          ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:10: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F x in []) {}
-//          ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:15: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   for (F x in []) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:15: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F x in []) {}
-//               ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:13: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo1(F x) {}
-//             ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:13: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo1(F x) {}
-//             ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:11: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo2<X extends F>() {}
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo2<X extends F>() {}
-//           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:12: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   F fooFoo4() => throw 42;
-//            ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:12: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F fooFoo4() => throw 42;
-//            ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:23: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo5({required F x}) {}
-//                       ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:23: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo5({required F x}) {}
-//                       ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:15: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo7([F? x]) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:15: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo7([F? x]) {}
-//               ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:65:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-//   B<num> x;
-//          ^
+// class Bar8 extends B<dynamic> {}
+//                    ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:66:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:3: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try changing type arguments so that they conform to the bounds.
-//   for (B<num> x in []) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
+//   F<A<dynamic>, A<Never>> x;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F<A<dynamic>, A<Never>> x;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:8: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   for (F<A<dynamic>, A<Never>> x in []) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:8: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   for (F<A<dynamic>, A<Never>> x in []) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:11: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
+//           ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:21: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:3: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:21: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:12: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
+//            ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:12: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:3: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   F x;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F x;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:8: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   for (F x in []) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:8: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   for (F x in []) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:11: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo1(F x) {}
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo1(F x) {}
+//           ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:21: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo2<X extends F>() {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo2<X extends F>() {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:3: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   F fooFoo4() => throw 42;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F fooFoo4() => throw 42;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:21: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo5({required F x}) {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo5({required F x}) {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:12: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo7([F? x]) {}
+//            ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:12: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo7([F? x]) {}
+//            ^
 //
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:72:7: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
@@ -476,50 +446,58 @@
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:66:20: Error: Inferred type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   for (B<num> x in []) {}
-//                    ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:65:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   B<num> x;
+//   ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:67:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:66:8: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   for (B<num> x in []) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:67:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   barBar1(B<num> x) {}
-//                  ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:68:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-//   barBar2<X extends B<num>>() {}
 //           ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:69:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the return type.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:68:21: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   barBar2<X extends B<num>>() {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:69:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   B<num> barBar4() => throw 42;
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:70:28: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:70:21: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   barBar5({required B<num> x}) {}
-//                            ^
+//                     ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:71:20: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:71:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   barBar7([B<num>? x]) {}
-//                    ^
+//            ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.outline.expect
index 155fe0cd..b4f6b22 100644
--- a/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.outline.expect
@@ -18,212 +18,226 @@
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:31: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// foo1a(F<A<dynamic>, A<Never>> x) {}
-//                               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:31: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo1a(F<A<dynamic>, A<Never>> x) {}
-//                               ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:9: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-// foo1b(F x) {}
-//         ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:9: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo1b(F x) {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:7: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:17: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // foo2a<X extends F<A<dynamic>, A<Never>>>() {}
-//       ^
+//                 ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
 // foo2a<X extends F<A<dynamic>, A<Never>>>() {}
-//       ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:7: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:17: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 // foo2b<X extends F>() {}
-//       ^
+//                 ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
 // foo2b<X extends F>() {}
-//       ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:13: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:23: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // class Foo3a<X extends F<A<dynamic>, A<Never>>> {}
-//             ^
+//                       ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:13: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:23: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
 // class Foo3a<X extends F<A<dynamic>, A<Never>>> {}
-//             ^
+//                       ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:30: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// F<A<dynamic>, A<Never>> foo4a() => throw 42;
-//                              ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:30: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// F<A<dynamic>, A<Never>> foo4a() => throw 42;
-//                              ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:8: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// F foo4b() => throw 42;
-//        ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:8: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// F foo4b() => throw 42;
-//        ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:41: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// foo5a({required F<A<dynamic>, A<Never>> x}) {}
-//                                         ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:41: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo5a({required F<A<dynamic>, A<Never>> x}) {}
-//                                         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:19: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:19:23: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-// foo5b({required F x}) {}
-//                   ^
+// class Foo3b<X extends F> {}
+//                       ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:19: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:19:23: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
-// foo5b({required F x}) {}
-//                   ^
+// class Foo3b<X extends F> {}
+//                       ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:33: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:56:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
-// foo7a([F<A<dynamic>, A<Never>>? x]) {}
-//                                 ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:33: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo7a([F<A<dynamic>, A<Never>>? x]) {}
-//                                 ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:11: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-// foo7b([F? x]) {}
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:11: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo7b([F? x]) {}
-//           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:54:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-// bar1(B<num> x) {}
-//             ^
+// bar2<X extends B<num>>() {}
+//                ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:56:6: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:58:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
-// bar2<X extends B<num>>() {}
+// class Bar3<X extends B<num>> {}
+//                      ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:7: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo1a(F<A<dynamic>, A<Never>> x) {}
+//       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo1a(F<A<dynamic>, A<Never>> x) {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:7: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo1b(F x) {}
+//       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo1b(F x) {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:1: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// F<A<dynamic>, A<Never>> foo4a() => throw 42;
+// ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:1: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// F<A<dynamic>, A<Never>> foo4a() => throw 42;
+// ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:1: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// F foo4b() => throw 42;
+// ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:1: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// F foo4b() => throw 42;
+// ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:17: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo5a({required F<A<dynamic>, A<Never>> x}) {}
+//                 ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo5a({required F<A<dynamic>, A<Never>> x}) {}
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:17: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo5b({required F x}) {}
+//                 ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo5b({required F x}) {}
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:8: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo7a([F<A<dynamic>, A<Never>>? x]) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:8: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo7a([F<A<dynamic>, A<Never>>? x]) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:8: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo7b([F? x]) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:8: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo7b([F? x]) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:54:6: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+// bar1(B<num> x) {}
 //      ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:58:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-// class Bar3<X extends B<num>> {}
-//            ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:60:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the return type.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:60:1: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // B<num> bar4() => throw 42;
-//            ^
+// ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:62:23: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:62:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // bar5({required B<num> x}) {}
-//                       ^
+//                ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:76:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:76:7: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // bar7([B<num>? x]) {}
-//               ^
+//       ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:78:7: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the supertype 'B' of class 'Bar8'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:78:20: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // class Bar8 extends B<dynamic> {}
-//       ^
+//                    ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.transformed.expect
index c007963..96f0d73 100644
--- a/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.transformed.expect
@@ -18,455 +18,425 @@
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:31: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// foo1a(F<A<dynamic>, A<Never>> x) {}
-//                               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:31: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo1a(F<A<dynamic>, A<Never>> x) {}
-//                               ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:9: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-// foo1b(F x) {}
-//         ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:9: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo1b(F x) {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:7: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:17: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // foo2a<X extends F<A<dynamic>, A<Never>>>() {}
-//       ^
+//                 ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
 // foo2a<X extends F<A<dynamic>, A<Never>>>() {}
-//       ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:7: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:17: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 // foo2b<X extends F>() {}
-//       ^
+//                 ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
 // foo2b<X extends F>() {}
-//       ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:13: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:23: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try changing type arguments so that they conform to the bounds.
 // class Foo3a<X extends F<A<dynamic>, A<Never>>> {}
-//             ^
+//                       ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:13: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:23: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
 // class Foo3a<X extends F<A<dynamic>, A<Never>>> {}
-//             ^
+//                       ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:30: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// F<A<dynamic>, A<Never>> foo4a() => throw 42;
-//                              ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:30: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// F<A<dynamic>, A<Never>> foo4a() => throw 42;
-//                              ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:8: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// F foo4b() => throw 42;
-//        ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:8: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// F foo4b() => throw 42;
-//        ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:41: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// foo5a({required F<A<dynamic>, A<Never>> x}) {}
-//                                         ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:41: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo5a({required F<A<dynamic>, A<Never>> x}) {}
-//                                         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:19: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:19:23: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-// foo5b({required F x}) {}
-//                   ^
+// class Foo3b<X extends F> {}
+//                       ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
 //           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:19: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:19:23: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 //  - 'Object' is from 'dart:core'.
-// foo5b({required F x}) {}
-//                   ^
+// class Foo3b<X extends F> {}
+//                       ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:33: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:56:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
-// foo7a([F<A<dynamic>, A<Never>>? x]) {}
-//                                 ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:33: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo7a([F<A<dynamic>, A<Never>>? x]) {}
-//                                 ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:11: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-// foo7b([F? x]) {}
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:11: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-// foo7b([F? x]) {}
-//           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:54:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-// bar1(B<num> x) {}
-//             ^
+// bar2<X extends B<num>>() {}
+//                ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:56:6: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:58:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
-// bar2<X extends B<num>>() {}
+// class Bar3<X extends B<num>> {}
+//                      ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:7: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo1a(F<A<dynamic>, A<Never>> x) {}
+//       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo1a(F<A<dynamic>, A<Never>> x) {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:7: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo1b(F x) {}
+//       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo1b(F x) {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:1: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// F<A<dynamic>, A<Never>> foo4a() => throw 42;
+// ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:1: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// F<A<dynamic>, A<Never>> foo4a() => throw 42;
+// ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:1: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// F foo4b() => throw 42;
+// ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:1: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// F foo4b() => throw 42;
+// ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:17: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo5a({required F<A<dynamic>, A<Never>> x}) {}
+//                 ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo5a({required F<A<dynamic>, A<Never>> x}) {}
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:17: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo5b({required F x}) {}
+//                 ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:17: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo5b({required F x}) {}
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:8: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo7a([F<A<dynamic>, A<Never>>? x]) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:8: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo7a([F<A<dynamic>, A<Never>>? x]) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:8: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo7b([F? x]) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:8: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo7b([F? x]) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:54:6: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+// bar1(B<num> x) {}
 //      ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:58:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-// class Bar3<X extends B<num>> {}
-//            ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:60:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the return type.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:60:1: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // B<num> bar4() => throw 42;
-//            ^
+// ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:62:23: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:62:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // bar5({required B<num> x}) {}
-//                       ^
+//                ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:76:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:76:7: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 // bar7([B<num>? x]) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:78:7: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the supertype 'B' of class 'Bar8'.
-// Try changing type arguments so that they conform to the bounds.
-// class Bar8 extends B<dynamic> {}
 //       ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:27: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:78:20: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
-//   F<A<dynamic>, A<Never>> x;
-//                           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:27: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F<A<dynamic>, A<Never>> x;
-//                           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:32: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:32: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:37: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                     ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:37: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F<A<dynamic>, A<Never>> x in []) {}
-//                                     ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:35: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
-//                                   ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:35: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
-//                                   ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:11: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
-//           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:34: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
-//                                  ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:34: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
-//                                  ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:45: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
-//                                             ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:45: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
-//                                             ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:37: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
-//                                     ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:37: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
-//                                     ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:5: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   F x;
-//     ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:5: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F x;
-//     ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:10: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   for (F x in []) {}
-//          ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:10: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F x in []) {}
-//          ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:15: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   for (F x in []) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:15: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   for (F x in []) {}
-//               ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:13: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo1(F x) {}
-//             ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:13: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo1(F x) {}
-//             ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:11: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo2<X extends F>() {}
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo2<X extends F>() {}
-//           ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:12: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try changing type arguments so that they conform to the bounds.
-//   F fooFoo4() => throw 42;
-//            ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:12: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   F fooFoo4() => throw 42;
-//            ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:23: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo5({required F x}) {}
-//                       ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:23: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo5({required F x}) {}
-//                       ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:15: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   fooFoo7([F? x]) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
-// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
-//           ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:15: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
-//  - 'Object' is from 'dart:core'.
-//   fooFoo7([F? x]) {}
-//               ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:65:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-//   B<num> x;
-//          ^
+// class Bar8 extends B<dynamic> {}
+//                    ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:66:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:3: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
 // Try changing type arguments so that they conform to the bounds.
-//   for (B<num> x in []) {}
-//               ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
+//   F<A<dynamic>, A<Never>> x;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F<A<dynamic>, A<Never>> x;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:8: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   for (F<A<dynamic>, A<Never>> x in []) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:8: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   for (F<A<dynamic>, A<Never>> x in []) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:11: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
+//           ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:21: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:3: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:21: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:12: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
+//            ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:12: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:3: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   F x;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F x;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:8: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   for (F x in []) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:8: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   for (F x in []) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:11: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo1(F x) {}
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo1(F x) {}
+//           ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:21: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo2<X extends F>() {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo2<X extends F>() {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:3: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   F fooFoo4() => throw 42;
+//   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:3: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F fooFoo4() => throw 42;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:21: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo5({required F x}) {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:21: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo5({required F x}) {}
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:12: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo7([F? x]) {}
+//            ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:12: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo7([F? x]) {}
+//            ^
 //
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:72:7: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
@@ -476,50 +446,58 @@
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:66:20: Error: Inferred type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//   for (B<num> x in []) {}
-//                    ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:65:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   B<num> x;
+//   ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:67:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:66:8: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   for (B<num> x in []) {}
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:67:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   barBar1(B<num> x) {}
-//                  ^
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
-// class B<X extends int> {}
-//         ^
-//
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:68:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
-// Try changing type arguments so that they conform to the bounds.
-//   barBar2<X extends B<num>>() {}
 //           ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:69:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the return type.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:68:21: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   barBar2<X extends B<num>>() {}
+//                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:69:3: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   B<num> barBar4() => throw 42;
-//                 ^
+//   ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:70:28: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:70:21: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   barBar5({required B<num> x}) {}
-//                            ^
+//                     ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:71:20: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:71:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
 // Try changing type arguments so that they conform to the bounds.
 //   barBar7([B<num>? x]) {}
-//                    ^
+//            ^
 // pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
 // class B<X extends int> {}
 //         ^
diff --git a/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart
new file mode 100644
index 0000000..cb14757
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart=2.9
+
+import 'main_lib1.dart';
+import 'main_lib2.dart';
+
+method1(Class1 c1a, List<Class1> c1b, Class2 c2a, List<Class2> c2b) {}
+method2(Typedef1 t1a, List<Typedef1> t1b, Typedef2 t2a, List<Typedef2> t2b) {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart.textual_outline.expect
new file mode 100644
index 0000000..5353363
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+// @dart = 2.9
+import 'main_lib1.dart';
+import 'main_lib2.dart';
+
+method1(Class1 c1a, List<Class1> c1b, Class2 c2a, List<Class2> c2b) {}
+method2(Typedef1 t1a, List<Typedef1> t1b, Typedef2 t2a, List<Typedef2> t2b) {}
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..914bd7f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+// @dart = 2.9
+import 'main_lib1.dart';
+import 'main_lib2.dart';
+
+main() {}
+method1(Class1 c1a, List<Class1> c1b, Class2 c2a, List<Class2> c2b) {}
+method2(Typedef1 t1a, List<Typedef1> t1b, Typedef2 t2a, List<Typedef2> t2b) {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart.weak.expect
new file mode 100644
index 0000000..52f6f7f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart.weak.expect
@@ -0,0 +1,38 @@
+library;
+import self as self;
+import "main_lib1.dart" as mai;
+import "dart:core" as core;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib1.dart";
+import "org-dartlang-testcase:///main_lib2.dart";
+
+static method method1(mai::Class1<core::Object>* c1a, core::List<mai::Class1<core::Object>*>* c1b, mai2::Class2<core::Object>* c2a, core::List<mai2::Class2<core::Object>*>* c2b) → dynamic {}
+static method method2(mai::Class1<core::int*>* t1a, core::List<mai::Class1<core::int*>*>* t1b, mai2::Class2<core::int*>* t2a, core::List<mai2::Class2<core::int*>*>* t2b) → dynamic {}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+typedef Typedef1<T extends core::int> = mai::Class1<T>;
+class Class1<T extends core::Object> extends core::Object {
+  synthetic constructor •() → mai::Class1<mai::Class1::T>
+    : super core::Object::•()
+    ;
+}
+static method _#Typedef1#new#tearOff<T extends core::int>() → mai::Class1<mai::_#Typedef1#new#tearOff::T>
+  return new mai::Class1::•<mai::_#Typedef1#new#tearOff::T>();
+
+library /*isNonNullableByDefault*/;
+import self as mai2;
+import "dart:core" as core;
+
+typedef Typedef2<T extends core::int> = mai2::Class2<T>;
+class Class2<T extends core::Object> extends core::Object {
+  synthetic constructor •() → mai2::Class2<mai2::Class2::T>
+    : super core::Object::•()
+    ;
+}
+static method _#Typedef2#new#tearOff<T extends core::int>() → mai2::Class2<mai2::_#Typedef2#new#tearOff::T>
+  return new mai2::Class2::•<mai2::_#Typedef2#new#tearOff::T>();
diff --git a/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart.weak.modular.expect
new file mode 100644
index 0000000..8313d94
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library;
+import self as self;
+import "main_lib1.dart" as mai;
+import "dart:core" as core;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib1.dart";
+import "org-dartlang-testcase:///main_lib2.dart";
+
+static method method1(mai::Class1<core::Object>* c1a, core::List<mai::Class1<core::Object>*>* c1b, mai2::Class2<core::Object>* c2a, core::List<mai2::Class2<core::Object>*>* c2b) → dynamic {}
+static method method2(mai::Class1<core::int*>* t1a, core::List<mai::Class1<core::int*>*>* t1b, mai2::Class2<core::int*>* t2a, core::List<mai2::Class2<core::int*>*>* t2b) → dynamic {}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+typedef Typedef1<T extends core::int> = mai::Class1<T>;
+class Class1<T extends core::Object> extends core::Object {
+  synthetic constructor •() → mai::Class1<mai::Class1::T>
+    : super core::Object::•()
+    ;
+}
+static method _#Typedef1#new#tearOff<T extends core::int>() → mai::Class1<mai::_#Typedef1#new#tearOff::T>
+  return new mai::Class1::•<mai::_#Typedef1#new#tearOff::T>();
diff --git a/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart.weak.outline.expect
new file mode 100644
index 0000000..357068b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart.weak.outline.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "main_lib1.dart" as mai;
+import "dart:core" as core;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib1.dart";
+import "org-dartlang-testcase:///main_lib2.dart";
+
+static method method1(mai::Class1<core::Object>* c1a, core::List<mai::Class1<core::Object>*>* c1b, mai2::Class2<core::Object>* c2a, core::List<mai2::Class2<core::Object>*>* c2b) → dynamic
+  ;
+static method method2(mai::Class1<core::int*>* t1a, core::List<mai::Class1<core::int*>*>* t1b, mai2::Class2<core::int*>* t2a, core::List<mai2::Class2<core::int*>*>* t2b) → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+typedef Typedef1<T extends core::int> = mai::Class1<T>;
+class Class1<T extends core::Object> extends core::Object {
+  synthetic constructor •() → mai::Class1<mai::Class1::T>
+    ;
+}
+static method _#Typedef1#new#tearOff<T extends core::int>() → mai::Class1<mai::_#Typedef1#new#tearOff::T>
+  return new mai::Class1::•<mai::_#Typedef1#new#tearOff::T>();
+
+library /*isNonNullableByDefault*/;
+import self as mai2;
+import "dart:core" as core;
+
+typedef Typedef2<T extends core::int> = mai2::Class2<T>;
+class Class2<T extends core::Object> extends core::Object {
+  synthetic constructor •() → mai2::Class2<mai2::Class2::T>
+    ;
+}
+static method _#Typedef2#new#tearOff<T extends core::int>() → mai2::Class2<mai2::_#Typedef2#new#tearOff::T>
+  return new mai2::Class2::•<mai2::_#Typedef2#new#tearOff::T>();
diff --git a/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..52f6f7f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main.dart.weak.transformed.expect
@@ -0,0 +1,38 @@
+library;
+import self as self;
+import "main_lib1.dart" as mai;
+import "dart:core" as core;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib1.dart";
+import "org-dartlang-testcase:///main_lib2.dart";
+
+static method method1(mai::Class1<core::Object>* c1a, core::List<mai::Class1<core::Object>*>* c1b, mai2::Class2<core::Object>* c2a, core::List<mai2::Class2<core::Object>*>* c2b) → dynamic {}
+static method method2(mai::Class1<core::int*>* t1a, core::List<mai::Class1<core::int*>*>* t1b, mai2::Class2<core::int*>* t2a, core::List<mai2::Class2<core::int*>*>* t2b) → dynamic {}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+typedef Typedef1<T extends core::int> = mai::Class1<T>;
+class Class1<T extends core::Object> extends core::Object {
+  synthetic constructor •() → mai::Class1<mai::Class1::T>
+    : super core::Object::•()
+    ;
+}
+static method _#Typedef1#new#tearOff<T extends core::int>() → mai::Class1<mai::_#Typedef1#new#tearOff::T>
+  return new mai::Class1::•<mai::_#Typedef1#new#tearOff::T>();
+
+library /*isNonNullableByDefault*/;
+import self as mai2;
+import "dart:core" as core;
+
+typedef Typedef2<T extends core::int> = mai2::Class2<T>;
+class Class2<T extends core::Object> extends core::Object {
+  synthetic constructor •() → mai2::Class2<mai2::Class2::T>
+    : super core::Object::•()
+    ;
+}
+static method _#Typedef2#new#tearOff<T extends core::int>() → mai2::Class2<mai2::_#Typedef2#new#tearOff::T>
+  return new mai2::Class2::•<mai2::_#Typedef2#new#tearOff::T>();
diff --git a/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main_lib1.dart b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main_lib1.dart
new file mode 100644
index 0000000..56b8028
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main_lib1.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class1<T extends Object> {}
+
+typedef Typedef1<T extends int> = Class1<T>;
diff --git a/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main_lib2.dart b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main_lib2.dart
new file mode 100644
index 0000000..6ec94dd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/main_lib2.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class2<T extends Object> {}
+
+typedef Typedef2<T extends int> = Class2<T>;
diff --git a/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/test.options b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/test.options
new file mode 100644
index 0000000..8400751
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/default_type_from_opt_in/test.options
@@ -0,0 +1 @@
+main_lib2.dart
\ No newline at end of file
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect
index 6bf247e..6ff4604 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "main_lib1.dart" as mai;
-import "main_lib2.dart" as mai2;
 
 import "org-dartlang-testcase:///main_lib1.dart";
 import "org-dartlang-testcase:///main_lib2.dart";
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.modular.expect
index 864208b..9067a8a 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.modular.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "main_lib1.dart" as mai;
-import "main_lib2.dart" as mai2;
 
 import "org-dartlang-testcase:///main_lib1.dart";
 import "org-dartlang-testcase:///main_lib2.dart";
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.outline.expect
index 7f83539..8bb74bf 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.outline.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "main_lib1.dart" as mai;
-import "main_lib2.dart" as mai2;
 
 import "org-dartlang-testcase:///main_lib1.dart";
 import "org-dartlang-testcase:///main_lib2.dart";
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.transformed.expect
index 2a72e6a..336a50e 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "main_lib1.dart" as mai;
-import "main_lib2.dart" as mai2;
 
 import "org-dartlang-testcase:///main_lib1.dart";
 import "org-dartlang-testcase:///main_lib2.dart";
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect
index 6bf247e..6ff4604 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "main_lib1.dart" as mai;
-import "main_lib2.dart" as mai2;
 
 import "org-dartlang-testcase:///main_lib1.dart";
 import "org-dartlang-testcase:///main_lib2.dart";
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.modular.expect
index 6bf247e..6ff4604 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.modular.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "main_lib1.dart" as mai;
-import "main_lib2.dart" as mai2;
 
 import "org-dartlang-testcase:///main_lib1.dart";
 import "org-dartlang-testcase:///main_lib2.dart";
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.outline.expect
index 7f83539..8bb74bf 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.outline.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "main_lib1.dart" as mai;
-import "main_lib2.dart" as mai2;
 
 import "org-dartlang-testcase:///main_lib1.dart";
 import "org-dartlang-testcase:///main_lib2.dart";
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.transformed.expect
index 2a72e6a..336a50e 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "main_lib1.dart" as mai;
-import "main_lib2.dart" as mai2;
 
 import "org-dartlang-testcase:///main_lib1.dart";
 import "org-dartlang-testcase:///main_lib2.dart";
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.strong.expect
index 1722631..929831e 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.strong.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Error: Inferred type argument 'C<dynamic> Function(C<dynamic>)' doesn't conform to the bound 'C<X> Function(C<X>)' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Error: Inferred type argument 'G<C<dynamic>>' doesn't conform to the bound 'C<X> Function(C<X>)' of the type variable 'X' on 'A'.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   A a = throw 42; // Error.
@@ -10,11 +10,23 @@
 // pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef A<X extends G<C<X>>> = C<X>;
 //           ^
-// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Context: If you want 'A<C<dynamic> Function(C<dynamic>)>' to be a super-bounded type, note that the inverted type 'A<G<C<Never>>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Context: If you want 'A<G<C<dynamic>>>' to be a super-bounded type, note that the inverted type 'A<G<C<Never>>>' must then satisfy its bounds, which it does not.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart'.
 //   A a = throw 42; // Error.
 //   ^
 //
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:14:3: Error: Inferred type argument 'H<dynamic>' doesn't conform to the bound 'C<X Function(X)>' of the type variable 'X' on 'B'.
+//  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   B b = throw 42; // Error.
+//   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:10:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends H<X>> = C<X>;
+//           ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:14:3: Context: If you want 'B<H<dynamic>>' to be a super-bounded type, note that the inverted type 'B<H<Never>>' must then satisfy its bounds, which it does not.
+//   B b = throw 42; // Error.
+//   ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.strong.transformed.expect
index 1722631..929831e 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Error: Inferred type argument 'C<dynamic> Function(C<dynamic>)' doesn't conform to the bound 'C<X> Function(C<X>)' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Error: Inferred type argument 'G<C<dynamic>>' doesn't conform to the bound 'C<X> Function(C<X>)' of the type variable 'X' on 'A'.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   A a = throw 42; // Error.
@@ -10,11 +10,23 @@
 // pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef A<X extends G<C<X>>> = C<X>;
 //           ^
-// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Context: If you want 'A<C<dynamic> Function(C<dynamic>)>' to be a super-bounded type, note that the inverted type 'A<G<C<Never>>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Context: If you want 'A<G<C<dynamic>>>' to be a super-bounded type, note that the inverted type 'A<G<C<Never>>>' must then satisfy its bounds, which it does not.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart'.
 //   A a = throw 42; // Error.
 //   ^
 //
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:14:3: Error: Inferred type argument 'H<dynamic>' doesn't conform to the bound 'C<X Function(X)>' of the type variable 'X' on 'B'.
+//  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   B b = throw 42; // Error.
+//   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:10:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends H<X>> = C<X>;
+//           ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:14:3: Context: If you want 'B<H<dynamic>>' to be a super-bounded type, note that the inverted type 'B<H<Never>>' must then satisfy its bounds, which it does not.
+//   B b = throw 42; // Error.
+//   ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.expect
index 1722631..929831e 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Error: Inferred type argument 'C<dynamic> Function(C<dynamic>)' doesn't conform to the bound 'C<X> Function(C<X>)' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Error: Inferred type argument 'G<C<dynamic>>' doesn't conform to the bound 'C<X> Function(C<X>)' of the type variable 'X' on 'A'.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   A a = throw 42; // Error.
@@ -10,11 +10,23 @@
 // pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef A<X extends G<C<X>>> = C<X>;
 //           ^
-// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Context: If you want 'A<C<dynamic> Function(C<dynamic>)>' to be a super-bounded type, note that the inverted type 'A<G<C<Never>>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Context: If you want 'A<G<C<dynamic>>>' to be a super-bounded type, note that the inverted type 'A<G<C<Never>>>' must then satisfy its bounds, which it does not.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart'.
 //   A a = throw 42; // Error.
 //   ^
 //
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:14:3: Error: Inferred type argument 'H<dynamic>' doesn't conform to the bound 'C<X Function(X)>' of the type variable 'X' on 'B'.
+//  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   B b = throw 42; // Error.
+//   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:10:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends H<X>> = C<X>;
+//           ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:14:3: Context: If you want 'B<H<dynamic>>' to be a super-bounded type, note that the inverted type 'B<H<Never>>' must then satisfy its bounds, which it does not.
+//   B b = throw 42; // Error.
+//   ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.modular.expect
index 1722631..929831e 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.modular.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Error: Inferred type argument 'C<dynamic> Function(C<dynamic>)' doesn't conform to the bound 'C<X> Function(C<X>)' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Error: Inferred type argument 'G<C<dynamic>>' doesn't conform to the bound 'C<X> Function(C<X>)' of the type variable 'X' on 'A'.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   A a = throw 42; // Error.
@@ -10,11 +10,23 @@
 // pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef A<X extends G<C<X>>> = C<X>;
 //           ^
-// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Context: If you want 'A<C<dynamic> Function(C<dynamic>)>' to be a super-bounded type, note that the inverted type 'A<G<C<Never>>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Context: If you want 'A<G<C<dynamic>>>' to be a super-bounded type, note that the inverted type 'A<G<C<Never>>>' must then satisfy its bounds, which it does not.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart'.
 //   A a = throw 42; // Error.
 //   ^
 //
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:14:3: Error: Inferred type argument 'H<dynamic>' doesn't conform to the bound 'C<X Function(X)>' of the type variable 'X' on 'B'.
+//  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   B b = throw 42; // Error.
+//   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:10:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends H<X>> = C<X>;
+//           ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:14:3: Context: If you want 'B<H<dynamic>>' to be a super-bounded type, note that the inverted type 'B<H<Never>>' must then satisfy its bounds, which it does not.
+//   B b = throw 42; // Error.
+//   ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.transformed.expect
index 1722631..929831e 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Error: Inferred type argument 'C<dynamic> Function(C<dynamic>)' doesn't conform to the bound 'C<X> Function(C<X>)' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Error: Inferred type argument 'G<C<dynamic>>' doesn't conform to the bound 'C<X> Function(C<X>)' of the type variable 'X' on 'A'.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   A a = throw 42; // Error.
@@ -10,11 +10,23 @@
 // pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
 // typedef A<X extends G<C<X>>> = C<X>;
 //           ^
-// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Context: If you want 'A<C<dynamic> Function(C<dynamic>)>' to be a super-bounded type, note that the inverted type 'A<G<C<Never>>>' must then satisfy its bounds, which it does not.
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:13:3: Context: If you want 'A<G<C<dynamic>>>' to be a super-bounded type, note that the inverted type 'A<G<C<Never>>>' must then satisfy its bounds, which it does not.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart'.
 //   A a = throw 42; // Error.
 //   ^
 //
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:14:3: Error: Inferred type argument 'H<dynamic>' doesn't conform to the bound 'C<X Function(X)>' of the type variable 'X' on 'B'.
+//  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   B b = throw 42; // Error.
+//   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:10:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends H<X>> = C<X>;
+//           ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:14:3: Context: If you want 'B<H<dynamic>>' to be a super-bounded type, note that the inverted type 'B<H<Never>>' must then satisfy its bounds, which it does not.
+//   B b = throw 42; // Error.
+//   ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/outline.status b/pkg/front_end/testcases/outline.status
index a5ff68d..4e24ada 100644
--- a/pkg/front_end/testcases/outline.status
+++ b/pkg/front_end/testcases/outline.status
@@ -18,6 +18,7 @@
 extension_types/simple_show_hide: ExpectationFileMismatchSerialized # Expected.
 extension_types/type_variable_in_static_context: ExpectationFileMismatchSerialized # Expected.
 general/abstract_members: TypeCheckError
+general/bounds_type_parameters: TypeCheckError
 general/bug30695: TypeCheckError
 general/covariant_field: TypeCheckError
 general/crashes/crash_02/main: Crash
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index 2a12a528..4025cef 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -34,6 +34,7 @@
 general/ambiguous_exports: RuntimeError
 general/await_in_non_async: RuntimeError
 general/bounded_implicit_instantiation: TypeCheckError
+general/bounds_instances: TypeCheckError
 general/bug30695: TypeCheckError
 general/bug31124: RuntimeError
 general/call: RuntimeError
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index 68ae6c1..50e8f90 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -124,6 +124,7 @@
 general/ambiguous_exports: RuntimeError # Expected, this file exports two main methods.
 general/await_in_non_async: RuntimeError # Expected.
 general/bounded_implicit_instantiation: TypeCheckError
+general/bounds_instances: TypeCheckError
 general/bug30695: TypeCheckError
 general/bug31124: RuntimeError # Test has no main method (and we shouldn't add one).
 general/call: RuntimeError
diff --git a/pkg/front_end/tool/ast_model.dart b/pkg/front_end/tool/ast_model.dart
index 9979dcb..4ae1aee 100644
--- a/pkg/front_end/tool/ast_model.dart
+++ b/pkg/front_end/tool/ast_model.dart
@@ -174,7 +174,6 @@
   },
   'FunctionType': {
     'typeParameters': FieldRule(isDeclaration: true),
-    '_typedefType': FieldRule(name: 'typedefType'),
   },
   'TypeParameterType': {
     'parameter': FieldRule(isDeclaration: false),
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index c962060..4499a08 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -147,7 +147,7 @@
 
 type ComponentFile {
   UInt32 magic = 0x90ABCDEF;
-  UInt32 formatVersion = 79;
+  UInt32 formatVersion = 80;
   Byte[10] shortSdkHash;
   List<String> problemsAsJson; // Described in problems.md.
   Library[] libraries;
@@ -1463,7 +1463,6 @@
   UInt totalParameterCount;
   List<DartType> positionalParameters;
   List<NamedDartType> namedParameters;
-  Option<TypedefType> typedef;
   DartType returnType;
 }
 
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index f3f7728..78972bc 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -8752,8 +8752,7 @@
         type.positionalParameters, type.returnType, type.declaredNullability,
         namedParameters: type.namedParameters,
         typeParameters: freshTypeParameters.freshTypeParameters,
-        requiredParameterCount: type.requiredParameterCount,
-        typedefType: null);
+        requiredParameterCount: type.requiredParameterCount);
   }
 
   @override
@@ -11207,8 +11206,6 @@
   @override
   final Nullability declaredNullability;
 
-  TypedefType? _typedefType;
-
   final DartType returnType;
 
   @override
@@ -11218,27 +11215,10 @@
       this.declaredNullability,
       {this.namedParameters: const <NamedType>[],
       this.typeParameters: const <TypeParameter>[],
-      int? requiredParameterCount,
-      TypedefType? typedefType})
+      int? requiredParameterCount})
       : this.positionalParameters = positionalParameters,
         this.requiredParameterCount =
-            requiredParameterCount ?? positionalParameters.length,
-        _typedefType = typedefType;
-
-  Reference? get typedefReference => _typedefType?.typedefReference;
-
-  Typedef? get typedef => typedefReference?.asTypedef;
-
-  /// The [Typedef] this function type is created for, if any.
-  TypedefType? get typedefType => _typedefType;
-
-  void set typedefType(TypedefType? value) {
-    assert(
-        _typedefType == null,
-        "Cannot change an already set FunctionType.typedefType from "
-        "$_typedefType to $value.");
-    _typedefType = value;
-  }
+            requiredParameterCount ?? positionalParameters.length;
 
   @override
   Nullability get nullability => declaredNullability;
@@ -11255,7 +11235,6 @@
     visitList(typeParameters, v);
     visitList(positionalParameters, v);
     visitList(namedParameters, v);
-    typedefType?.accept(v);
     returnType.accept(v);
   }
 
@@ -11325,8 +11304,7 @@
     if (typeParameters.isEmpty) return this;
     return new FunctionType(positionalParameters, returnType, nullability,
         requiredParameterCount: requiredParameterCount,
-        namedParameters: namedParameters,
-        typedefType: null);
+        namedParameters: namedParameters);
   }
 
   /// Looks up the type of the named parameter with the given name.
@@ -11375,8 +11353,7 @@
         positionalParameters, returnType, declaredNullability,
         namedParameters: namedParameters,
         typeParameters: typeParameters,
-        requiredParameterCount: requiredParameterCount,
-        typedefType: typedefType?.withDeclaredNullability(declaredNullability));
+        requiredParameterCount: requiredParameterCount);
     if (typeParameters.isEmpty) return result;
     return getFreshTypeParameters(typeParameters).applyToFunctionType(result);
   }
@@ -13485,8 +13462,7 @@
         type.positionalParameters, type.returnType, type.declaredNullability,
         namedParameters: type.namedParameters,
         typeParameters: freshTypeParameters.freshTypeParameters,
-        requiredParameterCount: type.requiredParameterCount,
-        typedefType: null);
+        requiredParameterCount: type.requiredParameterCount);
   }
 }
 
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index bc9a385..9df6792 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -3089,7 +3089,6 @@
     int totalParameterCount = readUInt30();
     List<DartType> positional = readDartTypeList();
     List<NamedType> named = readNamedTypeList();
-    TypedefType? typedefType = readDartTypeOption() as TypedefType?;
     assert(positional.length + named.length == totalParameterCount);
     DartType returnType = readDartType();
     typeParameterStack.length = typeParameterStackHeight;
@@ -3097,8 +3096,7 @@
         positional, returnType, Nullability.values[nullabilityIndex],
         typeParameters: typeParameters,
         requiredParameterCount: requiredParameterCount,
-        namedParameters: named,
-        typedefType: typedefType);
+        namedParameters: named);
   }
 
   DartType _readSimpleFunctionType() {
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 3d18bb1..1f678e9 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -2390,8 +2390,7 @@
   void visitFunctionType(FunctionType node) {
     if (node.requiredParameterCount == node.positionalParameters.length &&
         node.typeParameters.isEmpty &&
-        node.namedParameters.isEmpty &&
-        node.typedefType == null) {
+        node.namedParameters.isEmpty) {
       writeByte(Tag.SimpleFunctionType);
       writeByte(node.nullability.index);
       writeNodeList(node.positionalParameters);
@@ -2406,7 +2405,6 @@
           node.positionalParameters.length + node.namedParameters.length);
       writeNodeList(node.positionalParameters);
       writeNodeList(node.namedParameters);
-      writeOptionalNode(node.typedefType);
       writeNode(node.returnType);
       leaveScope(typeParameters: node.typeParameters);
     }
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index f589ea5..aed4155 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -176,7 +176,7 @@
   /// Internal version of kernel binary format.
   /// Bump it when making incompatible changes in kernel binaries.
   /// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
-  static const int BinaryFormatVersion = 79;
+  static const int BinaryFormatVersion = 80;
 }
 
 abstract class ConstantTag {
diff --git a/pkg/kernel/lib/src/bounds_checks.dart b/pkg/kernel/lib/src/bounds_checks.dart
index e40aca5..884fe9d 100644
--- a/pkg/kernel/lib/src/bounds_checks.dart
+++ b/pkg/kernel/lib/src/bounds_checks.dart
@@ -284,16 +284,16 @@
   }
 }
 
-// Finds type arguments that don't follow the rules of well-boundness.
+// Finds type arguments that don't follow the rules of well-boundedness.
 //
 // [bottomType] should be either Null or Never, depending on what should be
 // taken for the bottom type at the call site.  The bottom type is used in the
-// checks for super-boundness for construction of the auxiliary type.  For
+// checks for super-boundedness for construction of the auxiliary type.  For
 // details see Dart Language Specification, Section 14.3.2 The Instantiation to
 // Bound Algorithm.
 List<TypeArgumentIssue> findTypeArgumentIssues(DartType type,
     TypeEnvironment typeEnvironment, SubtypeCheckMode subtypeCheckMode,
-    {bool allowSuperBounded = false,
+    {required bool allowSuperBounded,
     required bool isNonNullableByDefault,
     required bool areGenericArgumentsAllowed}) {
   // ignore: unnecessary_null_comparison
@@ -305,26 +305,6 @@
   List<DartType> arguments = const <DartType>[];
   List<TypeArgumentIssue> typedefRhsResult = const <TypeArgumentIssue>[];
 
-  if (type is FunctionType && type.typedefType != null) {
-    // [type] is a function type that is an application of a parametrized
-    // typedef.  We need to check both the l.h.s. and the r.h.s. of the
-    // definition in that case.  For details, see [link]
-    // (https://github.com/dart-lang/sdk/blob/master/docs/language/informal/super-bounded-types.md).
-    FunctionType functionType = type;
-    FunctionType cloned = new FunctionType(functionType.positionalParameters,
-        functionType.returnType, functionType.nullability,
-        namedParameters: functionType.namedParameters,
-        typeParameters: functionType.typeParameters,
-        requiredParameterCount: functionType.requiredParameterCount,
-        typedefType: null);
-    typedefRhsResult = findTypeArgumentIssues(
-        cloned, typeEnvironment, subtypeCheckMode,
-        allowSuperBounded: true,
-        isNonNullableByDefault: isNonNullableByDefault,
-        areGenericArgumentsAllowed: areGenericArgumentsAllowed);
-    type = functionType.typedefType!;
-  }
-
   if (type is InterfaceType) {
     variables = type.classNode.typeParameters;
     arguments = type.typeArguments;
@@ -334,14 +314,6 @@
   } else if (type is FunctionType) {
     List<TypeArgumentIssue> result = <TypeArgumentIssue>[];
 
-    for (TypeParameter parameter in type.typeParameters) {
-      result.addAll(findTypeArgumentIssues(
-          parameter.bound, typeEnvironment, subtypeCheckMode,
-          allowSuperBounded: true,
-          isNonNullableByDefault: isNonNullableByDefault,
-          areGenericArgumentsAllowed: areGenericArgumentsAllowed));
-    }
-
     for (DartType formal in type.positionalParameters) {
       result.addAll(findTypeArgumentIssues(
           formal, typeEnvironment, subtypeCheckMode,
@@ -401,12 +373,6 @@
       // The bound is InvalidType so it's not checked, because an error was
       // reported already at the time of the creation of InvalidType.
     }
-
-    argumentsResult.addAll(findTypeArgumentIssues(
-        argument, typeEnvironment, subtypeCheckMode,
-        allowSuperBounded: true,
-        isNonNullableByDefault: isNonNullableByDefault,
-        areGenericArgumentsAllowed: areGenericArgumentsAllowed));
   }
   result.addAll(argumentsResult);
   result.addAll(typedefRhsResult);
@@ -440,6 +406,8 @@
       new Map<TypeParameter, DartType>.fromIterables(variables, arguments);
   for (int i = 0; i < arguments.length; ++i) {
     DartType argument = arguments[i];
+    // TODO(johnniwinther): Should we check this even when generic functions
+    // as type arguments is allowed?
     if (isGenericFunctionTypeOrAlias(argument)) {
       // Generic function types aren't allowed as type arguments either.
       isCorrectSuperBounded = false;
@@ -517,12 +485,6 @@
         result.add(new TypeArgumentIssue(i, argument, parameters[i], null));
       }
     }
-
-    result.addAll(findTypeArgumentIssues(
-        argument, typeEnvironment, subtypeCheckMode,
-        allowSuperBounded: true,
-        isNonNullableByDefault: isNonNullableByDefault,
-        areGenericArgumentsAllowed: areGenericArgumentsAllowed));
   }
   return result;
 }
@@ -554,6 +516,7 @@
 class _SuperBoundedTypeInverter extends ReplacementVisitor {
   final TypeEnvironment typeEnvironment;
   final bool isNonNullableByDefault;
+  bool isOutermost = true;
 
   _SuperBoundedTypeInverter(this.typeEnvironment,
       {required this.isNonNullableByDefault})
@@ -629,6 +592,7 @@
 
   @override
   DartType? visitInterfaceType(InterfaceType node, int variance) {
+    isOutermost = false;
     // Check for Object-based top types.
     if (isTop(node) && flipTop(variance)) {
       return bottomType;
@@ -639,6 +603,7 @@
 
   @override
   DartType? visitFutureOrType(FutureOrType node, int variance) {
+    isOutermost = false;
     // Check FutureOr-based top types.
     if (isTop(node) && flipTop(variance)) {
       return bottomType;
@@ -679,10 +644,12 @@
 
   // TypedefTypes receive special treatment because the variance of their
   // arguments' positions depend on the opt-in status of the library.
-  // TODO(cstefantsova): Remove the method when the discrepancy between the
-  // NNBD modes is resolved.
   @override
   DartType? visitTypedefType(TypedefType node, int variance) {
+    if (!isNonNullableByDefault && !isOutermost) {
+      return node.unalias.accept1(this, variance);
+    }
+    isOutermost = false;
     Nullability? newNullability = visitNullability(node);
     List<DartType>? newTypeArguments = null;
     for (int i = 0; i < node.typeArguments.length; i++) {
@@ -706,13 +673,8 @@
 
   @override
   DartType? visitFunctionType(FunctionType node, int variance) {
-    // The variance of the Typedef parameters should be taken into account only
-    // when for the NNBD code.
-    if (node.typedefType != null && isNonNullableByDefault) {
-      return node.typedefType!.accept1(this, variance);
-    } else {
-      return super.visitFunctionType(node, variance);
-    }
+    isOutermost = false;
+    return super.visitFunctionType(node, variance);
   }
 }
 
@@ -887,3 +849,49 @@
   if (type is TypedefType) type = type.unalias;
   return type is FunctionType && type.typeParameters.isNotEmpty;
 }
+
+bool hasGenericFunctionTypeAsTypeArgument(DartType type) {
+  return type.accept1(
+      const _HasGenericFunctionTypeAsTypeArgumentVisitor(), false);
+}
+
+class _HasGenericFunctionTypeAsTypeArgumentVisitor
+    extends DartTypeVisitor1<bool, bool> {
+  const _HasGenericFunctionTypeAsTypeArgumentVisitor();
+
+  @override
+  bool defaultDartType(DartType node, bool isTypeArgument) => false;
+
+  @override
+  bool visitFunctionType(FunctionType node, bool isTypeArgument) {
+    if (isTypeArgument && node.typeParameters.isNotEmpty) {
+      return true;
+    }
+    // TODO(johnniwinther): Should deeply nested generic function types be
+    //  disallowed?
+    if (node.returnType.accept1(this, false)) return true;
+    for (DartType parameterType in node.positionalParameters) {
+      if (parameterType.accept1(this, false)) return true;
+    }
+    for (NamedType namedParameterType in node.namedParameters) {
+      if (namedParameterType.type.accept1(this, false)) return true;
+    }
+    return false;
+  }
+
+  @override
+  bool visitInterfaceType(InterfaceType node, bool isTypeArgument) {
+    for (DartType typeArgument in node.typeArguments) {
+      if (typeArgument.accept1(this, true)) return true;
+    }
+    return false;
+  }
+
+  @override
+  bool visitTypedefType(TypedefType node, bool isTypeArgument) {
+    for (DartType typeArgument in node.typeArguments) {
+      if (typeArgument.accept1(this, true)) return true;
+    }
+    return false;
+  }
+}
diff --git a/pkg/kernel/lib/src/dart_type_equivalence.dart b/pkg/kernel/lib/src/dart_type_equivalence.dart
index aeea30f..18a2081 100644
--- a/pkg/kernel/lib/src/dart_type_equivalence.dart
+++ b/pkg/kernel/lib/src/dart_type_equivalence.dart
@@ -44,47 +44,6 @@
         return false;
       }
 
-      // If the two types are un-aliased typedef instantiations, check that
-      // those instantiations are equal as well.
-      bool nodeIsUnaliased = node.typedefType != null;
-      bool otherIsUnaliased = other.typedefType != null;
-      if (nodeIsUnaliased != otherIsUnaliased) {
-        return false;
-      }
-      if (node.typedefType != null) {
-        // The assert below checks the implication: if the typedef types are
-        // equal, their un-aliased types are equal as well.  The reverse is not
-        // true due to possibly unused type parameters F<int> and F<String> may
-        // be equal when un-aliased if the type parameter of typedef F isn't
-        // used on the right-hand side of the definition of F.  The checked
-        // proposition in the assert allows to skip checking the function types
-        // themselves if the typedef types are equal.
-        assert(() {
-          DartTypeEquivalence copy = this.copy();
-          if (!copy.areEqual(node.typedefType!, other.typedefType!)) {
-            return true;
-          }
-          FunctionType nodeWithoutTypedefType = new FunctionType(
-              node.positionalParameters,
-              node.returnType,
-              node.declaredNullability,
-              namedParameters: node.namedParameters,
-              typeParameters: node.typeParameters,
-              requiredParameterCount: node.requiredParameterCount,
-              typedefType: null);
-          FunctionType otherWithoutTypedefType = new FunctionType(
-              other.positionalParameters,
-              other.returnType,
-              other.declaredNullability,
-              namedParameters: other.namedParameters,
-              typeParameters: other.typeParameters,
-              requiredParameterCount: other.requiredParameterCount,
-              typedefType: null);
-          return copy.areEqual(nodeWithoutTypedefType, otherWithoutTypedefType);
-        }());
-        return node.typedefType!.accept1(this, other.typedefType);
-      }
-
       // Perform simple number checks before the checks on parts.
       if (node.typeParameters.length != other.typeParameters.length) {
         return false;
diff --git a/pkg/kernel/lib/src/equivalence.dart b/pkg/kernel/lib/src/equivalence.dart
index 3f11abc..840f85b 100644
--- a/pkg/kernel/lib/src/equivalence.dart
+++ b/pkg/kernel/lib/src/equivalence.dart
@@ -4074,9 +4074,6 @@
     if (!checkFunctionType_declaredNullability(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
-    if (!checkFunctionType_typedefType(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
     if (!checkFunctionType_returnType(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
@@ -7122,12 +7119,6 @@
         other.declaredNullability, 'declaredNullability');
   }
 
-  bool checkFunctionType_typedefType(
-      EquivalenceVisitor visitor, FunctionType node, FunctionType other) {
-    return visitor.checkNodes(
-        node.typedefType, other.typedefType, 'typedefType');
-  }
-
   bool checkFunctionType_returnType(
       EquivalenceVisitor visitor, FunctionType node, FunctionType other) {
     return visitor.checkNodes(node.returnType, other.returnType, 'returnType');
diff --git a/pkg/kernel/lib/src/merge_visitor.dart b/pkg/kernel/lib/src/merge_visitor.dart
index fe27f5c..58e18fa 100644
--- a/pkg/kernel/lib/src/merge_visitor.dart
+++ b/pkg/kernel/lib/src/merge_visitor.dart
@@ -116,19 +116,10 @@
       }
       newNamedParameters[i] = newNamedType;
     }
-    TypedefType? newTypedefType;
-    if (a.typedefType != null && b.typedefType != null) {
-      newTypedefType =
-          mergeTypes(a.typedefType!, b.typedefType!) as TypedefType?;
-      // If the typedef couldn't be merged we just omit it from the resulting
-      // function type since the typedef type is only informational.
-    }
-
     return new FunctionType(newPositionalParameters, newReturnType, nullability,
         namedParameters: newNamedParameters,
         typeParameters: newTypeParameters,
-        requiredParameterCount: a.requiredParameterCount,
-        typedefType: newTypedefType);
+        requiredParameterCount: a.requiredParameterCount);
   }
 
   NamedType? mergeNamedTypes(NamedType a, NamedType b, DartType newType) {
diff --git a/pkg/kernel/lib/src/replacement_visitor.dart b/pkg/kernel/lib/src/replacement_visitor.dart
index 2f625b4..5a60355 100644
--- a/pkg/kernel/lib/src/replacement_visitor.dart
+++ b/pkg/kernel/lib/src/replacement_visitor.dart
@@ -83,17 +83,9 @@
         newNamedParameters[i] = newNamedType;
       }
     }
-    TypedefType? newTypedefType =
-        visitType(node.typedefType, variance) as TypedefType?;
 
-    return createFunctionType(
-        node,
-        newNullability,
-        newTypeParameters,
-        newReturnType,
-        newPositionalParameters,
-        newNamedParameters,
-        newTypedefType);
+    return createFunctionType(node, newNullability, newTypeParameters,
+        newReturnType, newPositionalParameters, newNamedParameters);
   }
 
   NamedType? createNamedType(NamedType node, DartType? newType) {
@@ -110,13 +102,11 @@
       List<TypeParameter>? newTypeParameters,
       DartType? newReturnType,
       List<DartType>? newPositionalParameters,
-      List<NamedType>? newNamedParameters,
-      TypedefType? newTypedefType) {
+      List<NamedType>? newNamedParameters) {
     if (newNullability == null &&
         newReturnType == null &&
         newPositionalParameters == null &&
-        newNamedParameters == null &&
-        newTypedefType == null) {
+        newNamedParameters == null) {
       // No nullability or types had to be substituted.
       return null;
     } else {
@@ -126,8 +116,7 @@
           newNullability ?? node.nullability,
           namedParameters: newNamedParameters ?? node.namedParameters,
           typeParameters: newTypeParameters ?? node.typeParameters,
-          requiredParameterCount: node.requiredParameterCount,
-          typedefType: newTypedefType ?? node.typedefType);
+          requiredParameterCount: node.requiredParameterCount);
     }
   }
 
diff --git a/pkg/kernel/lib/src/unaliasing.dart b/pkg/kernel/lib/src/unaliasing.dart
new file mode 100644
index 0000000..107c696
--- /dev/null
+++ b/pkg/kernel/lib/src/unaliasing.dart
@@ -0,0 +1,111 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE.md file.
+
+import 'package:kernel/type_algebra.dart';
+
+import '../ast.dart';
+import 'legacy_erasure.dart';
+import 'replacement_visitor.dart';
+
+/// Replaces all occurrences of [TypedefType] in [type] with the corresponding
+/// unaliased type.
+///
+/// If [legacyEraseAliases] is `true`, the unaliased types will be legacy
+/// erased. This used when the [TypedefType] was used in a legacy library.
+DartType unalias(DartType type, {required bool legacyEraseAliases}) {
+  return rawUnalias(type, legacyEraseAliases: legacyEraseAliases) ?? type;
+}
+
+/// Replaces all occurrences of [TypedefType] in [types] with the corresponding
+/// unaliased types.
+///
+/// If [legacyEraseAliases] is `true`, the unaliased types will be legacy
+/// erased. This used when the [TypedefType] was used in a legacy library.
+List<DartType>? unaliasTypes(List<DartType>? types,
+    {required bool legacyEraseAliases}) {
+  if (types == null) return null;
+  return rawUnaliasTypes(types, legacyEraseAliases: legacyEraseAliases) ??
+      types;
+}
+
+/// Replaces all occurrences of [TypedefType] in [type] with the corresponding
+/// unaliased type, or returns `null` if no [TypedefType]s were found.
+///
+/// If [legacyEraseAliases] is `true`, the unaliased types will be legacy
+/// erased. This used when the [TypedefType] was used in a legacy library.
+DartType? rawUnalias(DartType type, {required bool legacyEraseAliases}) {
+  return type.accept1(
+      legacyEraseAliases
+          ? const _Unalias(legacyEraseAliases: true)
+          : const _Unalias(legacyEraseAliases: false),
+      Variance.covariant);
+}
+
+/// Replaces all occurrences of [TypedefType] in [types] with the corresponding
+/// unaliased types, or returns `null` if no [TypedefType]s were found.
+///
+/// If [legacyEraseAliases] is `true`, the unaliased types will be legacy
+/// erased. This used when the [TypedefType] was used in a legacy library.
+List<DartType>? rawUnaliasTypes(List<DartType> types,
+    {required bool legacyEraseAliases}) {
+  List<DartType>? newTypes;
+  for (int i = 0; i < types.length; i++) {
+    DartType typeArgument = types[i];
+    DartType? newTypeArgument =
+        rawUnalias(typeArgument, legacyEraseAliases: legacyEraseAliases);
+    if (newTypeArgument != null) {
+      newTypes ??= types.toList(growable: false);
+      newTypes[i] = newTypeArgument;
+    }
+  }
+  return newTypes;
+}
+
+/// Visitor that replaces all occurrences of [TypedefType] with the
+/// corresponding unaliased type, or returns `null` if no type was replaced.
+///
+/// If [legacyEraseAliases] is `true`, the unaliased types will be legacy
+/// erased. This used when the [TypedefType] was used in a legacy library.
+class _Unalias extends ReplacementVisitor {
+  final bool legacyEraseAliases;
+
+  const _Unalias({required this.legacyEraseAliases});
+
+  @override
+  DartType visitTypedefType(TypedefType node, int variance) {
+    DartType result;
+    if (node.typeArguments.isNotEmpty) {
+      List<DartType>? newTypeArguments = null;
+      for (int i = 0; i < node.typeArguments.length; i++) {
+        DartType? substitution = node.typeArguments[i].accept1(this, variance);
+        if (substitution != null) {
+          newTypeArguments ??= node.typeArguments.toList(growable: false);
+          newTypeArguments[i] = substitution;
+        }
+      }
+      if (newTypeArguments != null) {
+        result = new TypedefType(
+                node.typedefNode, node.nullability, newTypeArguments)
+            .unalias;
+      } else {
+        result = node.unalias;
+      }
+    } else {
+      result = node.unalias;
+    }
+    if (node.nullability == Nullability.legacy ||
+        node.typedefNode.type!.nullability == Nullability.legacy) {
+      // The typedef is defined or used in an opt-out library so the nullability
+      // is based on the use site alone.
+      result = result.withDeclaredNullability(node.nullability);
+    } else {
+      result = result.withDeclaredNullability(
+          uniteNullabilities(node.nullability, result.nullability));
+    }
+    if (legacyEraseAliases) {
+      result = legacyErasure(result);
+    }
+    return result;
+  }
+}
diff --git a/pkg/kernel/lib/testing/type_parser_environment.dart b/pkg/kernel/lib/testing/type_parser_environment.dart
index 1f9fab5..c550c02 100644
--- a/pkg/kernel/lib/testing/type_parser_environment.dart
+++ b/pkg/kernel/lib/testing/type_parser_environment.dart
@@ -414,14 +414,7 @@
             f.positionalParameters, f.returnType, Nullability.nonNullable,
             namedParameters: f.namedParameters,
             typeParameters: f.typeParameters,
-            requiredParameterCount: f.requiredParameterCount,
-            typedefType: new TypedefType(
-                def,
-                Nullability.nonNullable,
-                def.typeParameters
-                    .map((p) => new TypeParameterType(
-                        p, TypeParameterType.computeNullabilityFromBound(p)))
-                    .toList()));
+            requiredParameterCount: f.requiredParameterCount);
       }
     }
     return def..type = type;
diff --git a/pkg/kernel/lib/type_algebra.dart b/pkg/kernel/lib/type_algebra.dart
index f776684..a0ee467 100644
--- a/pkg/kernel/lib/type_algebra.dart
+++ b/pkg/kernel/lib/type_algebra.dart
@@ -168,10 +168,7 @@
         substitute(type.returnType), type.nullability,
         namedParameters: type.namedParameters.map(substituteNamed).toList(),
         typeParameters: freshTypeParameters,
-        requiredParameterCount: type.requiredParameterCount,
-        typedefType: type.typedefType == null
-            ? null
-            : substitute(type.typedefType!) as TypedefType);
+        requiredParameterCount: type.requiredParameterCount);
   }
 
   DartType substitute(DartType type) => substitution.substituteType(type);
@@ -769,15 +766,11 @@
         : node.namedParameters.map(inner.visitNamedType).toList();
     inner.invertVariance();
     DartType returnType = inner.visit(node.returnType);
-    TypedefType? typedefType = node.typedefType == null
-        ? null
-        : inner.visit(node.typedefType!) as TypedefType;
     if (this.useCounter == before) return node;
     return new FunctionType(positionalParameters, returnType, node.nullability,
         namedParameters: namedParameters,
         typeParameters: typeParameters,
-        requiredParameterCount: node.requiredParameterCount,
-        typedefType: typedefType);
+        requiredParameterCount: node.requiredParameterCount);
   }
 
   void bumpCountersUntil(_TypeSubstitutor target) {
@@ -941,7 +934,7 @@
 
   @override
   bool defaultDartType(DartType node) {
-    throw new UnsupportedError("Unsupported type $node (${node.runtimeType}.");
+    throw new UnsupportedError("Unsupported type $node (${node.runtimeType}).");
   }
 
   bool visitNamedType(NamedType node) {
diff --git a/pkg/kernel/lib/type_checker.dart b/pkg/kernel/lib/type_checker.dart
index e19ef36..293015d 100644
--- a/pkg/kernel/lib/type_checker.dart
+++ b/pkg/kernel/lib/type_checker.dart
@@ -566,8 +566,7 @@
         result.declaredNullability,
         namedParameters: result.namedParameters,
         typeParameters: freshTypeParameters.freshTypeParameters,
-        requiredParameterCount: result.requiredParameterCount,
-        typedefType: null);
+        requiredParameterCount: result.requiredParameterCount);
   }
 
   @override
diff --git a/pkg/kernel/lib/visitor.dart b/pkg/kernel/lib/visitor.dart
index cbd116e..d88c2a9 100644
--- a/pkg/kernel/lib/visitor.dart
+++ b/pkg/kernel/lib/visitor.dart
@@ -726,6 +726,8 @@
 }
 
 abstract class DartTypeVisitor1<R, T> {
+  const DartTypeVisitor1();
+
   R defaultDartType(DartType node, T arg);
 
   R visitInvalidType(InvalidType node, T arg) => defaultDartType(node, arg);
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
index 209910e..ecf11c7 100644
--- a/pkg/vm/lib/transformations/type_flow/transformer.dart
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -989,10 +989,6 @@
   @override
   visitFunctionType(FunctionType node) {
     node.visitChildren(this);
-    final typedef = node.typedef;
-    if (typedef != null) {
-      shaker.addUsedTypedef(typedef);
-    }
   }
 
   @override
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/annotation.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/annotation.dart.expect
index a86774c..220d635 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/annotation.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/annotation.dart.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-typedef SomeType<contravariant T extends core::Object? = dynamic> = (core::List<T%>) → void;
 abstract class A extends core::Object {
   static method staticMethod() → void {}
 }
diff --git a/runtime/vm/compiler/frontend/kernel_fingerprints.cc b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
index 21884e4..3a888c4 100644
--- a/runtime/vm/compiler/frontend/kernel_fingerprints.cc
+++ b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
@@ -310,11 +310,6 @@
     }
   }
 
-  if (!simple) {
-    // TODO(bkonyi): include in hash.
-    SkipOptionalDartType();  // read typedef type.
-  }
-
   CalculateDartTypeFingerprint();  // read return type.
 }
 
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index 66a054c..e300802 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -2262,10 +2262,6 @@
     }
   }
 
-  if (!simple) {
-    SkipOptionalDartType();  // read typedef type.
-  }
-
   SkipDartType();  // read return type.
 }
 
@@ -3262,10 +3258,6 @@
   }
   signature.FinalizeNameArray();
 
-  if (!simple) {
-    helper_->SkipOptionalDartType();  // read typedef type.
-  }
-
   BuildTypeInternal();  // read return type.
   signature.set_result_type(result_);
 
diff --git a/runtime/vm/compiler/frontend/scope_builder.cc b/runtime/vm/compiler/frontend/scope_builder.cc
index 6363a5e..89d7660 100644
--- a/runtime/vm/compiler/frontend/scope_builder.cc
+++ b/runtime/vm/compiler/frontend/scope_builder.cc
@@ -1467,10 +1467,6 @@
     }
   }
 
-  if (!simple) {
-    helper_.SkipOptionalDartType();  // read typedef reference.
-  }
-
   VisitDartType();  // read return type.
 }
 
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index 08d9da7..6e6972f 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -20,8 +20,8 @@
 static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
 
 // Both version numbers are inclusive.
-static const uint32_t kMinSupportedKernelFormatVersion = 79;
-static const uint32_t kMaxSupportedKernelFormatVersion = 79;
+static const uint32_t kMinSupportedKernelFormatVersion = 80;
+static const uint32_t kMaxSupportedKernelFormatVersion = 80;
 
 // Keep in sync with package:kernel/lib/binary/tag.dart
 #define KERNEL_TAG_LIST(V)                                                     \
diff --git a/tests/language/generic/f_bounded_quantification_test.dart b/tests/language/generic/f_bounded_quantification_test.dart
index 4247e7d..6b7c5fd 100644
--- a/tests/language/generic/f_bounded_quantification_test.dart
+++ b/tests/language/generic/f_bounded_quantification_test.dart
@@ -17,10 +17,10 @@
 main() {
   FBound<Bar> fb = new FBound<Bar>();
   FBound<SubBar> fsb = new FBound<SubBar>();
+//^
+// [cfe] Type argument 'SubBar' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
   //     ^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-  //             ^
-  // [cfe] Type argument 'SubBar' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
   //                       ^
   // [cfe] Type argument 'SubBar' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
   //                              ^^^^^^
@@ -28,10 +28,10 @@
 
   FBound<Baz<Bar>> fbb = new FBound<Baz<Bar>>();
   FBound<SubBaz<Bar>> fsbb = new FBound<SubBaz<Bar>>();
+//^
+// [cfe] Type argument 'SubBaz<Bar>' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
   //     ^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-  //                  ^
-  // [cfe] Type argument 'SubBaz<Bar>' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
   //                             ^
   // [cfe] Type argument 'SubBaz<Bar>' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
   //                                    ^^^^^^^^^^^
diff --git a/tests/language/generic/function_type_as_type_argument_test.dart b/tests/language/generic/function_type_as_type_argument_test.dart
index e932d53..0c4ae28 100644
--- a/tests/language/generic/function_type_as_type_argument_test.dart
+++ b/tests/language/generic/function_type_as_type_argument_test.dart
@@ -18,17 +18,16 @@
 
   // Generic function types are not allowed as type arguments.
   List<T Function<T>(T)> typedList = <T Function<T>(T)>[foo];
-  //   ^^^^^^^^^^^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT
-  //                     ^
-  // [cfe] A generic function type can't be used as a type argument.
+//^
+// [cfe] A generic function type can't be used as a type argument.
+//     ^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT
 
   // Type inference must also give an error.
   var inferredList = [foo];
-  //  ^
-  // [cfe] Generic function type 'T Function<T>(T)' inferred as a type argument.
   //                 ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
+  // [cfe] Generic function type 'T Function<T>(T)' inferred as a type argument.
 
   // No error if illegal type cannot be inferred.
   var dynamicList = <dynamic>[foo];
diff --git a/tests/language/generic/super_bounded_types_error2_test.dart b/tests/language/generic/super_bounded_types_error2_test.dart
index 39d9d4c..eed2bff 100644
--- a/tests/language/generic/super_bounded_types_error2_test.dart
+++ b/tests/language/generic/super_bounded_types_error2_test.dart
@@ -50,2286 +50,2196 @@
   FcovCyclicCoBound<Function(Never?)> x1;
 //^
 // [analyzer] unspecified
-//                                    ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   FcovCyclicCoBound<Function(Null)> x2;
 //^
 // [analyzer] unspecified
-//                                  ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   FcovCyclicCoBound<Function(N)> x3;
 //^
 // [analyzer] unspecified
-//                               ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   CFcon<Fcon<Never?>> x4;
 //^
 // [analyzer] unspecified
-//                    ^
-// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+// [cfe] Type argument 'Fcon<Never?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   CFcon<Fcon<Null>> x5;
 //^
 // [analyzer] unspecified
-//                  ^
-// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+// [cfe] Type argument 'Fcon<Null>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   CFcon<Fcon<N>> x6;
 //^
 // [analyzer] unspecified
-//               ^
-// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+// [cfe] Type argument 'Fcon<N>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   CcovCyclicCoBound<Function(Never?)> x7;
 //^
 // [analyzer] unspecified
-//                                    ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   CcovCyclicCoBound<Function(Null)> x8;
 //^
 // [analyzer] unspecified
-//                                  ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   CcovCyclicCoBound<Function(N)> x9;
 //^
 // [analyzer] unspecified
-//                               ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
 
   // --- Same non-super-bounded types in a context.
   A<FcovCyclicCoBound<Function(Never?)>> x10;
 //^
 // [analyzer] unspecified
-//                                       ^
+//  ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   A<FcovCyclicCoBound<Function(Null)>> x11;
 //^
 // [analyzer] unspecified
-//                                     ^
+//  ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   A<FcovCyclicCoBound<Function(N)>> x12;
 //^
 // [analyzer] unspecified
-//                                  ^
+//  ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   A<CFcon<Fcon<Never?>>> x13;
 //^
 // [analyzer] unspecified
-//                       ^
-// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//  ^
+// [cfe] Type argument 'Fcon<Never?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   A<CFcon<Fcon<Null>>> x14;
 //^
 // [analyzer] unspecified
-//                     ^
-// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//  ^
+// [cfe] Type argument 'Fcon<Null>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   A<CFcon<Fcon<N>>> x15;
 //^
 // [analyzer] unspecified
-//                  ^
-// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//  ^
+// [cfe] Type argument 'Fcon<N>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   A<CcovCyclicCoBound<Function(Never?)>> x16;
 //^
 // [analyzer] unspecified
-//                                       ^
+//  ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   A<CcovCyclicCoBound<Function(Null)>> x17;
 //^
 // [analyzer] unspecified
-//                                     ^
+//  ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   A<CcovCyclicCoBound<Function(N)>> x18;
 //^
 // [analyzer] unspecified
-//                                  ^
+//  ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   FcovCyclicCoBound<Function(Never?)> Function() x19;
 //^
 // [analyzer] unspecified
-//                                               ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   FcovCyclicCoBound<Function(Null)> Function() x20;
 //^
 // [analyzer] unspecified
-//                                             ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   FcovCyclicCoBound<Function(N)> Function() x21;
 //^
 // [analyzer] unspecified
-//                                          ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   CFcon<Fcon<Never?>> Function() x22;
 //^
 // [analyzer] unspecified
-//                               ^
-// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+// [cfe] Type argument 'Fcon<Never?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   CFcon<Fcon<Null>> Function() x23;
 //^
 // [analyzer] unspecified
-//                             ^
-// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+// [cfe] Type argument 'Fcon<Null>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   CFcon<Fcon<N>> Function() x24;
 //^
 // [analyzer] unspecified
-//                          ^
-// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+// [cfe] Type argument 'Fcon<N>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   CcovCyclicCoBound<Function(Never?)> Function() x25;
 //^
 // [analyzer] unspecified
-//                                               ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   CcovCyclicCoBound<Function(Null)> Function() x26;
 //^
 // [analyzer] unspecified
-//                                             ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   CcovCyclicCoBound<Function(N)> Function() x27;
 //^
 // [analyzer] unspecified
-//                                          ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(void Function(FcovCyclicCoBound<Function(Never?)>)) x28;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//                            ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(void Function(FcovCyclicCoBound<Function(Null)>)) x29;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//                            ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(void Function(FcovCyclicCoBound<Function(N)>)) x30;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//                            ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(void Function(CFcon<Fcon<Never?>>)) x31;
 //^
 // [analyzer] unspecified
-//                                                  ^
-// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//                            ^
+// [cfe] Type argument 'Fcon<Never?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function(void Function(CFcon<Fcon<Null>>)) x32;
 //^
 // [analyzer] unspecified
-//                                                ^
-// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//                            ^
+// [cfe] Type argument 'Fcon<Null>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function(void Function(CFcon<Fcon<N>>)) x33;
 //^
 // [analyzer] unspecified
-//                                             ^
-// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//                            ^
+// [cfe] Type argument 'Fcon<N>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function(void Function(CcovCyclicCoBound<Function(Never?)>)) x34;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//                            ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(void Function(CcovCyclicCoBound<Function(Null)>)) x35;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//                            ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(void Function(CcovCyclicCoBound<Function(N)>)) x36;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//                            ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(FcovCyclicCoBound<Function(Never?)>) x37;
 //^
 // [analyzer] unspecified
-//                                                   ^
+//              ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(FcovCyclicCoBound<Function(Null)>) x38;
 //^
 // [analyzer] unspecified
-//                                                 ^
+//              ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(FcovCyclicCoBound<Function(N)>) x39;
 //^
 // [analyzer] unspecified
-//                                              ^
+//              ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(CFcon<Fcon<Never?>>) x40;
 //^
 // [analyzer] unspecified
-//                                   ^
-// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//              ^
+// [cfe] Type argument 'Fcon<Never?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function(CFcon<Fcon<Null>>) x41;
 //^
 // [analyzer] unspecified
-//                                 ^
-// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//              ^
+// [cfe] Type argument 'Fcon<Null>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function(CFcon<Fcon<N>>) x42;
 //^
 // [analyzer] unspecified
-//                              ^
-// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//              ^
+// [cfe] Type argument 'Fcon<N>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function(CcovCyclicCoBound<Function(Never?)>) x43;
 //^
 // [analyzer] unspecified
-//                                                   ^
+//              ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(CcovCyclicCoBound<Function(Null)>) x44;
 //^
 // [analyzer] unspecified
-//                                                 ^
+//              ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(CcovCyclicCoBound<Function(N)>) x45;
 //^
 // [analyzer] unspecified
-//                                              ^
+//              ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(FcovCyclicCoBound<Function(Never?)>) Function() x46;
 //^
 // [analyzer] unspecified
-//                                                              ^
+//              ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(FcovCyclicCoBound<Function(Null)>) Function() x47;
 //^
 // [analyzer] unspecified
-//                                                            ^
+//              ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(FcovCyclicCoBound<Function(N)>) Function() x48;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//              ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(CFcon<Fcon<Never?>>) Function() x49;
 //^
 // [analyzer] unspecified
-//                                              ^
-// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//              ^
+// [cfe] Type argument 'Fcon<Never?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function(CFcon<Fcon<Null>>) Function() x50;
 //^
 // [analyzer] unspecified
-//                                            ^
-// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//              ^
+// [cfe] Type argument 'Fcon<Null>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function(CFcon<Fcon<N>>) Function() x51;
 //^
 // [analyzer] unspecified
-//                                         ^
-// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//              ^
+// [cfe] Type argument 'Fcon<N>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function(CcovCyclicCoBound<Function(Never?)>) Function() x52;
 //^
 // [analyzer] unspecified
-//                                                              ^
+//              ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(CcovCyclicCoBound<Function(Null)>) Function() x53;
 //^
 // [analyzer] unspecified
-//                                                            ^
+//              ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(CcovCyclicCoBound<Function(N)>) Function() x54;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//              ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function<Y extends FcovCyclicCoBound<Function(Never?)>>() x55;
 //^
 // [analyzer] unspecified
-//                                                               ^
+//                        ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function<Y extends FcovCyclicCoBound<Function(Null)>>() x56;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//                        ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function<Y extends FcovCyclicCoBound<Function(N)>>() x57;
 //^
 // [analyzer] unspecified
-//                                                          ^
+//                        ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function<Y extends CFcon<Fcon<Never?>>>() x58;
 //^
 // [analyzer] unspecified
-//                                               ^
-// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//                        ^
+// [cfe] Type argument 'Fcon<Never?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function<Y extends CFcon<Fcon<Null>>>() x59;
 //^
 // [analyzer] unspecified
-//                                             ^
-// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//                        ^
+// [cfe] Type argument 'Fcon<Null>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function<Y extends CFcon<Fcon<N>>>() x60;
 //^
 // [analyzer] unspecified
-//                                          ^
-// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//                        ^
+// [cfe] Type argument 'Fcon<N>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function<Y extends CcovCyclicCoBound<Function(Never?)>>() x61;
 //^
 // [analyzer] unspecified
-//                                                               ^
+//                        ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function<Y extends CcovCyclicCoBound<Function(Null)>>() x62;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//                        ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function<Y extends CcovCyclicCoBound<Function(N)>>() x63;
 //^
 // [analyzer] unspecified
-//                                                          ^
+//                        ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function<Y extends A<FcovCyclicCoBound<Function(Never?)>>>() x64;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//                          ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function<Y extends A<FcovCyclicCoBound<Function(Null)>>>() x65;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//                          ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function<Y extends A<FcovCyclicCoBound<Function(N)>>>() x66;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//                          ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function<Y extends A<CFcon<Fcon<Never?>>>>() x67;
 //^
 // [analyzer] unspecified
-//                                                  ^
-// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//                          ^
+// [cfe] Type argument 'Fcon<Never?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function<Y extends A<CFcon<Fcon<Null>>>>() x68;
 //^
 // [analyzer] unspecified
-//                                                ^
-// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//                          ^
+// [cfe] Type argument 'Fcon<Null>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function<Y extends A<CFcon<Fcon<N>>>>() x69;
 //^
 // [analyzer] unspecified
-//                                             ^
-// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//                          ^
+// [cfe] Type argument 'Fcon<N>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function<Y extends A<CcovCyclicCoBound<Function(Never?)>>>() x70;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//                          ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function<Y extends A<CcovCyclicCoBound<Function(Null)>>>() x71;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//                          ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function<Y extends A<CcovCyclicCoBound<Function(N)>>>() x72;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//                          ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   Finv<FcovCyclicCoBound<Function(Never?)>> x73;
 //^
 // [analyzer] unspecified
-//                                          ^
+//     ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   Finv<FcovCyclicCoBound<Function(Null)>> x74;
 //^
 // [analyzer] unspecified
-//                                        ^
+//     ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   Finv<FcovCyclicCoBound<Function(N)>> x75;
 //^
 // [analyzer] unspecified
-//                                     ^
+//     ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   Finv<CFcon<Fcon<Never?>>> x76;
 //^
 // [analyzer] unspecified
-//                          ^
-// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//     ^
+// [cfe] Type argument 'Fcon<Never?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   Finv<CFcon<Fcon<Null>>> x77;
 //^
 // [analyzer] unspecified
-//                        ^
-// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//     ^
+// [cfe] Type argument 'Fcon<Null>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   Finv<CFcon<Fcon<N>>> x78;
 //^
 // [analyzer] unspecified
-//                     ^
-// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//     ^
+// [cfe] Type argument 'Fcon<N>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   Finv<CcovCyclicCoBound<Function(Never?)>> x79;
 //^
 // [analyzer] unspecified
-//                                          ^
+//     ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   Finv<CcovCyclicCoBound<Function(Null)>> x80;
 //^
 // [analyzer] unspecified
-//                                        ^
+//     ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   Finv<CcovCyclicCoBound<Function(N)>> x81;
 //^
 // [analyzer] unspecified
-//                                     ^
+//     ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   Funu<FcovCyclicCoBound<Function(Never?)>> x82;
 //^
 // [analyzer] unspecified
-//                                          ^
+//     ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   Funu<FcovCyclicCoBound<Function(Null)>> x83;
 //^
 // [analyzer] unspecified
-//                                        ^
+//     ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   Funu<FcovCyclicCoBound<Function(N)>> x84;
 //^
 // [analyzer] unspecified
-//                                     ^
+//     ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   Funu<CFcon<Fcon<Never?>>> x85;
 //^
 // [analyzer] unspecified
-//                          ^
-// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//     ^
+// [cfe] Type argument 'Fcon<Never?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   Funu<CFcon<Fcon<Null>>> x86;
 //^
 // [analyzer] unspecified
-//                        ^
-// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//     ^
+// [cfe] Type argument 'Fcon<Null>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   Funu<CFcon<Fcon<N>>> x87;
 //^
 // [analyzer] unspecified
-//                     ^
-// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+//     ^
+// [cfe] Type argument 'Fcon<N>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   Funu<CcovCyclicCoBound<Function(Never?)>> x88;
 //^
 // [analyzer] unspecified
-//                                          ^
+//     ^
 // [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   Funu<CcovCyclicCoBound<Function(Null)>> x89;
 //^
 // [analyzer] unspecified
-//                                        ^
+//     ^
 // [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   Funu<CcovCyclicCoBound<Function(N)>> x90;
 //^
 // [analyzer] unspecified
-//                                     ^
+//     ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
 
   // --- Top type in a contravariant position, not super-bounded.
   FconBound<dynamic> x91;
 //^
 // [analyzer] unspecified
-//                   ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   FconBound<void> x92;
 //^
 // [analyzer] unspecified
-//                ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   FconBound<Object?> x93;
 //^
 // [analyzer] unspecified
-//                   ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   FconBound<FutureOr<dynamic>> x94;
 //^
 // [analyzer] unspecified
-//                             ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   FconBound<FutureOr<void>> x95;
 //^
 // [analyzer] unspecified
-//                          ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   FconBound<FutureOr<Object?>> x96;
 //^
 // [analyzer] unspecified
-//                             ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   FconCyclicBound<dynamic> x97;
 //^
 // [analyzer] unspecified
-//                         ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<void> x98;
 //^
 // [analyzer] unspecified
-//                      ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<Object?> x99;
 //^
 // [analyzer] unspecified
-//                         ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<FutureOr<dynamic>> x100;
 //^
 // [analyzer] unspecified
-//                                   ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<FutureOr<void>> x101;
 //^
 // [analyzer] unspecified
-//                                ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<FutureOr<Object?>> x102;
 //^
 // [analyzer] unspecified
-//                                   ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<dynamic>> x103;
 //^
 // [analyzer] unspecified
-//                            ^
 // [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<void>> x104;
 //^
 // [analyzer] unspecified
-//                         ^
 // [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<Object?>> x105;
 //^
 // [analyzer] unspecified
-//                            ^
 // [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<FutureOr<dynamic>>> x106;
 //^
 // [analyzer] unspecified
-//                                      ^
 // [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<FutureOr<void>>> x107;
 //^
 // [analyzer] unspecified
-//                                   ^
 // [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<FutureOr<Object?>>> x108;
 //^
 // [analyzer] unspecified
-//                                      ^
 // [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<A<dynamic>>> x109;
 //^
 // [analyzer] unspecified
-//                               ^
 // [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<A<void>>> x110;
 //^
 // [analyzer] unspecified
-//                            ^
 // [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<A<Object?>>> x111;
 //^
 // [analyzer] unspecified
-//                               ^
 // [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<A<FutureOr<dynamic>>>> x112;
 //^
 // [analyzer] unspecified
-//                                         ^
 // [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<A<FutureOr<void>>>> x113;
 //^
 // [analyzer] unspecified
-//                                      ^
 // [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<A<FutureOr<Object?>>>> x114;
 //^
 // [analyzer] unspecified
-//                                         ^
 // [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicCoBound<dynamic> x115;
 //^
 // [analyzer] unspecified
-//                           ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<void> x116;
 //^
 // [analyzer] unspecified
-//                        ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<Object?> x117;
 //^
 // [analyzer] unspecified
-//                           ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<FutureOr<dynamic>> x118;
 //^
 // [analyzer] unspecified
-//                                     ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<FutureOr<void>> x119;
 //^
 // [analyzer] unspecified
-//                                  ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<FutureOr<Object?>> x120;
 //^
 // [analyzer] unspecified
-//                                     ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<Function(Function(dynamic))> x121;
 //^
 // [analyzer] unspecified
-//                                               ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<Function(Function(void))> x122;
 //^
 // [analyzer] unspecified
-//                                            ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<Function(Function(Object?))> x123;
 //^
 // [analyzer] unspecified
-//                                               ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<Function(Function(FutureOr<dynamic>))> x124;
 //^
 // [analyzer] unspecified
-//                                                         ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<Function(Function(FutureOr<void>))> x125;
 //^
 // [analyzer] unspecified
-//                                                      ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<Function(Function(FutureOr<Object?>))> x126;
 //^
 // [analyzer] unspecified
-//                                                         ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
 
   // --- Same non-super-bounded types in a context.
   A<FconBound<dynamic>> x127;
 //^
 // [analyzer] unspecified
-//                      ^
+//  ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   A<FconBound<void>> x128;
 //^
 // [analyzer] unspecified
-//                   ^
+//  ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   A<FconBound<Object?>> x129;
 //^
 // [analyzer] unspecified
-//                      ^
+//  ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   A<FconBound<FutureOr<dynamic>>> x130;
 //^
 // [analyzer] unspecified
-//                                ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//  ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   A<FconBound<FutureOr<void>>> x131;
 //^
 // [analyzer] unspecified
-//                             ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//  ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   A<FconBound<FutureOr<Object?>>> x132;
 //^
 // [analyzer] unspecified
-//                                ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//  ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   A<FconCyclicBound<dynamic>> x133;
 //^
 // [analyzer] unspecified
-//                            ^
+//  ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   A<FconCyclicBound<void>> x134;
 //^
 // [analyzer] unspecified
-//                         ^
+//  ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   A<FconCyclicBound<Object?>> x135;
 //^
 // [analyzer] unspecified
-//                            ^
+//  ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   A<FconCyclicBound<FutureOr<dynamic>>> x136;
 //^
 // [analyzer] unspecified
-//                                      ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//  ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   A<FconCyclicBound<FutureOr<void>>> x137;
 //^
 // [analyzer] unspecified
-//                                   ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//  ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   A<FconCyclicBound<FutureOr<Object?>>> x138;
 //^
 // [analyzer] unspecified
-//                                      ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//  ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   A<FconCyclicBound<A<dynamic>>> x139;
 //^
 // [analyzer] unspecified
-//                               ^
+//  ^
 // [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   A<FconCyclicBound<A<void>>> x140;
 //^
 // [analyzer] unspecified
-//                            ^
+//  ^
 // [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   A<FconCyclicBound<A<Object?>>> x141;
 //^
 // [analyzer] unspecified
-//                               ^
+//  ^
 // [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   A<FconCyclicBound<A<FutureOr<dynamic>>>> x142;
 //^
 // [analyzer] unspecified
-//                                         ^
+//  ^
 // [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   A<FconCyclicBound<A<FutureOr<void>>>> x143;
 //^
 // [analyzer] unspecified
-//                                      ^
+//  ^
 // [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   A<FconCyclicBound<A<FutureOr<Object?>>>> x144;
 //^
 // [analyzer] unspecified
-//                                         ^
+//  ^
 // [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   A<FconCyclicBound<A<A<dynamic>>>> x145;
 //^
 // [analyzer] unspecified
-//                                  ^
+//  ^
 // [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   A<FconCyclicBound<A<A<void>>>> x146;
 //^
 // [analyzer] unspecified
-//                               ^
+//  ^
 // [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   A<FconCyclicBound<A<A<Object?>>>> x147;
 //^
 // [analyzer] unspecified
-//                                  ^
+//  ^
 // [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   A<FconCyclicBound<A<A<FutureOr<dynamic>>>>> x148;
 //^
 // [analyzer] unspecified
-//                                            ^
+//  ^
 // [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   A<FconCyclicBound<A<A<FutureOr<void>>>>> x149;
 //^
 // [analyzer] unspecified
-//                                         ^
+//  ^
 // [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   A<FconCyclicBound<A<A<FutureOr<Object?>>>>> x150;
 //^
 // [analyzer] unspecified
-//                                            ^
+//  ^
 // [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   A<FconCyclicCoBound<dynamic>> x151;
 //^
 // [analyzer] unspecified
-//                              ^
+//  ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   A<FconCyclicCoBound<void>> x152;
 //^
 // [analyzer] unspecified
-//                           ^
+//  ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   A<FconCyclicCoBound<Object?>> x153;
 //^
 // [analyzer] unspecified
-//                              ^
+//  ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   A<FconCyclicCoBound<FutureOr<dynamic>>> x154;
 //^
 // [analyzer] unspecified
-//                                        ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//  ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   A<FconCyclicCoBound<FutureOr<void>>> x155;
 //^
 // [analyzer] unspecified
-//                                     ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//  ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   A<FconCyclicCoBound<FutureOr<Object?>>> x156;
 //^
 // [analyzer] unspecified
-//                                        ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//  ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   A<FconCyclicCoBound<Function(Function(dynamic))>> x157;
 //^
 // [analyzer] unspecified
-//                                                  ^
+//  ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   A<FconCyclicCoBound<Function(Function(void))>> x158;
 //^
 // [analyzer] unspecified
-//                                               ^
+//  ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   A<FconCyclicCoBound<Function(Function(Object?))>> x159;
 //^
 // [analyzer] unspecified
-//                                                  ^
+//  ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   A<FconCyclicCoBound<Function(Function(FutureOr<dynamic>))>> x160;
 //^
 // [analyzer] unspecified
-//                                                            ^
+//  ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   A<FconCyclicCoBound<Function(Function(FutureOr<void>))>> x161;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//  ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   A<FconCyclicCoBound<Function(Function(FutureOr<Object?>))>> x162;
 //^
 // [analyzer] unspecified
-//                                                            ^
+//  ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconBound<dynamic> Function() x163;
 //^
 // [analyzer] unspecified
-//                              ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   FconBound<void> Function() x164;
 //^
 // [analyzer] unspecified
-//                           ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   FconBound<Object?> Function() x165;
 //^
 // [analyzer] unspecified
-//                              ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   FconBound<FutureOr<dynamic>> Function() x166;
 //^
 // [analyzer] unspecified
-//                                        ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   FconBound<FutureOr<void>> Function() x167;
 //^
 // [analyzer] unspecified
-//                                     ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   FconBound<FutureOr<Object?>> Function() x168;
 //^
 // [analyzer] unspecified
-//                                        ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   FconCyclicBound<dynamic> Function() x169;
 //^
 // [analyzer] unspecified
-//                                    ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<void> Function() x170;
 //^
 // [analyzer] unspecified
-//                                 ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<Object?> Function() x171;
 //^
 // [analyzer] unspecified
-//                                    ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<FutureOr<dynamic>> Function() x172;
 //^
 // [analyzer] unspecified
-//                                              ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<FutureOr<void>> Function() x173;
 //^
 // [analyzer] unspecified
-//                                           ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<FutureOr<Object?>> Function() x174;
 //^
 // [analyzer] unspecified
-//                                              ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<dynamic>> Function() x175;
 //^
 // [analyzer] unspecified
-//                                       ^
 // [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<void>> Function() x176;
 //^
 // [analyzer] unspecified
-//                                    ^
 // [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<Object?>> Function() x177;
 //^
 // [analyzer] unspecified
-//                                       ^
 // [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<FutureOr<dynamic>>> Function() x178;
 //^
 // [analyzer] unspecified
-//                                                 ^
 // [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<FutureOr<void>>> Function() x179;
 //^
 // [analyzer] unspecified
-//                                              ^
 // [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<FutureOr<Object?>>> Function() x180;
 //^
 // [analyzer] unspecified
-//                                                 ^
 // [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<A<dynamic>>> Function() x181;
 //^
 // [analyzer] unspecified
-//                                          ^
 // [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<A<void>>> Function() x182;
 //^
 // [analyzer] unspecified
-//                                       ^
 // [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<A<Object?>>> Function() x183;
 //^
 // [analyzer] unspecified
-//                                          ^
 // [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<A<FutureOr<dynamic>>>> Function() x184;
 //^
 // [analyzer] unspecified
-//                                                    ^
 // [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<A<FutureOr<void>>>> Function() x185;
 //^
 // [analyzer] unspecified
-//                                                 ^
 // [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicBound<A<A<FutureOr<Object?>>>> Function() x186;
 //^
 // [analyzer] unspecified
-//                                                    ^
 // [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   FconCyclicCoBound<dynamic> Function() x187;
 //^
 // [analyzer] unspecified
-//                                      ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<void> Function() x188;
 //^
 // [analyzer] unspecified
-//                                   ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<Object?> Function() x189;
 //^
 // [analyzer] unspecified
-//                                      ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<FutureOr<dynamic>> Function() x190;
 //^
 // [analyzer] unspecified
-//                                                ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<FutureOr<void>> Function() x191;
 //^
 // [analyzer] unspecified
-//                                             ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<FutureOr<Object?>> Function() x192;
 //^
 // [analyzer] unspecified
-//                                                ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<Function(Function(dynamic))> Function() x193;
 //^
 // [analyzer] unspecified
-//                                                          ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<Function(Function(void))> Function() x194;
 //^
 // [analyzer] unspecified
-//                                                       ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<Function(Function(Object?))> Function() x195;
 //^
 // [analyzer] unspecified
-//                                                          ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<Function(Function(FutureOr<dynamic>))> Function() x196;
 //^
 // [analyzer] unspecified
-//                                                                    ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<Function(Function(FutureOr<void>))> Function() x197;
 //^
 // [analyzer] unspecified
-//                                                                 ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   FconCyclicCoBound<Function(Function(FutureOr<Object?>))> Function() x198;
 //^
 // [analyzer] unspecified
-//                                                                    ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(void Function(FconBound<dynamic>)) x199;
 //^
 // [analyzer] unspecified
-//                                                 ^
+//                            ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function(void Function(FconBound<void>)) x200;
 //^
 // [analyzer] unspecified
-//                                              ^
+//                            ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function(void Function(FconBound<Object?>)) x201;
 //^
 // [analyzer] unspecified
-//                                                 ^
+//                            ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function(void Function(FconBound<FutureOr<dynamic>>)) x202;
 //^
 // [analyzer] unspecified
-//                                                           ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//                            ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function(void Function(FconBound<FutureOr<void>>)) x203;
 //^
 // [analyzer] unspecified
-//                                                        ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//                            ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function(void Function(FconBound<FutureOr<Object?>>)) x204;
 //^
 // [analyzer] unspecified
-//                                                           ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//                            ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function(void Function(FconCyclicBound<dynamic>)) x205;
 //^
 // [analyzer] unspecified
-//                                                       ^
+//                            ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(void Function(FconCyclicBound<void>)) x206;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//                            ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(void Function(FconCyclicBound<Object?>)) x207;
 //^
 // [analyzer] unspecified
-//                                                       ^
+//                            ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(void Function(FconCyclicBound<FutureOr<dynamic>>)) x208;
 //^
 // [analyzer] unspecified
-//                                                                 ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//                            ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(void Function(FconCyclicBound<FutureOr<void>>)) x209;
 //^
 // [analyzer] unspecified
-//                                                              ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//                            ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(void Function(FconCyclicBound<FutureOr<Object?>>)) x210;
 //^
 // [analyzer] unspecified
-//                                                                 ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//                            ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(void Function(FconCyclicBound<A<dynamic>>)) x211;
 //^
 // [analyzer] unspecified
-//                                                          ^
+//                            ^
 // [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(void Function(FconCyclicBound<A<void>>)) x212;
 //^
 // [analyzer] unspecified
-//                                                       ^
+//                            ^
 // [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(void Function(FconCyclicBound<A<Object?>>)) x213;
 //^
 // [analyzer] unspecified
-//                                                          ^
+//                            ^
 // [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(void Function(FconCyclicBound<A<FutureOr<dynamic>>>)) x214;
 //^
 // [analyzer] unspecified
-//                                                                    ^
+//                            ^
 // [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(void Function(FconCyclicBound<A<FutureOr<void>>>)) x215;
 //^
 // [analyzer] unspecified
-//                                                                 ^
+//                            ^
 // [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(void Function(FconCyclicBound<A<FutureOr<Object?>>>)) x216;
 //^
 // [analyzer] unspecified
-//                                                                    ^
+//                            ^
 // [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(void Function(FconCyclicBound<A<A<dynamic>>>)) x217;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//                            ^
 // [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(void Function(FconCyclicBound<A<A<void>>>)) x218;
 //^
 // [analyzer] unspecified
-//                                                          ^
+//                            ^
 // [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(void Function(FconCyclicBound<A<A<Object?>>>)) x219;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//                            ^
 // [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(void Function(FconCyclicBound<A<A<FutureOr<dynamic>>>>)) x220;
 //^
 // [analyzer] unspecified
-//                                                                       ^
+//                            ^
 // [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(void Function(FconCyclicBound<A<A<FutureOr<void>>>>)) x221;
 //^
 // [analyzer] unspecified
-//                                                                    ^
+//                            ^
 // [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(void Function(FconCyclicBound<A<A<FutureOr<Object?>>>>)) x222;
 //^
 // [analyzer] unspecified
-//                                                                       ^
+//                            ^
 // [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(void Function(FconCyclicCoBound<dynamic>)) x223;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//                            ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(void Function(FconCyclicCoBound<void>)) x224;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                            ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(void Function(FconCyclicCoBound<Object?>)) x225;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//                            ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(void Function(FconCyclicCoBound<FutureOr<dynamic>>)) x226;
 //^
 // [analyzer] unspecified
-//                                                                   ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//                            ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(void Function(FconCyclicCoBound<FutureOr<void>>)) x227;
 //^
 // [analyzer] unspecified
-//                                                                ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//                            ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(void Function(FconCyclicCoBound<FutureOr<Object?>>)) x228;
 //^
 // [analyzer] unspecified
-//                                                                   ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//                            ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(void Function(FconCyclicCoBound<Function(Function(dynamic))>))
 //^
 // [analyzer] unspecified
-      x229;
-//    ^
+//                            ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+      x229;
   void Function(void Function(FconCyclicCoBound<Function(Function(void))>))
 //^
 // [analyzer] unspecified
-      x230;
-//    ^
+//                            ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+      x230;
   void Function(void Function(FconCyclicCoBound<Function(Function(Object?))>))
 //^
 // [analyzer] unspecified
-      x231;
-//    ^
+//                            ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+      x231;
   void Function(
       void Function(
           FconCyclicCoBound<Function(Function(FutureOr<dynamic>))>)) x232;
 //^
 // [analyzer] unspecified
-//                                                                   ^
+//        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(
           void Function(FconCyclicCoBound<Function(Function(FutureOr<void>))>))
 //^
 // [analyzer] unspecified
-      x233;
-//    ^
+//                      ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+      x233;
   void Function(
       void Function(
           FconCyclicCoBound<Function(Function(FutureOr<Object?>))>)) x234;
 //^
 // [analyzer] unspecified
-//                                                                   ^
+//        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconBound<dynamic>) x235;
 //^
 // [analyzer] unspecified
-//                                  ^
+//              ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function(FconBound<void>) x236;
 //^
 // [analyzer] unspecified
-//                               ^
+//              ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function(FconBound<Object?>) x237;
 //^
 // [analyzer] unspecified
-//                                  ^
+//              ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function(FconBound<FutureOr<dynamic>>) x238;
 //^
 // [analyzer] unspecified
-//                                            ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//              ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function(FconBound<FutureOr<void>>) x239;
 //^
 // [analyzer] unspecified
-//                                         ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//              ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function(FconBound<FutureOr<Object?>>) x240;
 //^
 // [analyzer] unspecified
-//                                            ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//              ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function(FconCyclicBound<dynamic>) x241;
 //^
 // [analyzer] unspecified
-//                                        ^
+//              ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<void>) x242;
 //^
 // [analyzer] unspecified
-//                                     ^
+//              ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<Object?>) x243;
 //^
 // [analyzer] unspecified
-//                                        ^
+//              ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<FutureOr<dynamic>>) x244;
 //^
 // [analyzer] unspecified
-//                                                  ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//              ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<FutureOr<void>>) x245;
 //^
 // [analyzer] unspecified
-//                                               ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//              ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<FutureOr<Object?>>) x246;
 //^
 // [analyzer] unspecified
-//                                                  ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//              ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<dynamic>>) x247;
 //^
 // [analyzer] unspecified
-//                                           ^
+//              ^
 // [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<void>>) x248;
 //^
 // [analyzer] unspecified
-//                                        ^
+//              ^
 // [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<Object?>>) x249;
 //^
 // [analyzer] unspecified
-//                                           ^
+//              ^
 // [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<FutureOr<dynamic>>>) x250;
 //^
 // [analyzer] unspecified
-//                                                     ^
+//              ^
 // [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<FutureOr<void>>>) x251;
 //^
 // [analyzer] unspecified
-//                                                  ^
+//              ^
 // [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<FutureOr<Object?>>>) x252;
 //^
 // [analyzer] unspecified
-//                                                     ^
+//              ^
 // [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<A<dynamic>>>) x253;
 //^
 // [analyzer] unspecified
-//                                              ^
+//              ^
 // [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<A<void>>>) x254;
 //^
 // [analyzer] unspecified
-//                                           ^
+//              ^
 // [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<A<Object?>>>) x255;
 //^
 // [analyzer] unspecified
-//                                              ^
+//              ^
 // [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<A<FutureOr<dynamic>>>>) x256;
 //^
 // [analyzer] unspecified
-//                                                        ^
+//              ^
 // [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<A<FutureOr<void>>>>) x257;
 //^
 // [analyzer] unspecified
-//                                                     ^
+//              ^
 // [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<A<FutureOr<Object?>>>>) x258;
 //^
 // [analyzer] unspecified
-//                                                        ^
+//              ^
 // [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicCoBound<dynamic>) x259;
 //^
 // [analyzer] unspecified
-//                                          ^
+//              ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<void>) x260;
 //^
 // [analyzer] unspecified
-//                                       ^
+//              ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<Object?>) x261;
 //^
 // [analyzer] unspecified
-//                                          ^
+//              ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<FutureOr<dynamic>>) x262;
 //^
 // [analyzer] unspecified
-//                                                    ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//              ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<FutureOr<void>>) x263;
 //^
 // [analyzer] unspecified
-//                                                 ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//              ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<FutureOr<Object?>>) x264;
 //^
 // [analyzer] unspecified
-//                                                    ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//              ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<Function(Function(dynamic))>) x265;
 //^
 // [analyzer] unspecified
-//                                                              ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<Function(Function(void))>) x266;
 //^
 // [analyzer] unspecified
-//                                                           ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<Function(Function(Object?))>) x267;
 //^
 // [analyzer] unspecified
-//                                                              ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<Function(Function(FutureOr<dynamic>))>) x268;
 //^
 // [analyzer] unspecified
-//                                                                        ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<Function(Function(FutureOr<void>))>) x269;
 //^
 // [analyzer] unspecified
-//                                                                     ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<Function(Function(FutureOr<Object?>))>) x270;
 //^
 // [analyzer] unspecified
-//                                                                        ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconBound<dynamic>) Function() x271;
 //^
 // [analyzer] unspecified
-//                                             ^
+//              ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function(FconBound<void>) Function() x272;
 //^
 // [analyzer] unspecified
-//                                          ^
+//              ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function(FconBound<Object?>) Function() x273;
 //^
 // [analyzer] unspecified
-//                                             ^
+//              ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function(FconBound<FutureOr<dynamic>>) Function() x274;
 //^
 // [analyzer] unspecified
-//                                                       ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//              ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function(FconBound<FutureOr<void>>) Function() x275;
 //^
 // [analyzer] unspecified
-//                                                    ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//              ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function(FconBound<FutureOr<Object?>>) Function() x276;
 //^
 // [analyzer] unspecified
-//                                                       ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//              ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function(FconCyclicBound<dynamic>) Function() x277;
 //^
 // [analyzer] unspecified
-//                                                   ^
+//              ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<void>) Function() x278;
 //^
 // [analyzer] unspecified
-//                                                ^
+//              ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<Object?>) Function() x279;
 //^
 // [analyzer] unspecified
-//                                                   ^
+//              ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<FutureOr<dynamic>>) Function() x280;
 //^
 // [analyzer] unspecified
-//                                                             ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//              ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<FutureOr<void>>) Function() x281;
 //^
 // [analyzer] unspecified
-//                                                          ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//              ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<FutureOr<Object?>>) Function() x282;
 //^
 // [analyzer] unspecified
-//                                                             ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//              ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<dynamic>>) Function() x283;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//              ^
 // [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<void>>) Function() x284;
 //^
 // [analyzer] unspecified
-//                                                   ^
+//              ^
 // [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<Object?>>) Function() x285;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//              ^
 // [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<FutureOr<dynamic>>>) Function() x286;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//              ^
 // [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<FutureOr<void>>>) Function() x287;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//              ^
 // [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<FutureOr<Object?>>>) Function() x288;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//              ^
 // [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<A<dynamic>>>) Function() x289;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//              ^
 // [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<A<void>>>) Function() x290;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//              ^
 // [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<A<Object?>>>) Function() x291;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//              ^
 // [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<A<FutureOr<dynamic>>>>) Function() x292;
 //^
 // [analyzer] unspecified
-//                                                                   ^
+//              ^
 // [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<A<FutureOr<void>>>>) Function() x293;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//              ^
 // [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicBound<A<A<FutureOr<Object?>>>>) Function() x294;
 //^
 // [analyzer] unspecified
-//                                                                   ^
+//              ^
 // [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function(FconCyclicCoBound<dynamic>) Function() x295;
 //^
 // [analyzer] unspecified
-//                                                     ^
+//              ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<void>) Function() x296;
 //^
 // [analyzer] unspecified
-//                                                  ^
+//              ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<Object?>) Function() x297;
 //^
 // [analyzer] unspecified
-//                                                     ^
+//              ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<FutureOr<dynamic>>) Function() x298;
 //^
 // [analyzer] unspecified
-//                                                               ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//              ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<FutureOr<void>>) Function() x299;
 //^
 // [analyzer] unspecified
-//                                                            ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//              ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<FutureOr<Object?>>) Function() x300;
 //^
 // [analyzer] unspecified
-//                                                               ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//              ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<Function(Function(dynamic))>) Function() x301;
 //^
 // [analyzer] unspecified
-//                                                                         ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<Function(Function(void))>) Function() x302;
 //^
 // [analyzer] unspecified
-//                                                                      ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<Function(Function(Object?))>) Function() x303;
 //^
 // [analyzer] unspecified
-//                                                                         ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function(FconCyclicCoBound<Function(Function(FutureOr<dynamic>))>)
 //^
 // [analyzer] unspecified
-      Function() x304;
-//               ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+      Function() x304;
   void Function(FconCyclicCoBound<Function(Function(FutureOr<void>))>)
 //^
 // [analyzer] unspecified
-      Function() x305;
-//               ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+      Function() x305;
   void Function(FconCyclicCoBound<Function(Function(FutureOr<Object?>))>)
 //^
 // [analyzer] unspecified
-      Function() x306;
-//               ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+      Function() x306;
   void Function<Y extends FconBound<dynamic>>() x307;
 //^
 // [analyzer] unspecified
-//                                              ^
+//                        ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function<Y extends FconBound<void>>() x308;
 //^
 // [analyzer] unspecified
-//                                           ^
+//                        ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function<Y extends FconBound<Object?>>() x309;
 //^
 // [analyzer] unspecified
-//                                              ^
+//                        ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function<Y extends FconBound<FutureOr<dynamic>>>() x310;
 //^
 // [analyzer] unspecified
-//                                                        ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//                        ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function<Y extends FconBound<FutureOr<void>>>() x311;
 //^
 // [analyzer] unspecified
-//                                                     ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//                        ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function<Y extends FconBound<FutureOr<Object?>>>() x312;
 //^
 // [analyzer] unspecified
-//                                                        ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//                        ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function<Y extends FconCyclicBound<dynamic>>() x313;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//                        ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends FconCyclicBound<void>>() x314;
 //^
 // [analyzer] unspecified
-//                                                 ^
+//                        ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends FconCyclicBound<Object?>>() x315;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//                        ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends FconCyclicBound<FutureOr<dynamic>>>() x316;
 //^
 // [analyzer] unspecified
-//                                                              ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//                        ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends FconCyclicBound<FutureOr<void>>>() x317;
 //^
 // [analyzer] unspecified
-//                                                           ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//                        ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends FconCyclicBound<FutureOr<Object?>>>() x318;
 //^
 // [analyzer] unspecified
-//                                                              ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//                        ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends FconCyclicBound<A<dynamic>>>() x319;
 //^
 // [analyzer] unspecified
-//                                                       ^
+//                        ^
 // [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends FconCyclicBound<A<void>>>() x320;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//                        ^
 // [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends FconCyclicBound<A<Object?>>>() x321;
 //^
 // [analyzer] unspecified
-//                                                       ^
+//                        ^
 // [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends FconCyclicBound<A<FutureOr<dynamic>>>>() x322;
 //^
 // [analyzer] unspecified
-//                                                                 ^
+//                        ^
 // [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends FconCyclicBound<A<FutureOr<void>>>>() x323;
 //^
 // [analyzer] unspecified
-//                                                              ^
+//                        ^
 // [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends FconCyclicBound<A<FutureOr<Object?>>>>() x324;
 //^
 // [analyzer] unspecified
-//                                                                 ^
+//                        ^
 // [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends FconCyclicBound<A<A<dynamic>>>>() x325;
 //^
 // [analyzer] unspecified
-//                                                          ^
+//                        ^
 // [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends FconCyclicBound<A<A<void>>>>() x326;
 //^
 // [analyzer] unspecified
-//                                                       ^
+//                        ^
 // [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends FconCyclicBound<A<A<Object?>>>>() x327;
 //^
 // [analyzer] unspecified
-//                                                          ^
+//                        ^
 // [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends FconCyclicBound<A<A<FutureOr<dynamic>>>>>() x328;
 //^
 // [analyzer] unspecified
-//                                                                    ^
+//                        ^
 // [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends FconCyclicBound<A<A<FutureOr<void>>>>>() x329;
 //^
 // [analyzer] unspecified
-//                                                                 ^
+//                        ^
 // [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends FconCyclicBound<A<A<FutureOr<Object?>>>>>() x330;
 //^
 // [analyzer] unspecified
-//                                                                    ^
+//                        ^
 // [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends FconCyclicCoBound<dynamic>>() x331;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                        ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function<Y extends FconCyclicCoBound<void>>() x332;
 //^
 // [analyzer] unspecified
-//                                                   ^
+//                        ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function<Y extends FconCyclicCoBound<Object?>>() x333;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                        ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function<Y extends FconCyclicCoBound<FutureOr<dynamic>>>() x334;
 //^
 // [analyzer] unspecified
-//                                                                ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//                        ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function<Y extends FconCyclicCoBound<FutureOr<void>>>() x335;
 //^
 // [analyzer] unspecified
-//                                                             ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//                        ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function<Y extends FconCyclicCoBound<FutureOr<Object?>>>() x336;
 //^
 // [analyzer] unspecified
-//                                                                ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//                        ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function<Y extends FconCyclicCoBound<Function(Function(dynamic))>>()
 //^
 // [analyzer] unspecified
-      x337;
-//    ^
+//                        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+      x337;
   void Function<Y extends FconCyclicCoBound<Function(Function(void))>>() x338;
 //^
 // [analyzer] unspecified
-//                                                                       ^
+//                        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function<Y extends FconCyclicCoBound<Function(Function(Object?))>>()
 //^
 // [analyzer] unspecified
-      x339;
-//    ^
+//                        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+      x339;
   void Function<
           Y extends FconCyclicCoBound<Function(Function(FutureOr<dynamic>))>>()
 //^
 // [analyzer] unspecified
-      x340;
-//    ^
+//                  ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+      x340;
   void Function<
       Y extends FconCyclicCoBound<Function(Function(FutureOr<void>))>>() x341;
 //^
 // [analyzer] unspecified
-//                                                                       ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function<
           Y extends FconCyclicCoBound<Function(Function(FutureOr<Object?>))>>()
 //^
 // [analyzer] unspecified
-      x342;
-//    ^
+//                  ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+      x342;
   void Function<Y extends A<FconBound<dynamic>>>() x343;
 //^
 // [analyzer] unspecified
-//                                                 ^
+//                          ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function<Y extends A<FconBound<void>>>() x344;
 //^
 // [analyzer] unspecified
-//                                              ^
+//                          ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function<Y extends A<FconBound<Object?>>>() x345;
 //^
 // [analyzer] unspecified
-//                                                 ^
+//                          ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function<Y extends A<FconBound<FutureOr<dynamic>>>>() x346;
 //^
 // [analyzer] unspecified
-//                                                           ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//                          ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function<Y extends A<FconBound<FutureOr<void>>>>() x347;
 //^
 // [analyzer] unspecified
-//                                                        ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//                          ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function<Y extends A<FconBound<FutureOr<Object?>>>>() x348;
 //^
 // [analyzer] unspecified
-//                                                           ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//                          ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   void Function<Y extends A<FconCyclicBound<dynamic>>>() x349;
 //^
 // [analyzer] unspecified
-//                                                       ^
+//                          ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends A<FconCyclicBound<void>>>() x350;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//                          ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends A<FconCyclicBound<Object?>>>() x351;
 //^
 // [analyzer] unspecified
-//                                                       ^
+//                          ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends A<FconCyclicBound<FutureOr<dynamic>>>>() x352;
 //^
 // [analyzer] unspecified
-//                                                                 ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//                          ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends A<FconCyclicBound<FutureOr<void>>>>() x353;
 //^
 // [analyzer] unspecified
-//                                                              ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//                          ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends A<FconCyclicBound<FutureOr<Object?>>>>() x354;
 //^
 // [analyzer] unspecified
-//                                                                 ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//                          ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends A<FconCyclicBound<A<dynamic>>>>() x355;
 //^
 // [analyzer] unspecified
-//                                                          ^
+//                          ^
 // [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends A<FconCyclicBound<A<void>>>>() x356;
 //^
 // [analyzer] unspecified
-//                                                       ^
+//                          ^
 // [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends A<FconCyclicBound<A<Object?>>>>() x357;
 //^
 // [analyzer] unspecified
-//                                                          ^
+//                          ^
 // [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends A<FconCyclicBound<A<FutureOr<dynamic>>>>>() x358;
 //^
 // [analyzer] unspecified
-//                                                                    ^
+//                          ^
 // [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends A<FconCyclicBound<A<FutureOr<void>>>>>() x359;
 //^
 // [analyzer] unspecified
-//                                                                 ^
+//                          ^
 // [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends A<FconCyclicBound<A<FutureOr<Object?>>>>>() x360;
 //^
 // [analyzer] unspecified
-//                                                                    ^
+//                          ^
 // [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends A<FconCyclicBound<A<A<dynamic>>>>>() x361;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//                          ^
 // [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends A<FconCyclicBound<A<A<void>>>>>() x362;
 //^
 // [analyzer] unspecified
-//                                                          ^
+//                          ^
 // [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends A<FconCyclicBound<A<A<Object?>>>>>() x363;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//                          ^
 // [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends A<FconCyclicBound<A<A<FutureOr<dynamic>>>>>>() x364;
 //^
 // [analyzer] unspecified
-//                                                                       ^
+//                          ^
 // [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends A<FconCyclicBound<A<A<FutureOr<void>>>>>>() x365;
 //^
 // [analyzer] unspecified
-//                                                                    ^
+//                          ^
 // [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends A<FconCyclicBound<A<A<FutureOr<Object?>>>>>>() x366;
 //^
 // [analyzer] unspecified
-//                                                                       ^
+//                          ^
 // [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   void Function<Y extends A<FconCyclicCoBound<dynamic>>>() x367;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//                          ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function<Y extends A<FconCyclicCoBound<void>>>() x368;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                          ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function<Y extends A<FconCyclicCoBound<Object?>>>() x369;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//                          ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function<Y extends A<FconCyclicCoBound<FutureOr<dynamic>>>>() x370;
 //^
 // [analyzer] unspecified
-//                                                                   ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//                          ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function<Y extends A<FconCyclicCoBound<FutureOr<void>>>>() x371;
 //^
 // [analyzer] unspecified
-//                                                                ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//                          ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function<Y extends A<FconCyclicCoBound<FutureOr<Object?>>>>() x372;
 //^
 // [analyzer] unspecified
-//                                                                   ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//                          ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function<Y extends A<FconCyclicCoBound<Function(Function(dynamic))>>>()
 //^
 // [analyzer] unspecified
-      x373;
-//    ^
+//                          ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+      x373;
   void Function<Y extends A<FconCyclicCoBound<Function(Function(void))>>>()
 //^
 // [analyzer] unspecified
-      x374;
-//    ^
+//                          ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+      x374;
   void Function<Y extends A<FconCyclicCoBound<Function(Function(Object?))>>>()
 //^
 // [analyzer] unspecified
-      x375;
-//    ^
+//                          ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+      x375;
   void Function<
       Y extends A<
           FconCyclicCoBound<Function(Function(FutureOr<dynamic>))>>>() x376;
 //^
 // [analyzer] unspecified
-//                                                                     ^
+//        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   void Function<
           Y extends A<FconCyclicCoBound<Function(Function(FutureOr<void>))>>>()
 //^
 // [analyzer] unspecified
-      x377;
-//    ^
+//                    ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+      x377;
   void Function<
       Y extends A<
           FconCyclicCoBound<Function(Function(FutureOr<Object?>))>>>() x378;
 //^
 // [analyzer] unspecified
-//                                                                     ^
+//        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Finv<FconBound<dynamic>> x379;
 //^
 // [analyzer] unspecified
-//                         ^
+//     ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   Finv<FconBound<void>> x380;
 //^
 // [analyzer] unspecified
-//                      ^
+//     ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   Finv<FconBound<Object?>> x381;
 //^
 // [analyzer] unspecified
-//                         ^
+//     ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   Finv<FconBound<FutureOr<dynamic>>> x382;
 //^
 // [analyzer] unspecified
-//                                   ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//     ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   Finv<FconBound<FutureOr<void>>> x383;
 //^
 // [analyzer] unspecified
-//                                ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//     ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   Finv<FconBound<FutureOr<Object?>>> x384;
 //^
 // [analyzer] unspecified
-//                                   ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//     ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   Finv<FconCyclicBound<dynamic>> x385;
 //^
 // [analyzer] unspecified
-//                               ^
+//     ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Finv<FconCyclicBound<void>> x386;
 //^
 // [analyzer] unspecified
-//                            ^
+//     ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Finv<FconCyclicBound<Object?>> x387;
 //^
 // [analyzer] unspecified
-//                               ^
+//     ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Finv<FconCyclicBound<FutureOr<dynamic>>> x388;
 //^
 // [analyzer] unspecified
-//                                         ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//     ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Finv<FconCyclicBound<FutureOr<void>>> x389;
 //^
 // [analyzer] unspecified
-//                                      ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//     ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Finv<FconCyclicBound<FutureOr<Object?>>> x390;
 //^
 // [analyzer] unspecified
-//                                         ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//     ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Finv<FconCyclicBound<A<dynamic>>> x391;
 //^
 // [analyzer] unspecified
-//                                  ^
+//     ^
 // [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Finv<FconCyclicBound<A<void>>> x392;
 //^
 // [analyzer] unspecified
-//                               ^
+//     ^
 // [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Finv<FconCyclicBound<A<Object?>>> x393;
 //^
 // [analyzer] unspecified
-//                                  ^
+//     ^
 // [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Finv<FconCyclicBound<A<FutureOr<dynamic>>>> x394;
 //^
 // [analyzer] unspecified
-//                                            ^
+//     ^
 // [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Finv<FconCyclicBound<A<FutureOr<void>>>> x395;
 //^
 // [analyzer] unspecified
-//                                         ^
+//     ^
 // [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Finv<FconCyclicBound<A<FutureOr<Object?>>>> x396;
 //^
 // [analyzer] unspecified
-//                                            ^
+//     ^
 // [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Finv<FconCyclicBound<A<A<dynamic>>>> x397;
 //^
 // [analyzer] unspecified
-//                                     ^
+//     ^
 // [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Finv<FconCyclicBound<A<A<void>>>> x398;
 //^
 // [analyzer] unspecified
-//                                  ^
+//     ^
 // [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Finv<FconCyclicBound<A<A<Object?>>>> x399;
 //^
 // [analyzer] unspecified
-//                                     ^
+//     ^
 // [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Finv<FconCyclicBound<A<A<FutureOr<dynamic>>>>> x400;
 //^
 // [analyzer] unspecified
-//                                               ^
+//     ^
 // [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Finv<FconCyclicBound<A<A<FutureOr<void>>>>> x401;
 //^
 // [analyzer] unspecified
-//                                            ^
+//     ^
 // [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Finv<FconCyclicBound<A<A<FutureOr<Object?>>>>> x402;
 //^
 // [analyzer] unspecified
-//                                               ^
+//     ^
 // [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Finv<FconCyclicCoBound<dynamic>> x403;
 //^
 // [analyzer] unspecified
-//                                 ^
+//     ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Finv<FconCyclicCoBound<void>> x404;
 //^
 // [analyzer] unspecified
-//                              ^
+//     ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Finv<FconCyclicCoBound<Object?>> x405;
 //^
 // [analyzer] unspecified
-//                                 ^
+//     ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Finv<FconCyclicCoBound<FutureOr<dynamic>>> x406;
 //^
 // [analyzer] unspecified
-//                                           ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//     ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Finv<FconCyclicCoBound<FutureOr<void>>> x407;
 //^
 // [analyzer] unspecified
-//                                        ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//     ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Finv<FconCyclicCoBound<FutureOr<Object?>>> x408;
 //^
 // [analyzer] unspecified
-//                                           ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//     ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Finv<FconCyclicCoBound<Function(Function(dynamic))>> x409;
 //^
 // [analyzer] unspecified
-//                                                     ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Finv<FconCyclicCoBound<Function(Function(void))>> x410;
 //^
 // [analyzer] unspecified
-//                                                  ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Finv<FconCyclicCoBound<Function(Function(Object?))>> x411;
 //^
 // [analyzer] unspecified
-//                                                     ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Finv<FconCyclicCoBound<Function(Function(FutureOr<dynamic>))>> x412;
 //^
 // [analyzer] unspecified
-//                                                               ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Finv<FconCyclicCoBound<Function(Function(FutureOr<void>))>> x413;
 //^
 // [analyzer] unspecified
-//                                                            ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Finv<FconCyclicCoBound<Function(Function(FutureOr<Object?>))>> x414;
 //^
 // [analyzer] unspecified
-//                                                               ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Funu<FconBound<dynamic>> x415;
 //^
 // [analyzer] unspecified
-//                         ^
+//     ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   Funu<FconBound<void>> x416;
 //^
 // [analyzer] unspecified
-//                      ^
+//     ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   Funu<FconBound<Object?>> x417;
 //^
 // [analyzer] unspecified
-//                         ^
+//     ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   Funu<FconBound<FutureOr<dynamic>>> x418;
 //^
 // [analyzer] unspecified
-//                                   ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//     ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   Funu<FconBound<FutureOr<void>>> x419;
 //^
 // [analyzer] unspecified
-//                                ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//     ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   Funu<FconBound<FutureOr<Object?>>> x420;
 //^
 // [analyzer] unspecified
-//                                   ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+//     ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
   Funu<FconCyclicBound<dynamic>> x421;
 //^
 // [analyzer] unspecified
-//                               ^
+//     ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Funu<FconCyclicBound<void>> x422;
 //^
 // [analyzer] unspecified
-//                            ^
+//     ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Funu<FconCyclicBound<Object?>> x423;
 //^
 // [analyzer] unspecified
-//                               ^
+//     ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Funu<FconCyclicBound<FutureOr<dynamic>>> x424;
 //^
 // [analyzer] unspecified
-//                                         ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//     ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Funu<FconCyclicBound<FutureOr<void>>> x425;
 //^
 // [analyzer] unspecified
-//                                      ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//     ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Funu<FconCyclicBound<FutureOr<Object?>>> x426;
 //^
 // [analyzer] unspecified
-//                                         ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+//     ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Funu<FconCyclicBound<A<dynamic>>> x427;
 //^
 // [analyzer] unspecified
-//                                  ^
+//     ^
 // [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Funu<FconCyclicBound<A<void>>> x428;
 //^
 // [analyzer] unspecified
-//                               ^
+//     ^
 // [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Funu<FconCyclicBound<A<Object?>>> x429;
 //^
 // [analyzer] unspecified
-//                                  ^
+//     ^
 // [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Funu<FconCyclicBound<A<FutureOr<dynamic>>>> x430;
 //^
 // [analyzer] unspecified
-//                                            ^
+//     ^
 // [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Funu<FconCyclicBound<A<FutureOr<void>>>> x431;
 //^
 // [analyzer] unspecified
-//                                         ^
+//     ^
 // [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Funu<FconCyclicBound<A<FutureOr<Object?>>>> x432;
 //^
 // [analyzer] unspecified
-//                                            ^
+//     ^
 // [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Funu<FconCyclicBound<A<A<dynamic>>>> x433;
 //^
 // [analyzer] unspecified
-//                                     ^
+//     ^
 // [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Funu<FconCyclicBound<A<A<void>>>> x434;
 //^
 // [analyzer] unspecified
-//                                  ^
+//     ^
 // [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Funu<FconCyclicBound<A<A<Object?>>>> x435;
 //^
 // [analyzer] unspecified
-//                                     ^
+//     ^
 // [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Funu<FconCyclicBound<A<A<FutureOr<dynamic>>>>> x436;
 //^
 // [analyzer] unspecified
-//                                               ^
+//     ^
 // [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Funu<FconCyclicBound<A<A<FutureOr<void>>>>> x437;
 //^
 // [analyzer] unspecified
-//                                            ^
+//     ^
 // [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Funu<FconCyclicBound<A<A<FutureOr<Object?>>>>> x438;
 //^
 // [analyzer] unspecified
-//                                               ^
+//     ^
 // [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
   Funu<FconCyclicCoBound<dynamic>> x439;
 //^
 // [analyzer] unspecified
-//                                 ^
+//     ^
 // [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Funu<FconCyclicCoBound<void>> x440;
 //^
 // [analyzer] unspecified
-//                              ^
+//     ^
 // [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Funu<FconCyclicCoBound<Object?>> x441;
 //^
 // [analyzer] unspecified
-//                                 ^
+//     ^
 // [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Funu<FconCyclicCoBound<FutureOr<dynamic>>> x442;
 //^
 // [analyzer] unspecified
-//                                           ^
-// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//     ^
+// [cfe] Type argument 'FutureOr<dynamic>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Funu<FconCyclicCoBound<FutureOr<void>>> x443;
 //^
 // [analyzer] unspecified
-//                                        ^
-// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//     ^
+// [cfe] Type argument 'FutureOr<void>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Funu<FconCyclicCoBound<FutureOr<Object?>>> x444;
 //^
 // [analyzer] unspecified
-//                                           ^
-// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+//     ^
+// [cfe] Type argument 'FutureOr<Object?>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Funu<FconCyclicCoBound<Function(Function(dynamic))>> x445;
 //^
 // [analyzer] unspecified
-//                                                     ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Funu<FconCyclicCoBound<Function(Function(void))>> x446;
 //^
 // [analyzer] unspecified
-//                                                  ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Funu<FconCyclicCoBound<Function(Function(Object?))>> x447;
 //^
 // [analyzer] unspecified
-//                                                     ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Funu<FconCyclicCoBound<Function(Function(FutureOr<dynamic>))>> x448;
 //^
 // [analyzer] unspecified
-//                                                               ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Funu<FconCyclicCoBound<Function(Function(FutureOr<void>))>> x449;
 //^
 // [analyzer] unspecified
-//                                                            ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
   Funu<FconCyclicCoBound<Function(Function(FutureOr<Object?>))>> x450;
 //^
 // [analyzer] unspecified
-//                                                               ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
 }
 
diff --git a/tests/language/generic/super_bounded_types_error_test.dart b/tests/language/generic/super_bounded_types_error_test.dart
index 5f523bc..7917fa7 100644
--- a/tests/language/generic/super_bounded_types_error_test.dart
+++ b/tests/language/generic/super_bounded_types_error_test.dart
@@ -62,1820 +62,1748 @@
   FcovBound<Object> x1;
 //^
 // [analyzer] unspecified
-//                  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   FcovBound<FutureOr<Object>> x2;
 //^
 // [analyzer] unspecified
-//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   FcovCyclicBound<Object> x3;
 //^
 // [analyzer] unspecified
-//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   FcovCyclicBound<FutureOr<Object>> x4;
 //^
 // [analyzer] unspecified
-//                                  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   FcovCyclicBound<A<Object>> x5;
 //^
 // [analyzer] unspecified
-//                           ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   FcovCyclicBound<A<FutureOr<Object>>> x6;
 //^
 // [analyzer] unspecified
-//                                     ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   FcovCyclicBound<A<A<Object>>> x7;
 //^
 // [analyzer] unspecified
-//                              ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   FcovCyclicBound<A<A<FutureOr<Object>>>> x8;
 //^
 // [analyzer] unspecified
-//                                        ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   FcovCyclicCoBound<Object> x9;
 //^
 // [analyzer] unspecified
-//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   FcovCyclicCoBound<FutureOr<Object>> x10;
 //^
 // [analyzer] unspecified
-//                                    ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   FcovCyclicCoBound<Function(Function(Object))> x11;
 //^
 // [analyzer] unspecified
-//                                              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   FcovCyclicCoBound<Function(Function(FutureOr<Object>))> x12;
 //^
 // [analyzer] unspecified
-//                                                        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   CFcov<Object> x13;
 //^
 // [analyzer] unspecified
-//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   CFcov<FutureOr<Object>> x14;
 //^
 // [analyzer] unspecified
-//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   CFcov<Fcov<Object>> x15;
 //^
 // [analyzer] unspecified
-//                    ^
-// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+// [cfe] Type argument 'Fcov<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   CFcov<Fcov<FutureOr<Object>>> x16;
 //^
 // [analyzer] unspecified
-//                              ^
-// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+// [cfe] Type argument 'Fcov<FutureOr<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   CFcov<Fcov<Fcov<Object>>> x17;
 //^
 // [analyzer] unspecified
-//                          ^
-// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+// [cfe] Type argument 'Fcov<Fcov<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   CFcov<Fcov<Fcov<FutureOr<Object>>>> x18;
 //^
 // [analyzer] unspecified
-//                                    ^
-// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+// [cfe] Type argument 'Fcov<Fcov<FutureOr<Object>>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   CFcon<Object> x19;
 //^
 // [analyzer] unspecified
-//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   CFcon<FutureOr<Object>> x20;
 //^
 // [analyzer] unspecified
-//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   CFinv<Object> x21;
 //^
 // [analyzer] unspecified
-//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   CFinv<FutureOr<Object>> x22;
 //^
 // [analyzer] unspecified
-//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   CFunu<Object> x23;
 //^
 // [analyzer] unspecified
-//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   CFunu<FutureOr<Object>> x24;
 //^
 // [analyzer] unspecified
-//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   CcovBound<Object> x25;
 //^
 // [analyzer] unspecified
-//                  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   CcovBound<FutureOr<Object>> x26;
 //^
 // [analyzer] unspecified
-//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   CcovCyclicBound<Object> x27;
 //^
 // [analyzer] unspecified
-//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   CcovCyclicBound<FutureOr<Object>> x28;
 //^
 // [analyzer] unspecified
-//                                  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   CcovCyclicBound<A<Object>> x29;
 //^
 // [analyzer] unspecified
-//                           ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   CcovCyclicBound<A<FutureOr<Object>>> x30;
 //^
 // [analyzer] unspecified
-//                                     ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   CcovCyclicBound<A<A<Object>>> x31;
 //^
 // [analyzer] unspecified
-//                              ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   CcovCyclicBound<A<A<FutureOr<Object>>>> x32;
 //^
 // [analyzer] unspecified
-//                                        ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   CcovCyclicCoBound<Object> x33;
 //^
 // [analyzer] unspecified
-//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   CcovCyclicCoBound<FutureOr<Object>> x34;
 //^
 // [analyzer] unspecified
-//                                    ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   CcovCyclicCoBound<Function(Function(Object))> x35;
 //^
 // [analyzer] unspecified
-//                                              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   CcovCyclicCoBound<Function(Function(FutureOr<Object>))> x36;
 //^
 // [analyzer] unspecified
-//                                                        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
 
   // --- Same non-super-bounded types in a context.
   A<FcovBound<Object>> x37;
 //^
 // [analyzer] unspecified
-//                     ^
+//  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   A<FcovBound<FutureOr<Object>>> x38;
 //^
 // [analyzer] unspecified
-//                               ^
+//  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   A<FcovCyclicBound<Object>> x39;
 //^
 // [analyzer] unspecified
-//                           ^
+//  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   A<FcovCyclicBound<FutureOr<Object>>> x40;
 //^
 // [analyzer] unspecified
-//                                     ^
+//  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   A<FcovCyclicBound<A<Object>>> x41;
 //^
 // [analyzer] unspecified
-//                              ^
+//  ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   A<FcovCyclicBound<A<FutureOr<Object>>>> x42;
 //^
 // [analyzer] unspecified
-//                                        ^
+//  ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   A<FcovCyclicBound<A<A<Object>>>> x43;
 //^
 // [analyzer] unspecified
-//                                 ^
+//  ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   A<FcovCyclicBound<A<A<FutureOr<Object>>>>> x44;
 //^
 // [analyzer] unspecified
-//                                           ^
+//  ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   A<FcovCyclicCoBound<Object>> x45;
 //^
 // [analyzer] unspecified
-//                             ^
+//  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   A<FcovCyclicCoBound<FutureOr<Object>>> x46;
 //^
 // [analyzer] unspecified
-//                                       ^
+//  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   A<FcovCyclicCoBound<Function(Function(Object))>> x47;
 //^
 // [analyzer] unspecified
-//                                                 ^
+//  ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   A<FcovCyclicCoBound<Function(Function(FutureOr<Object>))>> x48;
 //^
 // [analyzer] unspecified
-//                                                           ^
+//  ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   A<CFcov<Object>> x49;
 //^
 // [analyzer] unspecified
-//                 ^
+//  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   A<CFcov<FutureOr<Object>>> x50;
 //^
 // [analyzer] unspecified
-//                           ^
+//  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   A<CFcov<Fcov<Object>>> x51;
 //^
 // [analyzer] unspecified
-//                       ^
-// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//  ^
+// [cfe] Type argument 'Fcov<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   A<CFcov<Fcov<FutureOr<Object>>>> x52;
 //^
 // [analyzer] unspecified
-//                                 ^
-// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//  ^
+// [cfe] Type argument 'Fcov<FutureOr<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   A<CFcov<Fcov<Fcov<Object>>>> x53;
 //^
 // [analyzer] unspecified
-//                             ^
-// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//  ^
+// [cfe] Type argument 'Fcov<Fcov<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   A<CFcov<Fcov<Fcov<FutureOr<Object>>>>> x54;
 //^
 // [analyzer] unspecified
-//                                       ^
-// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//  ^
+// [cfe] Type argument 'Fcov<Fcov<FutureOr<Object>>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   A<CFcon<Object>> x55;
 //^
 // [analyzer] unspecified
-//                 ^
+//  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   A<CFcon<FutureOr<Object>>> x56;
 //^
 // [analyzer] unspecified
-//                           ^
+//  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   A<CFinv<Object>> x57;
 //^
 // [analyzer] unspecified
-//                 ^
+//  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   A<CFinv<FutureOr<Object>>> x58;
 //^
 // [analyzer] unspecified
-//                           ^
+//  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   A<CFunu<Object>> x59;
 //^
 // [analyzer] unspecified
-//                 ^
+//  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   A<CFunu<FutureOr<Object>>> x60;
 //^
 // [analyzer] unspecified
-//                           ^
+//  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   A<CcovBound<Object>> x61;
 //^
 // [analyzer] unspecified
-//                     ^
+//  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   A<CcovBound<FutureOr<Object>>> x62;
 //^
 // [analyzer] unspecified
-//                               ^
+//  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   A<CcovCyclicBound<Object>> x63;
 //^
 // [analyzer] unspecified
-//                           ^
+//  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   A<CcovCyclicBound<FutureOr<Object>>> x64;
 //^
 // [analyzer] unspecified
-//                                     ^
+//  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   A<CcovCyclicBound<A<Object>>> x65;
 //^
 // [analyzer] unspecified
-//                              ^
+//  ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   A<CcovCyclicBound<A<FutureOr<Object>>>> x66;
 //^
 // [analyzer] unspecified
-//                                        ^
+//  ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   A<CcovCyclicBound<A<A<Object>>>> x67;
 //^
 // [analyzer] unspecified
-//                                 ^
+//  ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   A<CcovCyclicBound<A<A<FutureOr<Object>>>>> x68;
 //^
 // [analyzer] unspecified
-//                                           ^
+//  ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   A<CcovCyclicCoBound<Object>> x69;
 //^
 // [analyzer] unspecified
-//                             ^
+//  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   A<CcovCyclicCoBound<FutureOr<Object>>> x70;
 //^
 // [analyzer] unspecified
-//                                       ^
+//  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   A<CcovCyclicCoBound<Function(Function(Object))>> x71;
 //^
 // [analyzer] unspecified
-//                                                 ^
+//  ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   A<CcovCyclicCoBound<Function(Function(FutureOr<Object>))>> x72;
 //^
 // [analyzer] unspecified
-//                                                           ^
+//  ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   FcovBound<Object> Function() x73;
 //^
 // [analyzer] unspecified
-//                             ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   FcovBound<FutureOr<Object>> Function() x74;
 //^
 // [analyzer] unspecified
-//                                       ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   FcovCyclicBound<Object> Function() x75;
 //^
 // [analyzer] unspecified
-//                                   ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   FcovCyclicBound<FutureOr<Object>> Function() x76;
 //^
 // [analyzer] unspecified
-//                                             ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   FcovCyclicBound<A<Object>> Function() x77;
 //^
 // [analyzer] unspecified
-//                                      ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   FcovCyclicBound<A<FutureOr<Object>>> Function() x78;
 //^
 // [analyzer] unspecified
-//                                                ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   FcovCyclicBound<A<A<Object>>> Function() x79;
 //^
 // [analyzer] unspecified
-//                                         ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   FcovCyclicBound<A<A<FutureOr<Object>>>> Function() x80;
 //^
 // [analyzer] unspecified
-//                                                   ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   FcovCyclicCoBound<Object> Function() x81;
 //^
 // [analyzer] unspecified
-//                                     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   FcovCyclicCoBound<FutureOr<Object>> Function() x82;
 //^
 // [analyzer] unspecified
-//                                               ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   FcovCyclicCoBound<Function(Function(Object))> Function() x83;
 //^
 // [analyzer] unspecified
-//                                                         ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   FcovCyclicCoBound<Function(Function(FutureOr<Object>))> Function() x84;
 //^
 // [analyzer] unspecified
-//                                                                   ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   CFcov<Object> Function() x85;
 //^
 // [analyzer] unspecified
-//                         ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   CFcov<FutureOr<Object>> Function() x86;
 //^
 // [analyzer] unspecified
-//                                   ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   CFcov<Fcov<Object>> Function() x87;
 //^
 // [analyzer] unspecified
-//                               ^
-// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+// [cfe] Type argument 'Fcov<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   CFcov<Fcov<FutureOr<Object>>> Function() x88;
 //^
 // [analyzer] unspecified
-//                                         ^
-// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+// [cfe] Type argument 'Fcov<FutureOr<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   CFcov<Fcov<Fcov<Object>>> Function() x89;
 //^
 // [analyzer] unspecified
-//                                     ^
-// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+// [cfe] Type argument 'Fcov<Fcov<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   CFcov<Fcov<Fcov<FutureOr<Object>>>> Function() x90;
 //^
 // [analyzer] unspecified
-//                                               ^
-// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+// [cfe] Type argument 'Fcov<Fcov<FutureOr<Object>>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   CFcon<Object> Function() x91;
 //^
 // [analyzer] unspecified
-//                         ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   CFcon<FutureOr<Object>> Function() x92;
 //^
 // [analyzer] unspecified
-//                                   ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   CFinv<Object> Function() x93;
 //^
 // [analyzer] unspecified
-//                         ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   CFinv<FutureOr<Object>> Function() x94;
 //^
 // [analyzer] unspecified
-//                                   ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   CFunu<Object> Function() x95;
 //^
 // [analyzer] unspecified
-//                         ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   CFunu<FutureOr<Object>> Function() x96;
 //^
 // [analyzer] unspecified
-//                                   ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   CcovBound<Object> Function() x97;
 //^
 // [analyzer] unspecified
-//                             ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   CcovBound<FutureOr<Object>> Function() x98;
 //^
 // [analyzer] unspecified
-//                                       ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   CcovCyclicBound<Object> Function() x99;
 //^
 // [analyzer] unspecified
-//                                   ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   CcovCyclicBound<FutureOr<Object>> Function() x100;
 //^
 // [analyzer] unspecified
-//                                             ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   CcovCyclicBound<A<Object>> Function() x101;
 //^
 // [analyzer] unspecified
-//                                      ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   CcovCyclicBound<A<FutureOr<Object>>> Function() x102;
 //^
 // [analyzer] unspecified
-//                                                ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   CcovCyclicBound<A<A<Object>>> Function() x103;
 //^
 // [analyzer] unspecified
-//                                         ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   CcovCyclicBound<A<A<FutureOr<Object>>>> Function() x104;
 //^
 // [analyzer] unspecified
-//                                                   ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   CcovCyclicCoBound<Object> Function() x105;
 //^
 // [analyzer] unspecified
-//                                     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   CcovCyclicCoBound<FutureOr<Object>> Function() x106;
 //^
 // [analyzer] unspecified
-//                                               ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   CcovCyclicCoBound<Function(Function(Object))> Function() x107;
 //^
 // [analyzer] unspecified
-//                                                         ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   CcovCyclicCoBound<Function(Function(FutureOr<Object>))> Function() x108;
 //^
 // [analyzer] unspecified
-//                                                                   ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(void Function(FcovBound<Object>)) x109;
 //^
 // [analyzer] unspecified
-//                                                ^
+//                            ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   void Function(void Function(FcovBound<FutureOr<Object>>)) x110;
 //^
 // [analyzer] unspecified
-//                                                          ^
+//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   void Function(void Function(FcovCyclicBound<Object>)) x111;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                            ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function(void Function(FcovCyclicBound<FutureOr<Object>>)) x112;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function(void Function(FcovCyclicBound<A<Object>>)) x113;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//                            ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function(void Function(FcovCyclicBound<A<FutureOr<Object>>>)) x114;
 //^
 // [analyzer] unspecified
-//                                                                   ^
+//                            ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function(void Function(FcovCyclicBound<A<A<Object>>>)) x115;
 //^
 // [analyzer] unspecified
-//                                                            ^
+//                            ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function(void Function(FcovCyclicBound<A<A<FutureOr<Object>>>>)) x116;
 //^
 // [analyzer] unspecified
-//                                                                      ^
+//                            ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function(void Function(FcovCyclicCoBound<Object>)) x117;
 //^
 // [analyzer] unspecified
-//                                                        ^
+//                            ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(void Function(FcovCyclicCoBound<FutureOr<Object>>)) x118;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(void Function(FcovCyclicCoBound<Function(Function(Object))>))
 //^
 // [analyzer] unspecified
-      x119;
-//    ^
+//                            ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+      x119;
   void Function(
       void Function(
           FcovCyclicCoBound<Function(Function(FutureOr<Object>))>)) x120;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(void Function(CFcov<Object>)) x121;
 //^
 // [analyzer] unspecified
-//                                            ^
+//                            ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function(void Function(CFcov<FutureOr<Object>>)) x122;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function(void Function(CFcov<Fcov<Object>>)) x123;
 //^
 // [analyzer] unspecified
-//                                                  ^
-// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//                            ^
+// [cfe] Type argument 'Fcov<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function(void Function(CFcov<Fcov<FutureOr<Object>>>)) x124;
 //^
 // [analyzer] unspecified
-//                                                            ^
-// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//                            ^
+// [cfe] Type argument 'Fcov<FutureOr<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function(void Function(CFcov<Fcov<Fcov<Object>>>)) x125;
 //^
 // [analyzer] unspecified
-//                                                        ^
-// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//                            ^
+// [cfe] Type argument 'Fcov<Fcov<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function(void Function(CFcov<Fcov<Fcov<FutureOr<Object>>>>)) x126;
 //^
 // [analyzer] unspecified
-//                                                                  ^
-// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//                            ^
+// [cfe] Type argument 'Fcov<Fcov<FutureOr<Object>>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function(void Function(CFcon<Object>)) x127;
 //^
 // [analyzer] unspecified
-//                                            ^
+//                            ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function(void Function(CFcon<FutureOr<Object>>)) x128;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function(void Function(CFinv<Object>)) x129;
 //^
 // [analyzer] unspecified
-//                                            ^
+//                            ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   void Function(void Function(CFinv<FutureOr<Object>>)) x130;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   void Function(void Function(CFunu<Object>)) x131;
 //^
 // [analyzer] unspecified
-//                                            ^
+//                            ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   void Function(void Function(CFunu<FutureOr<Object>>)) x132;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   void Function(void Function(CcovBound<Object>)) x133;
 //^
 // [analyzer] unspecified
-//                                                ^
+//                            ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   void Function(void Function(CcovBound<FutureOr<Object>>)) x134;
 //^
 // [analyzer] unspecified
-//                                                          ^
+//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   void Function(void Function(CcovCyclicBound<Object>)) x135;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                            ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function(void Function(CcovCyclicBound<FutureOr<Object>>)) x136;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function(void Function(CcovCyclicBound<A<Object>>)) x137;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//                            ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function(void Function(CcovCyclicBound<A<FutureOr<Object>>>)) x138;
 //^
 // [analyzer] unspecified
-//                                                                   ^
+//                            ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function(void Function(CcovCyclicBound<A<A<Object>>>)) x139;
 //^
 // [analyzer] unspecified
-//                                                            ^
+//                            ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function(void Function(CcovCyclicBound<A<A<FutureOr<Object>>>>)) x140;
 //^
 // [analyzer] unspecified
-//                                                                      ^
+//                            ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function(void Function(CcovCyclicCoBound<Object>)) x141;
 //^
 // [analyzer] unspecified
-//                                                        ^
+//                            ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(void Function(CcovCyclicCoBound<FutureOr<Object>>)) x142;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(void Function(CcovCyclicCoBound<Function(Function(Object))>))
 //^
 // [analyzer] unspecified
-      x143;
-//    ^
+//                            ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+      x143;
   void Function(
       void Function(
           CcovCyclicCoBound<Function(Function(FutureOr<Object>))>)) x144;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(FcovBound<Object>) x145;
 //^
 // [analyzer] unspecified
-//                                 ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   void Function(FcovBound<FutureOr<Object>>) x146;
 //^
 // [analyzer] unspecified
-//                                           ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   void Function(FcovCyclicBound<Object>) x147;
 //^
 // [analyzer] unspecified
-//                                       ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function(FcovCyclicBound<FutureOr<Object>>) x148;
 //^
 // [analyzer] unspecified
-//                                                 ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function(FcovCyclicBound<A<Object>>) x149;
 //^
 // [analyzer] unspecified
-//                                          ^
+//              ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function(FcovCyclicBound<A<FutureOr<Object>>>) x150;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//              ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function(FcovCyclicBound<A<A<Object>>>) x151;
 //^
 // [analyzer] unspecified
-//                                             ^
+//              ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function(FcovCyclicBound<A<A<FutureOr<Object>>>>) x152;
 //^
 // [analyzer] unspecified
-//                                                       ^
+//              ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function(FcovCyclicCoBound<Object>) x153;
 //^
 // [analyzer] unspecified
-//                                         ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(FcovCyclicCoBound<FutureOr<Object>>) x154;
 //^
 // [analyzer] unspecified
-//                                                   ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(FcovCyclicCoBound<Function(Function(Object))>) x155;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(FcovCyclicCoBound<Function(Function(FutureOr<Object>))>) x156;
 //^
 // [analyzer] unspecified
-//                                                                       ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(CFcov<Object>) x157;
 //^
 // [analyzer] unspecified
-//                             ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function(CFcov<FutureOr<Object>>) x158;
 //^
 // [analyzer] unspecified
-//                                       ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function(CFcov<Fcov<Object>>) x159;
 //^
 // [analyzer] unspecified
-//                                   ^
-// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//              ^
+// [cfe] Type argument 'Fcov<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function(CFcov<Fcov<FutureOr<Object>>>) x160;
 //^
 // [analyzer] unspecified
-//                                             ^
-// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//              ^
+// [cfe] Type argument 'Fcov<FutureOr<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function(CFcov<Fcov<Fcov<Object>>>) x161;
 //^
 // [analyzer] unspecified
-//                                         ^
-// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//              ^
+// [cfe] Type argument 'Fcov<Fcov<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function(CFcov<Fcov<Fcov<FutureOr<Object>>>>) x162;
 //^
 // [analyzer] unspecified
-//                                                   ^
-// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//              ^
+// [cfe] Type argument 'Fcov<Fcov<FutureOr<Object>>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function(CFcon<Object>) x163;
 //^
 // [analyzer] unspecified
-//                             ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function(CFcon<FutureOr<Object>>) x164;
 //^
 // [analyzer] unspecified
-//                                       ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function(CFinv<Object>) x165;
 //^
 // [analyzer] unspecified
-//                             ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   void Function(CFinv<FutureOr<Object>>) x166;
 //^
 // [analyzer] unspecified
-//                                       ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   void Function(CFunu<Object>) x167;
 //^
 // [analyzer] unspecified
-//                             ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   void Function(CFunu<FutureOr<Object>>) x168;
 //^
 // [analyzer] unspecified
-//                                       ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   void Function(CcovBound<Object>) x169;
 //^
 // [analyzer] unspecified
-//                                 ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   void Function(CcovBound<FutureOr<Object>>) x170;
 //^
 // [analyzer] unspecified
-//                                           ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   void Function(CcovCyclicBound<Object>) x171;
 //^
 // [analyzer] unspecified
-//                                       ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function(CcovCyclicBound<FutureOr<Object>>) x172;
 //^
 // [analyzer] unspecified
-//                                                 ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function(CcovCyclicBound<A<Object>>) x173;
 //^
 // [analyzer] unspecified
-//                                          ^
+//              ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function(CcovCyclicBound<A<FutureOr<Object>>>) x174;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//              ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function(CcovCyclicBound<A<A<Object>>>) x175;
 //^
 // [analyzer] unspecified
-//                                             ^
+//              ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function(CcovCyclicBound<A<A<FutureOr<Object>>>>) x176;
 //^
 // [analyzer] unspecified
-//                                                       ^
+//              ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function(CcovCyclicCoBound<Object>) x177;
 //^
 // [analyzer] unspecified
-//                                         ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(CcovCyclicCoBound<FutureOr<Object>>) x178;
 //^
 // [analyzer] unspecified
-//                                                   ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(CcovCyclicCoBound<Function(Function(Object))>) x179;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(CcovCyclicCoBound<Function(Function(FutureOr<Object>))>) x180;
 //^
 // [analyzer] unspecified
-//                                                                       ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(FcovBound<Object>) Function() x181;
 //^
 // [analyzer] unspecified
-//                                            ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   void Function(FcovBound<FutureOr<Object>>) Function() x182;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   void Function(FcovCyclicBound<Object>) Function() x183;
 //^
 // [analyzer] unspecified
-//                                                  ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function(FcovCyclicBound<FutureOr<Object>>) Function() x184;
 //^
 // [analyzer] unspecified
-//                                                            ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function(FcovCyclicBound<A<Object>>) Function() x185;
 //^
 // [analyzer] unspecified
-//                                                     ^
+//              ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function(FcovCyclicBound<A<FutureOr<Object>>>) Function() x186;
 //^
 // [analyzer] unspecified
-//                                                               ^
+//              ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function(FcovCyclicBound<A<A<Object>>>) Function() x187;
 //^
 // [analyzer] unspecified
-//                                                        ^
+//              ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function(FcovCyclicBound<A<A<FutureOr<Object>>>>) Function() x188;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//              ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function(FcovCyclicCoBound<Object>) Function() x189;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(FcovCyclicCoBound<FutureOr<Object>>) Function() x190;
 //^
 // [analyzer] unspecified
-//                                                              ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(FcovCyclicCoBound<Function(Function(Object))>) Function() x191;
 //^
 // [analyzer] unspecified
-//                                                                        ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function(FcovCyclicCoBound<Function(Function(FutureOr<Object>))>)
 //^
 // [analyzer] unspecified
-      Function() x192;
-//               ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+      Function() x192;
   void Function(CFcov<Object>) Function() x193;
 //^
 // [analyzer] unspecified
-//                                        ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function(CFcov<FutureOr<Object>>) Function() x194;
 //^
 // [analyzer] unspecified
-//                                                  ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function(CFcov<Fcov<Object>>) Function() x195;
 //^
 // [analyzer] unspecified
-//                                              ^
-// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//              ^
+// [cfe] Type argument 'Fcov<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function(CFcov<Fcov<FutureOr<Object>>>) Function() x196;
 //^
 // [analyzer] unspecified
-//                                                        ^
-// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//              ^
+// [cfe] Type argument 'Fcov<FutureOr<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function(CFcov<Fcov<Fcov<Object>>>) Function() x197;
 //^
 // [analyzer] unspecified
-//                                                    ^
-// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//              ^
+// [cfe] Type argument 'Fcov<Fcov<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function(CFcov<Fcov<Fcov<FutureOr<Object>>>>) Function() x198;
 //^
 // [analyzer] unspecified
-//                                                              ^
-// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//              ^
+// [cfe] Type argument 'Fcov<Fcov<FutureOr<Object>>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function(CFcon<Object>) Function() x199;
 //^
 // [analyzer] unspecified
-//                                        ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function(CFcon<FutureOr<Object>>) Function() x200;
 //^
 // [analyzer] unspecified
-//                                                  ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function(CFinv<Object>) Function() x201;
 //^
 // [analyzer] unspecified
-//                                        ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   void Function(CFinv<FutureOr<Object>>) Function() x202;
 //^
 // [analyzer] unspecified
-//                                                  ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   void Function(CFunu<Object>) Function() x203;
 //^
 // [analyzer] unspecified
-//                                        ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   void Function(CFunu<FutureOr<Object>>) Function() x204;
 //^
 // [analyzer] unspecified
-//                                                  ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   void Function(CcovBound<Object>) Function() x205;
 //^
 // [analyzer] unspecified
-//                                            ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   void Function(CcovBound<FutureOr<Object>>) Function() x206;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   void Function(CcovCyclicBound<Object>) Function() x207;
 //^
 // [analyzer] unspecified
-//                                                  ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function(CcovCyclicBound<FutureOr<Object>>) Function() x208;
 //^
 // [analyzer] unspecified
-//                                                            ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function(CcovCyclicBound<A<Object>>) Function() x209;
 //^
 // [analyzer] unspecified
-//                                                     ^
+//              ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function(CcovCyclicBound<A<FutureOr<Object>>>) Function() x210;
 //^
 // [analyzer] unspecified
-//                                                               ^
+//              ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function(CcovCyclicBound<A<A<Object>>>) Function() x211;
 //^
 // [analyzer] unspecified
-//                                                        ^
+//              ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function(CcovCyclicBound<A<A<FutureOr<Object>>>>) Function() x212;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//              ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function(CcovCyclicCoBound<Object>) Function() x213;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(CcovCyclicCoBound<FutureOr<Object>>) Function() x214;
 //^
 // [analyzer] unspecified
-//                                                              ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(CcovCyclicCoBound<Function(Function(Object))>) Function() x215;
 //^
 // [analyzer] unspecified
-//                                                                        ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function(CcovCyclicCoBound<Function(Function(FutureOr<Object>))>)
 //^
 // [analyzer] unspecified
-      Function() x216;
-//               ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+      Function() x216;
   void Function<Y extends FcovBound<Object>>() x217;
 //^
 // [analyzer] unspecified
-//                                             ^
+//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   void Function<Y extends FcovBound<FutureOr<Object>>>() x218;
 //^
 // [analyzer] unspecified
-//                                                       ^
+//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   void Function<Y extends FcovCyclicBound<Object>>() x219;
 //^
 // [analyzer] unspecified
-//                                                   ^
+//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function<Y extends FcovCyclicBound<FutureOr<Object>>>() x220;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function<Y extends FcovCyclicBound<A<Object>>>() x221;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                        ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function<Y extends FcovCyclicBound<A<FutureOr<Object>>>>() x222;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//                        ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function<Y extends FcovCyclicBound<A<A<Object>>>>() x223;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//                        ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function<Y extends FcovCyclicBound<A<A<FutureOr<Object>>>>>() x224;
 //^
 // [analyzer] unspecified
-//                                                                   ^
+//                        ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function<Y extends FcovCyclicCoBound<Object>>() x225;
 //^
 // [analyzer] unspecified
-//                                                     ^
+//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function<Y extends FcovCyclicCoBound<FutureOr<Object>>>() x226;
 //^
 // [analyzer] unspecified
-//                                                               ^
+//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function<Y extends FcovCyclicCoBound<Function(Function(Object))>>() x227;
 //^
 // [analyzer] unspecified
-//                                                                         ^
+//                        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function<
       Y extends FcovCyclicCoBound<Function(Function(FutureOr<Object>))>>() x228;
 //^
 // [analyzer] unspecified
-//                                                                         ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function<Y extends CFcov<Object>>() x229;
 //^
 // [analyzer] unspecified
-//                                         ^
+//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function<Y extends CFcov<FutureOr<Object>>>() x230;
 //^
 // [analyzer] unspecified
-//                                                   ^
+//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function<Y extends CFcov<Fcov<Object>>>() x231;
 //^
 // [analyzer] unspecified
-//                                               ^
-// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//                        ^
+// [cfe] Type argument 'Fcov<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function<Y extends CFcov<Fcov<FutureOr<Object>>>>() x232;
 //^
 // [analyzer] unspecified
-//                                                         ^
-// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//                        ^
+// [cfe] Type argument 'Fcov<FutureOr<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function<Y extends CFcov<Fcov<Fcov<Object>>>>() x233;
 //^
 // [analyzer] unspecified
-//                                                     ^
-// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//                        ^
+// [cfe] Type argument 'Fcov<Fcov<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function<Y extends CFcov<Fcov<Fcov<FutureOr<Object>>>>>() x234;
 //^
 // [analyzer] unspecified
-//                                                               ^
-// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//                        ^
+// [cfe] Type argument 'Fcov<Fcov<FutureOr<Object>>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function<Y extends CFcon<Object>>() x235;
 //^
 // [analyzer] unspecified
-//                                         ^
+//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function<Y extends CFcon<FutureOr<Object>>>() x236;
 //^
 // [analyzer] unspecified
-//                                                   ^
+//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function<Y extends CFinv<Object>>() x237;
 //^
 // [analyzer] unspecified
-//                                         ^
+//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   void Function<Y extends CFinv<FutureOr<Object>>>() x238;
 //^
 // [analyzer] unspecified
-//                                                   ^
+//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   void Function<Y extends CFunu<Object>>() x239;
 //^
 // [analyzer] unspecified
-//                                         ^
+//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   void Function<Y extends CFunu<FutureOr<Object>>>() x240;
 //^
 // [analyzer] unspecified
-//                                                   ^
+//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   void Function<Y extends CcovBound<Object>>() x241;
 //^
 // [analyzer] unspecified
-//                                             ^
+//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   void Function<Y extends CcovBound<FutureOr<Object>>>() x242;
 //^
 // [analyzer] unspecified
-//                                                       ^
+//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   void Function<Y extends CcovCyclicBound<Object>>() x243;
 //^
 // [analyzer] unspecified
-//                                                   ^
+//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function<Y extends CcovCyclicBound<FutureOr<Object>>>() x244;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function<Y extends CcovCyclicBound<A<Object>>>() x245;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                        ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function<Y extends CcovCyclicBound<A<FutureOr<Object>>>>() x246;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//                        ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function<Y extends CcovCyclicBound<A<A<Object>>>>() x247;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//                        ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function<Y extends CcovCyclicBound<A<A<FutureOr<Object>>>>>() x248;
 //^
 // [analyzer] unspecified
-//                                                                   ^
+//                        ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function<Y extends CcovCyclicCoBound<Object>>() x249;
 //^
 // [analyzer] unspecified
-//                                                     ^
+//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function<Y extends CcovCyclicCoBound<FutureOr<Object>>>() x250;
 //^
 // [analyzer] unspecified
-//                                                               ^
+//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function<Y extends CcovCyclicCoBound<Function(Function(Object))>>() x251;
 //^
 // [analyzer] unspecified
-//                                                                         ^
+//                        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function<
       Y extends CcovCyclicCoBound<Function(Function(FutureOr<Object>))>>() x252;
 //^
 // [analyzer] unspecified
-//                                                                         ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function<Y extends A<FcovBound<Object>>>() x253;
 //^
 // [analyzer] unspecified
-//                                                ^
+//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   void Function<Y extends A<FcovBound<FutureOr<Object>>>>() x254;
 //^
 // [analyzer] unspecified
-//                                                          ^
+//                          ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   void Function<Y extends A<FcovCyclicBound<Object>>>() x255;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function<Y extends A<FcovCyclicBound<FutureOr<Object>>>>() x256;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//                          ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function<Y extends A<FcovCyclicBound<A<Object>>>>() x257;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//                          ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function<Y extends A<FcovCyclicBound<A<FutureOr<Object>>>>>() x258;
 //^
 // [analyzer] unspecified
-//                                                                   ^
+//                          ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function<Y extends A<FcovCyclicBound<A<A<Object>>>>>() x259;
 //^
 // [analyzer] unspecified
-//                                                            ^
+//                          ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function<Y extends A<FcovCyclicBound<A<A<FutureOr<Object>>>>>>() x260;
 //^
 // [analyzer] unspecified
-//                                                                      ^
+//                          ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   void Function<Y extends A<FcovCyclicCoBound<Object>>>() x261;
 //^
 // [analyzer] unspecified
-//                                                        ^
+//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function<Y extends A<FcovCyclicCoBound<FutureOr<Object>>>>() x262;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//                          ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function<Y extends A<FcovCyclicCoBound<Function(Function(Object))>>>()
 //^
 // [analyzer] unspecified
-      x263;
-//    ^
+//                          ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+      x263;
   void Function<
       Y extends A<
           FcovCyclicCoBound<Function(Function(FutureOr<Object>))>>>() x264;
 //^
 // [analyzer] unspecified
-//                                                                    ^
+//        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   void Function<Y extends A<CFcov<Object>>>() x265;
 //^
 // [analyzer] unspecified
-//                                            ^
+//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function<Y extends A<CFcov<FutureOr<Object>>>>() x266;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                          ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function<Y extends A<CFcov<Fcov<Object>>>>() x267;
 //^
 // [analyzer] unspecified
-//                                                  ^
-// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//                          ^
+// [cfe] Type argument 'Fcov<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function<Y extends A<CFcov<Fcov<FutureOr<Object>>>>>() x268;
 //^
 // [analyzer] unspecified
-//                                                            ^
-// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//                          ^
+// [cfe] Type argument 'Fcov<FutureOr<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function<Y extends A<CFcov<Fcov<Fcov<Object>>>>>() x269;
 //^
 // [analyzer] unspecified
-//                                                        ^
-// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//                          ^
+// [cfe] Type argument 'Fcov<Fcov<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function<Y extends A<CFcov<Fcov<Fcov<FutureOr<Object>>>>>>() x270;
 //^
 // [analyzer] unspecified
-//                                                                  ^
-// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//                          ^
+// [cfe] Type argument 'Fcov<Fcov<FutureOr<Object>>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   void Function<Y extends A<CFcon<Object>>>() x271;
 //^
 // [analyzer] unspecified
-//                                            ^
+//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function<Y extends A<CFcon<FutureOr<Object>>>>() x272;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                          ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   void Function<Y extends A<CFinv<Object>>>() x273;
 //^
 // [analyzer] unspecified
-//                                            ^
+//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   void Function<Y extends A<CFinv<FutureOr<Object>>>>() x274;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                          ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   void Function<Y extends A<CFunu<Object>>>() x275;
 //^
 // [analyzer] unspecified
-//                                            ^
+//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   void Function<Y extends A<CFunu<FutureOr<Object>>>>() x276;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                          ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   void Function<Y extends A<CcovBound<Object>>>() x277;
 //^
 // [analyzer] unspecified
-//                                                ^
+//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   void Function<Y extends A<CcovBound<FutureOr<Object>>>>() x278;
 //^
 // [analyzer] unspecified
-//                                                          ^
+//                          ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   void Function<Y extends A<CcovCyclicBound<Object>>>() x279;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function<Y extends A<CcovCyclicBound<FutureOr<Object>>>>() x280;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//                          ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function<Y extends A<CcovCyclicBound<A<Object>>>>() x281;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//                          ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function<Y extends A<CcovCyclicBound<A<FutureOr<Object>>>>>() x282;
 //^
 // [analyzer] unspecified
-//                                                                   ^
+//                          ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function<Y extends A<CcovCyclicBound<A<A<Object>>>>>() x283;
 //^
 // [analyzer] unspecified
-//                                                            ^
+//                          ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function<Y extends A<CcovCyclicBound<A<A<FutureOr<Object>>>>>>() x284;
 //^
 // [analyzer] unspecified
-//                                                                      ^
+//                          ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   void Function<Y extends A<CcovCyclicCoBound<Object>>>() x285;
 //^
 // [analyzer] unspecified
-//                                                        ^
+//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function<Y extends A<CcovCyclicCoBound<FutureOr<Object>>>>() x286;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//                          ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   void Function<Y extends A<CcovCyclicCoBound<Function(Function(Object))>>>()
 //^
 // [analyzer] unspecified
-      x287;
-//    ^
+//                          ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+      x287;
   void Function<
       Y extends A<
           CcovCyclicCoBound<Function(Function(FutureOr<Object>))>>>() x288;
 //^
 // [analyzer] unspecified
-//                                                                    ^
+//        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   Finv<FcovBound<Object>> x289;
 //^
 // [analyzer] unspecified
-//                        ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   Finv<FcovBound<FutureOr<Object>>> x290;
 //^
 // [analyzer] unspecified
-//                                  ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   Finv<FcovCyclicBound<Object>> x291;
 //^
 // [analyzer] unspecified
-//                              ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   Finv<FcovCyclicBound<FutureOr<Object>>> x292;
 //^
 // [analyzer] unspecified
-//                                        ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   Finv<FcovCyclicBound<A<Object>>> x293;
 //^
 // [analyzer] unspecified
-//                                 ^
+//     ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   Finv<FcovCyclicBound<A<FutureOr<Object>>>> x294;
 //^
 // [analyzer] unspecified
-//                                           ^
+//     ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   Finv<FcovCyclicBound<A<A<Object>>>> x295;
 //^
 // [analyzer] unspecified
-//                                    ^
+//     ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   Finv<FcovCyclicBound<A<A<FutureOr<Object>>>>> x296;
 //^
 // [analyzer] unspecified
-//                                              ^
+//     ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   Finv<FcovCyclicCoBound<Object>> x297;
 //^
 // [analyzer] unspecified
-//                                ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   Finv<FcovCyclicCoBound<FutureOr<Object>>> x298;
 //^
 // [analyzer] unspecified
-//                                          ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   Finv<FcovCyclicCoBound<Function(Function(Object))>> x299;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   Finv<FcovCyclicCoBound<Function(Function(FutureOr<Object>))>> x300;
 //^
 // [analyzer] unspecified
-//                                                              ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   Finv<CFcov<Object>> x301;
 //^
 // [analyzer] unspecified
-//                    ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   Finv<CFcov<FutureOr<Object>>> x302;
 //^
 // [analyzer] unspecified
-//                              ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   Finv<CFcov<Fcov<Object>>> x303;
 //^
 // [analyzer] unspecified
-//                          ^
-// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//     ^
+// [cfe] Type argument 'Fcov<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   Finv<CFcov<Fcov<FutureOr<Object>>>> x304;
 //^
 // [analyzer] unspecified
-//                                    ^
-// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//     ^
+// [cfe] Type argument 'Fcov<FutureOr<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   Finv<CFcov<Fcov<Fcov<Object>>>> x305;
 //^
 // [analyzer] unspecified
-//                                ^
-// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//     ^
+// [cfe] Type argument 'Fcov<Fcov<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   Finv<CFcov<Fcov<Fcov<FutureOr<Object>>>>> x306;
 //^
 // [analyzer] unspecified
-//                                          ^
-// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//     ^
+// [cfe] Type argument 'Fcov<Fcov<FutureOr<Object>>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   Finv<CFcon<Object>> x307;
 //^
 // [analyzer] unspecified
-//                    ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   Finv<CFcon<FutureOr<Object>>> x308;
 //^
 // [analyzer] unspecified
-//                              ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   Finv<CFinv<Object>> x309;
 //^
 // [analyzer] unspecified
-//                    ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   Finv<CFinv<FutureOr<Object>>> x310;
 //^
 // [analyzer] unspecified
-//                              ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   Finv<CFunu<Object>> x311;
 //^
 // [analyzer] unspecified
-//                    ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   Finv<CFunu<FutureOr<Object>>> x312;
 //^
 // [analyzer] unspecified
-//                              ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   Finv<CcovBound<Object>> x313;
 //^
 // [analyzer] unspecified
-//                        ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   Finv<CcovBound<FutureOr<Object>>> x314;
 //^
 // [analyzer] unspecified
-//                                  ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   Finv<CcovCyclicBound<Object>> x315;
 //^
 // [analyzer] unspecified
-//                              ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   Finv<CcovCyclicBound<FutureOr<Object>>> x316;
 //^
 // [analyzer] unspecified
-//                                        ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   Finv<CcovCyclicBound<A<Object>>> x317;
 //^
 // [analyzer] unspecified
-//                                 ^
+//     ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   Finv<CcovCyclicBound<A<FutureOr<Object>>>> x318;
 //^
 // [analyzer] unspecified
-//                                           ^
+//     ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   Finv<CcovCyclicBound<A<A<Object>>>> x319;
 //^
 // [analyzer] unspecified
-//                                    ^
+//     ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   Finv<CcovCyclicBound<A<A<FutureOr<Object>>>>> x320;
 //^
 // [analyzer] unspecified
-//                                              ^
+//     ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   Finv<CcovCyclicCoBound<Object>> x321;
 //^
 // [analyzer] unspecified
-//                                ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   Finv<CcovCyclicCoBound<FutureOr<Object>>> x322;
 //^
 // [analyzer] unspecified
-//                                          ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   Finv<CcovCyclicCoBound<Function(Function(Object))>> x323;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   Finv<CcovCyclicCoBound<Function(Function(FutureOr<Object>))>> x324;
 //^
 // [analyzer] unspecified
-//                                                              ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   Funu<FcovBound<Object>> x325;
 //^
 // [analyzer] unspecified
-//                        ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   Funu<FcovBound<FutureOr<Object>>> x326;
 //^
 // [analyzer] unspecified
-//                                  ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
   Funu<FcovCyclicBound<Object>> x327;
 //^
 // [analyzer] unspecified
-//                              ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   Funu<FcovCyclicBound<FutureOr<Object>>> x328;
 //^
 // [analyzer] unspecified
-//                                        ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   Funu<FcovCyclicBound<A<Object>>> x329;
 //^
 // [analyzer] unspecified
-//                                 ^
+//     ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   Funu<FcovCyclicBound<A<FutureOr<Object>>>> x330;
 //^
 // [analyzer] unspecified
-//                                           ^
+//     ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   Funu<FcovCyclicBound<A<A<Object>>>> x331;
 //^
 // [analyzer] unspecified
-//                                    ^
+//     ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   Funu<FcovCyclicBound<A<A<FutureOr<Object>>>>> x332;
 //^
 // [analyzer] unspecified
-//                                              ^
+//     ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
   Funu<FcovCyclicCoBound<Object>> x333;
 //^
 // [analyzer] unspecified
-//                                ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   Funu<FcovCyclicCoBound<FutureOr<Object>>> x334;
 //^
 // [analyzer] unspecified
-//                                          ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   Funu<FcovCyclicCoBound<Function(Function(Object))>> x335;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   Funu<FcovCyclicCoBound<Function(Function(FutureOr<Object>))>> x336;
 //^
 // [analyzer] unspecified
-//                                                              ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
   Funu<CFcov<Object>> x337;
 //^
 // [analyzer] unspecified
-//                    ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   Funu<CFcov<FutureOr<Object>>> x338;
 //^
 // [analyzer] unspecified
-//                              ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   Funu<CFcov<Fcov<Object>>> x339;
 //^
 // [analyzer] unspecified
-//                          ^
-// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//     ^
+// [cfe] Type argument 'Fcov<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   Funu<CFcov<Fcov<FutureOr<Object>>>> x340;
 //^
 // [analyzer] unspecified
-//                                    ^
-// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//     ^
+// [cfe] Type argument 'Fcov<FutureOr<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   Funu<CFcov<Fcov<Fcov<Object>>>> x341;
 //^
 // [analyzer] unspecified
-//                                ^
-// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//     ^
+// [cfe] Type argument 'Fcov<Fcov<Object>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   Funu<CFcov<Fcov<Fcov<FutureOr<Object>>>>> x342;
 //^
 // [analyzer] unspecified
-//                                          ^
-// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+//     ^
+// [cfe] Type argument 'Fcov<Fcov<FutureOr<Object>>>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
   Funu<CFcon<Object>> x343;
 //^
 // [analyzer] unspecified
-//                    ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   Funu<CFcon<FutureOr<Object>>> x344;
 //^
 // [analyzer] unspecified
-//                              ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
   Funu<CFinv<Object>> x345;
 //^
 // [analyzer] unspecified
-//                    ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   Funu<CFinv<FutureOr<Object>>> x346;
 //^
 // [analyzer] unspecified
-//                              ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
   Funu<CFunu<Object>> x347;
 //^
 // [analyzer] unspecified
-//                    ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   Funu<CFunu<FutureOr<Object>>> x348;
 //^
 // [analyzer] unspecified
-//                              ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
   Funu<CcovBound<Object>> x349;
 //^
 // [analyzer] unspecified
-//                        ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   Funu<CcovBound<FutureOr<Object>>> x350;
 //^
 // [analyzer] unspecified
-//                                  ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
   Funu<CcovCyclicBound<Object>> x351;
 //^
 // [analyzer] unspecified
-//                              ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   Funu<CcovCyclicBound<FutureOr<Object>>> x352;
 //^
 // [analyzer] unspecified
-//                                        ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   Funu<CcovCyclicBound<A<Object>>> x353;
 //^
 // [analyzer] unspecified
-//                                 ^
+//     ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   Funu<CcovCyclicBound<A<FutureOr<Object>>>> x354;
 //^
 // [analyzer] unspecified
-//                                           ^
+//     ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   Funu<CcovCyclicBound<A<A<Object>>>> x355;
 //^
 // [analyzer] unspecified
-//                                    ^
+//     ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   Funu<CcovCyclicBound<A<A<FutureOr<Object>>>>> x356;
 //^
 // [analyzer] unspecified
-//                                              ^
+//     ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
   Funu<CcovCyclicCoBound<Object>> x357;
 //^
 // [analyzer] unspecified
-//                                ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   Funu<CcovCyclicCoBound<FutureOr<Object>>> x358;
 //^
 // [analyzer] unspecified
-//                                          ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   Funu<CcovCyclicCoBound<Function(Function(Object))>> x359;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
   Funu<CcovCyclicCoBound<Function(Function(FutureOr<Object>))>> x360;
 //^
 // [analyzer] unspecified
-//                                                              ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
 }
 
@@ -1884,612 +1812,588 @@
   FinvBound<Object> x1;
 //^
 // [analyzer] unspecified
-//                  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   FinvBound<FutureOr<Object>> x2;
 //^
 // [analyzer] unspecified
-//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   FinvCyclicBound<Object> x3;
 //^
 // [analyzer] unspecified
-//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   FinvCyclicBound<FutureOr<Object>> x4;
 //^
 // [analyzer] unspecified
-//                                  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   FinvCyclicBound<A<Object>> x5;
 //^
 // [analyzer] unspecified
-//                           ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   FinvCyclicBound<A<FutureOr<Object>>> x6;
 //^
 // [analyzer] unspecified
-//                                     ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   FinvCyclicBound<A<A<Object>>> x7;
 //^
 // [analyzer] unspecified
-//                              ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   FinvCyclicBound<A<A<FutureOr<Object>>>> x8;
 //^
 // [analyzer] unspecified
-//                                        ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   FinvCyclicCoBound<Object> x9;
 //^
 // [analyzer] unspecified
-//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   FinvCyclicCoBound<FutureOr<Object>> x10;
 //^
 // [analyzer] unspecified
-//                                    ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   FinvCyclicCoBound<Function(Function(Object))> x11;
 //^
 // [analyzer] unspecified
-//                                              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   FinvCyclicCoBound<Function(Function(FutureOr<Object>))> x12;
 //^
 // [analyzer] unspecified
-//                                                        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
 
   // --- Same non-super-bounded types in a context.
   A<FinvBound<Object>> x13;
 //^
 // [analyzer] unspecified
-//                     ^
+//  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   A<FinvBound<FutureOr<Object>>> x14;
 //^
 // [analyzer] unspecified
-//                               ^
+//  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   A<FinvCyclicBound<Object>> x15;
 //^
 // [analyzer] unspecified
-//                           ^
+//  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   A<FinvCyclicBound<FutureOr<Object>>> x16;
 //^
 // [analyzer] unspecified
-//                                     ^
+//  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   A<FinvCyclicBound<A<Object>>> x17;
 //^
 // [analyzer] unspecified
-//                              ^
+//  ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   A<FinvCyclicBound<A<FutureOr<Object>>>> x18;
 //^
 // [analyzer] unspecified
-//                                        ^
+//  ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   A<FinvCyclicBound<A<A<Object>>>> x19;
 //^
 // [analyzer] unspecified
-//                                 ^
+//  ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   A<FinvCyclicBound<A<A<FutureOr<Object>>>>> x20;
 //^
 // [analyzer] unspecified
-//                                           ^
+//  ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   A<FinvCyclicCoBound<Object>> x21;
 //^
 // [analyzer] unspecified
-//                             ^
+//  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   A<FinvCyclicCoBound<FutureOr<Object>>> x22;
 //^
 // [analyzer] unspecified
-//                                       ^
+//  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   A<FinvCyclicCoBound<Function(Function(Object))>> x23;
 //^
 // [analyzer] unspecified
-//                                                 ^
+//  ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   A<FinvCyclicCoBound<Function(Function(FutureOr<Object>))>> x24;
 //^
 // [analyzer] unspecified
-//                                                           ^
+//  ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   FinvBound<Object> Function() x25;
 //^
 // [analyzer] unspecified
-//                             ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   FinvBound<FutureOr<Object>> Function() x26;
 //^
 // [analyzer] unspecified
-//                                       ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   FinvCyclicBound<Object> Function() x27;
 //^
 // [analyzer] unspecified
-//                                   ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   FinvCyclicBound<FutureOr<Object>> Function() x28;
 //^
 // [analyzer] unspecified
-//                                             ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   FinvCyclicBound<A<Object>> Function() x29;
 //^
 // [analyzer] unspecified
-//                                      ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   FinvCyclicBound<A<FutureOr<Object>>> Function() x30;
 //^
 // [analyzer] unspecified
-//                                                ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   FinvCyclicBound<A<A<Object>>> Function() x31;
 //^
 // [analyzer] unspecified
-//                                         ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   FinvCyclicBound<A<A<FutureOr<Object>>>> Function() x32;
 //^
 // [analyzer] unspecified
-//                                                   ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   FinvCyclicCoBound<Object> Function() x33;
 //^
 // [analyzer] unspecified
-//                                     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   FinvCyclicCoBound<FutureOr<Object>> Function() x34;
 //^
 // [analyzer] unspecified
-//                                               ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   FinvCyclicCoBound<Function(Function(Object))> Function() x35;
 //^
 // [analyzer] unspecified
-//                                                         ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   FinvCyclicCoBound<Function(Function(FutureOr<Object>))> Function() x36;
 //^
 // [analyzer] unspecified
-//                                                                   ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   void Function(void Function(FinvBound<Object>)) x37;
 //^
 // [analyzer] unspecified
-//                                                ^
+//                            ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   void Function(void Function(FinvBound<FutureOr<Object>>)) x38;
 //^
 // [analyzer] unspecified
-//                                                          ^
+//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   void Function(void Function(FinvCyclicBound<Object>)) x39;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                            ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function(void Function(FinvCyclicBound<FutureOr<Object>>)) x40;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function(void Function(FinvCyclicBound<A<Object>>)) x41;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//                            ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function(void Function(FinvCyclicBound<A<FutureOr<Object>>>)) x42;
 //^
 // [analyzer] unspecified
-//                                                                   ^
+//                            ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function(void Function(FinvCyclicBound<A<A<Object>>>)) x43;
 //^
 // [analyzer] unspecified
-//                                                            ^
+//                            ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function(void Function(FinvCyclicBound<A<A<FutureOr<Object>>>>)) x44;
 //^
 // [analyzer] unspecified
-//                                                                      ^
+//                            ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function(void Function(FinvCyclicCoBound<Object>)) x45;
 //^
 // [analyzer] unspecified
-//                                                        ^
+//                            ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   void Function(void Function(FinvCyclicCoBound<FutureOr<Object>>)) x46;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   void Function(void Function(FinvCyclicCoBound<Function(Function(Object))>))
 //^
 // [analyzer] unspecified
-      x47;
-//    ^
+//                            ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+      x47;
   void Function(
       void Function(
           FinvCyclicCoBound<Function(Function(FutureOr<Object>))>)) x48;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   void Function(FinvBound<Object>) x49;
 //^
 // [analyzer] unspecified
-//                                 ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   void Function(FinvBound<FutureOr<Object>>) x50;
 //^
 // [analyzer] unspecified
-//                                           ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   void Function(FinvCyclicBound<Object>) x51;
 //^
 // [analyzer] unspecified
-//                                       ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function(FinvCyclicBound<FutureOr<Object>>) x52;
 //^
 // [analyzer] unspecified
-//                                                 ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function(FinvCyclicBound<A<Object>>) x53;
 //^
 // [analyzer] unspecified
-//                                          ^
+//              ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function(FinvCyclicBound<A<FutureOr<Object>>>) x54;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//              ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function(FinvCyclicBound<A<A<Object>>>) x55;
 //^
 // [analyzer] unspecified
-//                                             ^
+//              ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function(FinvCyclicBound<A<A<FutureOr<Object>>>>) x56;
 //^
 // [analyzer] unspecified
-//                                                       ^
+//              ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function(FinvCyclicCoBound<Object>) x57;
 //^
 // [analyzer] unspecified
-//                                         ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   void Function(FinvCyclicCoBound<FutureOr<Object>>) x58;
 //^
 // [analyzer] unspecified
-//                                                   ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   void Function(FinvCyclicCoBound<Function(Function(Object))>) x59;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   void Function(FinvCyclicCoBound<Function(Function(FutureOr<Object>))>) x60;
 //^
 // [analyzer] unspecified
-//                                                                       ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   void Function(FinvBound<Object>) Function() x61;
 //^
 // [analyzer] unspecified
-//                                            ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   void Function(FinvBound<FutureOr<Object>>) Function() x62;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   void Function(FinvCyclicBound<Object>) Function() x63;
 //^
 // [analyzer] unspecified
-//                                                  ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function(FinvCyclicBound<FutureOr<Object>>) Function() x64;
 //^
 // [analyzer] unspecified
-//                                                            ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function(FinvCyclicBound<A<Object>>) Function() x65;
 //^
 // [analyzer] unspecified
-//                                                     ^
+//              ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function(FinvCyclicBound<A<FutureOr<Object>>>) Function() x66;
 //^
 // [analyzer] unspecified
-//                                                               ^
+//              ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function(FinvCyclicBound<A<A<Object>>>) Function() x67;
 //^
 // [analyzer] unspecified
-//                                                        ^
+//              ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function(FinvCyclicBound<A<A<FutureOr<Object>>>>) Function() x68;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//              ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function(FinvCyclicCoBound<Object>) Function() x69;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   void Function(FinvCyclicCoBound<FutureOr<Object>>) Function() x70;
 //^
 // [analyzer] unspecified
-//                                                              ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   void Function(FinvCyclicCoBound<Function(Function(Object))>) Function() x71;
 //^
 // [analyzer] unspecified
-//                                                                        ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   void Function(FinvCyclicCoBound<Function(Function(FutureOr<Object>))>)
 //^
 // [analyzer] unspecified
-      Function() x72;
-//               ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+      Function() x72;
   void Function<Y extends FinvBound<Object>>() x73;
 //^
 // [analyzer] unspecified
-//                                             ^
+//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   void Function<Y extends FinvBound<FutureOr<Object>>>() x74;
 //^
 // [analyzer] unspecified
-//                                                       ^
+//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   void Function<Y extends FinvCyclicBound<Object>>() x75;
 //^
 // [analyzer] unspecified
-//                                                   ^
+//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function<Y extends FinvCyclicBound<FutureOr<Object>>>() x76;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function<Y extends FinvCyclicBound<A<Object>>>() x77;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                        ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function<Y extends FinvCyclicBound<A<FutureOr<Object>>>>() x78;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//                        ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function<Y extends FinvCyclicBound<A<A<Object>>>>() x79;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//                        ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function<Y extends FinvCyclicBound<A<A<FutureOr<Object>>>>>() x80;
 //^
 // [analyzer] unspecified
-//                                                                   ^
+//                        ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function<Y extends FinvCyclicCoBound<Object>>() x81;
 //^
 // [analyzer] unspecified
-//                                                     ^
+//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   void Function<Y extends FinvCyclicCoBound<FutureOr<Object>>>() x82;
 //^
 // [analyzer] unspecified
-//                                                               ^
+//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   void Function<Y extends FinvCyclicCoBound<Function(Function(Object))>>() x83;
 //^
 // [analyzer] unspecified
-//                                                                         ^
+//                        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   void Function<
       Y extends FinvCyclicCoBound<Function(Function(FutureOr<Object>))>>() x84;
 //^
 // [analyzer] unspecified
-//                                                                         ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   void Function<Y extends A<FinvBound<Object>>>() x85;
 //^
 // [analyzer] unspecified
-//                                                ^
+//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   void Function<Y extends A<FinvBound<FutureOr<Object>>>>() x86;
 //^
 // [analyzer] unspecified
-//                                                          ^
+//                          ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   void Function<Y extends A<FinvCyclicBound<Object>>>() x87;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function<Y extends A<FinvCyclicBound<FutureOr<Object>>>>() x88;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//                          ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function<Y extends A<FinvCyclicBound<A<Object>>>>() x89;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//                          ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function<Y extends A<FinvCyclicBound<A<FutureOr<Object>>>>>() x90;
 //^
 // [analyzer] unspecified
-//                                                                   ^
+//                          ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function<Y extends A<FinvCyclicBound<A<A<Object>>>>>() x91;
 //^
 // [analyzer] unspecified
-//                                                            ^
+//                          ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function<Y extends A<FinvCyclicBound<A<A<FutureOr<Object>>>>>>() x92;
 //^
 // [analyzer] unspecified
-//                                                                      ^
+//                          ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   void Function<Y extends A<FinvCyclicCoBound<Object>>>() x93;
 //^
 // [analyzer] unspecified
-//                                                        ^
+//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   void Function<Y extends A<FinvCyclicCoBound<FutureOr<Object>>>>() x94;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//                          ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   void Function<Y extends A<FinvCyclicCoBound<Function(Function(Object))>>>()
 //^
 // [analyzer] unspecified
-      x95;
-//    ^
+//                          ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+      x95;
   void Function<
       Y extends A<
           FinvCyclicCoBound<Function(Function(FutureOr<Object>))>>>() x96;
 //^
 // [analyzer] unspecified
-//                                                                    ^
+//        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   Finv<FinvBound<Object>> x97;
 //^
 // [analyzer] unspecified
-//                        ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   Finv<FinvBound<FutureOr<Object>>> x98;
 //^
 // [analyzer] unspecified
-//                                  ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   Finv<FinvCyclicBound<Object>> x99;
 //^
 // [analyzer] unspecified
-//                              ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   Finv<FinvCyclicBound<FutureOr<Object>>> x100;
 //^
 // [analyzer] unspecified
-//                                        ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   Finv<FinvCyclicBound<A<Object>>> x101;
 //^
 // [analyzer] unspecified
-//                                 ^
+//     ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   Finv<FinvCyclicBound<A<FutureOr<Object>>>> x102;
 //^
 // [analyzer] unspecified
-//                                           ^
+//     ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   Finv<FinvCyclicBound<A<A<Object>>>> x103;
 //^
 // [analyzer] unspecified
-//                                    ^
+//     ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   Finv<FinvCyclicBound<A<A<FutureOr<Object>>>>> x104;
 //^
 // [analyzer] unspecified
-//                                              ^
+//     ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   Finv<FinvCyclicCoBound<Object>> x105;
 //^
 // [analyzer] unspecified
-//                                ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   Finv<FinvCyclicCoBound<FutureOr<Object>>> x106;
 //^
 // [analyzer] unspecified
-//                                          ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   Finv<FinvCyclicCoBound<Function(Function(Object))>> x107;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   Finv<FinvCyclicCoBound<Function(Function(FutureOr<Object>))>> x108;
 //^
 // [analyzer] unspecified
-//                                                              ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   Funu<FinvBound<Object>> x109;
 //^
 // [analyzer] unspecified
-//                        ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   Funu<FinvBound<FutureOr<Object>>> x110;
 //^
 // [analyzer] unspecified
-//                                  ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
   Funu<FinvCyclicBound<Object>> x111;
 //^
 // [analyzer] unspecified
-//                              ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   Funu<FinvCyclicBound<FutureOr<Object>>> x112;
 //^
 // [analyzer] unspecified
-//                                        ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   Funu<FinvCyclicBound<A<Object>>> x113;
 //^
 // [analyzer] unspecified
-//                                 ^
+//     ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   Funu<FinvCyclicBound<A<FutureOr<Object>>>> x114;
 //^
 // [analyzer] unspecified
-//                                           ^
+//     ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   Funu<FinvCyclicBound<A<A<Object>>>> x115;
 //^
 // [analyzer] unspecified
-//                                    ^
+//     ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   Funu<FinvCyclicBound<A<A<FutureOr<Object>>>>> x116;
 //^
 // [analyzer] unspecified
-//                                              ^
+//     ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
   Funu<FinvCyclicCoBound<Object>> x117;
 //^
 // [analyzer] unspecified
-//                                ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   Funu<FinvCyclicCoBound<FutureOr<Object>>> x118;
 //^
 // [analyzer] unspecified
-//                                          ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   Funu<FinvCyclicCoBound<Function(Function(Object))>> x119;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
   Funu<FinvCyclicCoBound<Function(Function(FutureOr<Object>))>> x120;
 //^
 // [analyzer] unspecified
-//                                                              ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
 }
 
@@ -2498,612 +2402,588 @@
   FunuBound<Object> x1;
 //^
 // [analyzer] unspecified
-//                  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   FunuBound<FutureOr<Object>> x2;
 //^
 // [analyzer] unspecified
-//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   FunuCyclicBound<Object> x3;
 //^
 // [analyzer] unspecified
-//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   FunuCyclicBound<FutureOr<Object>> x4;
 //^
 // [analyzer] unspecified
-//                                  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   FunuCyclicBound<A<Object>> x5;
 //^
 // [analyzer] unspecified
-//                           ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   FunuCyclicBound<A<FutureOr<Object>>> x6;
 //^
 // [analyzer] unspecified
-//                                     ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   FunuCyclicBound<A<A<Object>>> x7;
 //^
 // [analyzer] unspecified
-//                              ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   FunuCyclicBound<A<A<FutureOr<Object>>>> x8;
 //^
 // [analyzer] unspecified
-//                                        ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   FunuCyclicCoBound<Object> x9;
 //^
 // [analyzer] unspecified
-//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   FunuCyclicCoBound<FutureOr<Object>> x10;
 //^
 // [analyzer] unspecified
-//                                    ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   FunuCyclicCoBound<Function(Function(Object))> x13;
 //^
 // [analyzer] unspecified
-//                                              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   FunuCyclicCoBound<Function(Function(FutureOr<Object>))> x14;
 //^
 // [analyzer] unspecified
-//                                                        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
 
   // --- Same non-super-bounded types in a context.
   A<FunuBound<Object>> x19;
 //^
 // [analyzer] unspecified
-//                     ^
+//  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   A<FunuBound<FutureOr<Object>>> x20;
 //^
 // [analyzer] unspecified
-//                               ^
+//  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   A<FunuCyclicBound<Object>> x21;
 //^
 // [analyzer] unspecified
-//                           ^
+//  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   A<FunuCyclicBound<FutureOr<Object>>> x22;
 //^
 // [analyzer] unspecified
-//                                     ^
+//  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   A<FunuCyclicBound<A<Object>>> x23;
 //^
 // [analyzer] unspecified
-//                              ^
+//  ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   A<FunuCyclicBound<A<FutureOr<Object>>>> x24;
 //^
 // [analyzer] unspecified
-//                                        ^
+//  ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   A<FunuCyclicBound<A<A<Object>>>> x25;
 //^
 // [analyzer] unspecified
-//                                 ^
+//  ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   A<FunuCyclicBound<A<A<FutureOr<Object>>>>> x26;
 //^
 // [analyzer] unspecified
-//                                           ^
+//  ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   A<FunuCyclicCoBound<Object>> x27;
 //^
 // [analyzer] unspecified
-//                             ^
+//  ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   A<FunuCyclicCoBound<FutureOr<Object>>> x28;
 //^
 // [analyzer] unspecified
-//                                       ^
+//  ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   A<FunuCyclicCoBound<Function(Function(Object))>> x31;
 //^
 // [analyzer] unspecified
-//                                                 ^
+//  ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   A<FunuCyclicCoBound<Function(Function(FutureOr<Object>))>> x32;
 //^
 // [analyzer] unspecified
-//                                                           ^
+//  ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   FunuBound<Object> Function() x37;
 //^
 // [analyzer] unspecified
-//                             ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   FunuBound<FutureOr<Object>> Function() x38;
 //^
 // [analyzer] unspecified
-//                                       ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   FunuCyclicBound<Object> Function() x39;
 //^
 // [analyzer] unspecified
-//                                   ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   FunuCyclicBound<FutureOr<Object>> Function() x40;
 //^
 // [analyzer] unspecified
-//                                             ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   FunuCyclicBound<A<Object>> Function() x41;
 //^
 // [analyzer] unspecified
-//                                      ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   FunuCyclicBound<A<FutureOr<Object>>> Function() x42;
 //^
 // [analyzer] unspecified
-//                                                ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   FunuCyclicBound<A<A<Object>>> Function() x43;
 //^
 // [analyzer] unspecified
-//                                         ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   FunuCyclicBound<A<A<FutureOr<Object>>>> Function() x44;
 //^
 // [analyzer] unspecified
-//                                                   ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   FunuCyclicCoBound<Object> Function() x45;
 //^
 // [analyzer] unspecified
-//                                     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   FunuCyclicCoBound<FutureOr<Object>> Function() x46;
 //^
 // [analyzer] unspecified
-//                                               ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   FunuCyclicCoBound<Function(Function(Object))> Function() x49;
 //^
 // [analyzer] unspecified
-//                                                         ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   FunuCyclicCoBound<Function(Function(FutureOr<Object>))> Function() x50;
 //^
 // [analyzer] unspecified
-//                                                                   ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   void Function(void Function(FunuBound<Object>)) x55;
 //^
 // [analyzer] unspecified
-//                                                ^
+//                            ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   void Function(void Function(FunuBound<FutureOr<Object>>)) x56;
 //^
 // [analyzer] unspecified
-//                                                          ^
+//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   void Function(void Function(FunuCyclicBound<Object>)) x57;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                            ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function(void Function(FunuCyclicBound<FutureOr<Object>>)) x58;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function(void Function(FunuCyclicBound<A<Object>>)) x59;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//                            ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function(void Function(FunuCyclicBound<A<FutureOr<Object>>>)) x60;
 //^
 // [analyzer] unspecified
-//                                                                   ^
+//                            ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function(void Function(FunuCyclicBound<A<A<Object>>>)) x61;
 //^
 // [analyzer] unspecified
-//                                                            ^
+//                            ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function(void Function(FunuCyclicBound<A<A<FutureOr<Object>>>>)) x62;
 //^
 // [analyzer] unspecified
-//                                                                      ^
+//                            ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function(void Function(FunuCyclicCoBound<Object>)) x63;
 //^
 // [analyzer] unspecified
-//                                                        ^
+//                            ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   void Function(void Function(FunuCyclicCoBound<FutureOr<Object>>)) x64;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//                            ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   void Function(void Function(FunuCyclicCoBound<Function(Function(Object))>))
 //^
 // [analyzer] unspecified
-      x67;
-//    ^
+//                            ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+      x67;
   void Function(
       void Function(
           FunuCyclicCoBound<Function(Function(FutureOr<Object>))>)) x68;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   void Function(FunuBound<Object>) x73;
 //^
 // [analyzer] unspecified
-//                                 ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   void Function(FunuBound<FutureOr<Object>>) x74;
 //^
 // [analyzer] unspecified
-//                                           ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   void Function(FunuCyclicBound<Object>) x75;
 //^
 // [analyzer] unspecified
-//                                       ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function(FunuCyclicBound<FutureOr<Object>>) x76;
 //^
 // [analyzer] unspecified
-//                                                 ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function(FunuCyclicBound<A<Object>>) x77;
 //^
 // [analyzer] unspecified
-//                                          ^
+//              ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function(FunuCyclicBound<A<FutureOr<Object>>>) x78;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//              ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function(FunuCyclicBound<A<A<Object>>>) x79;
 //^
 // [analyzer] unspecified
-//                                             ^
+//              ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function(FunuCyclicBound<A<A<FutureOr<Object>>>>) x80;
 //^
 // [analyzer] unspecified
-//                                                       ^
+//              ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function(FunuCyclicCoBound<Object>) x81;
 //^
 // [analyzer] unspecified
-//                                         ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   void Function(FunuCyclicCoBound<FutureOr<Object>>) x82;
 //^
 // [analyzer] unspecified
-//                                                   ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   void Function(FunuCyclicCoBound<Function(Function(Object))>) x85;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   void Function(FunuCyclicCoBound<Function(Function(FutureOr<Object>))>) x86;
 //^
 // [analyzer] unspecified
-//                                                                       ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   void Function(FunuBound<Object>) Function() x91;
 //^
 // [analyzer] unspecified
-//                                            ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   void Function(FunuBound<FutureOr<Object>>) Function() x92;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   void Function(FunuCyclicBound<Object>) Function() x93;
 //^
 // [analyzer] unspecified
-//                                                  ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function(FunuCyclicBound<FutureOr<Object>>) Function() x94;
 //^
 // [analyzer] unspecified
-//                                                            ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function(FunuCyclicBound<A<Object>>) Function() x95;
 //^
 // [analyzer] unspecified
-//                                                     ^
+//              ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function(FunuCyclicBound<A<FutureOr<Object>>>) Function() x96;
 //^
 // [analyzer] unspecified
-//                                                               ^
+//              ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function(FunuCyclicBound<A<A<Object>>>) Function() x97;
 //^
 // [analyzer] unspecified
-//                                                        ^
+//              ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function(FunuCyclicBound<A<A<FutureOr<Object>>>>) Function() x98;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//              ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function(FunuCyclicCoBound<Object>) Function() x99;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//              ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   void Function(FunuCyclicCoBound<FutureOr<Object>>) Function() x100;
 //^
 // [analyzer] unspecified
-//                                                              ^
+//              ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   void Function(FunuCyclicCoBound<Function(Function(Object))>) Function() x103;
 //^
 // [analyzer] unspecified
-//                                                                        ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   void Function(FunuCyclicCoBound<Function(Function(FutureOr<Object>))>)
 //^
 // [analyzer] unspecified
-      Function() x104;
-//               ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+      Function() x104;
   void Function<Y extends FunuBound<Object>>() x109;
 //^
 // [analyzer] unspecified
-//                                             ^
+//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   void Function<Y extends FunuBound<FutureOr<Object>>>() x110;
 //^
 // [analyzer] unspecified
-//                                                       ^
+//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   void Function<Y extends FunuCyclicBound<Object>>() x111;
 //^
 // [analyzer] unspecified
-//                                                   ^
+//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function<Y extends FunuCyclicBound<FutureOr<Object>>>() x112;
 //^
 // [analyzer] unspecified
-//                                                             ^
+//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function<Y extends FunuCyclicBound<A<Object>>>() x113;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                        ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function<Y extends FunuCyclicBound<A<FutureOr<Object>>>>() x114;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//                        ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function<Y extends FunuCyclicBound<A<A<Object>>>>() x115;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//                        ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function<Y extends FunuCyclicBound<A<A<FutureOr<Object>>>>>() x116;
 //^
 // [analyzer] unspecified
-//                                                                   ^
+//                        ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function<Y extends FunuCyclicCoBound<Object>>() x117;
 //^
 // [analyzer] unspecified
-//                                                     ^
+//                        ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   void Function<Y extends FunuCyclicCoBound<FutureOr<Object>>>() x118;
 //^
 // [analyzer] unspecified
-//                                                               ^
+//                        ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   void Function<Y extends FunuCyclicCoBound<Function(Function(Object))>>() x121;
 //^
 // [analyzer] unspecified
-//                                                                         ^
+//                        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   void Function<
       Y extends FunuCyclicCoBound<Function(Function(FutureOr<Object>))>>() x122;
 //^
 // [analyzer] unspecified
-//                                                                         ^
+//              ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   void Function<Y extends A<FunuBound<Object>>>() x127;
 //^
 // [analyzer] unspecified
-//                                                ^
+//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   void Function<Y extends A<FunuBound<FutureOr<Object>>>>() x128;
 //^
 // [analyzer] unspecified
-//                                                          ^
+//                          ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   void Function<Y extends A<FunuCyclicBound<Object>>>() x129;
 //^
 // [analyzer] unspecified
-//                                                      ^
+//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function<Y extends A<FunuCyclicBound<FutureOr<Object>>>>() x130;
 //^
 // [analyzer] unspecified
-//                                                                ^
+//                          ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function<Y extends A<FunuCyclicBound<A<Object>>>>() x131;
 //^
 // [analyzer] unspecified
-//                                                         ^
+//                          ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function<Y extends A<FunuCyclicBound<A<FutureOr<Object>>>>>() x132;
 //^
 // [analyzer] unspecified
-//                                                                   ^
+//                          ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function<Y extends A<FunuCyclicBound<A<A<Object>>>>>() x133;
 //^
 // [analyzer] unspecified
-//                                                            ^
+//                          ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function<Y extends A<FunuCyclicBound<A<A<FutureOr<Object>>>>>>() x134;
 //^
 // [analyzer] unspecified
-//                                                                      ^
+//                          ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   void Function<Y extends A<FunuCyclicCoBound<Object>>>() x135;
 //^
 // [analyzer] unspecified
-//                                                        ^
+//                          ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   void Function<Y extends A<FunuCyclicCoBound<FutureOr<Object>>>>() x136;
 //^
 // [analyzer] unspecified
-//                                                                  ^
+//                          ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   void Function<Y extends A<FunuCyclicCoBound<Function(Function(Object))>>>()
 //^
 // [analyzer] unspecified
-      x139;
-//    ^
+//                          ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+      x139;
   void Function<
       Y extends A<
           FunuCyclicCoBound<Function(Function(FutureOr<Object>))>>>() x140;
 //^
 // [analyzer] unspecified
-//                                                                    ^
+//        ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   Finv<FunuBound<Object>> x145;
 //^
 // [analyzer] unspecified
-//                        ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   Finv<FunuBound<FutureOr<Object>>> x146;
 //^
 // [analyzer] unspecified
-//                                  ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   Finv<FunuCyclicBound<Object>> x147;
 //^
 // [analyzer] unspecified
-//                              ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   Finv<FunuCyclicBound<FutureOr<Object>>> x148;
 //^
 // [analyzer] unspecified
-//                                        ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   Finv<FunuCyclicBound<A<Object>>> x149;
 //^
 // [analyzer] unspecified
-//                                 ^
+//     ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   Finv<FunuCyclicBound<A<FutureOr<Object>>>> x150;
 //^
 // [analyzer] unspecified
-//                                           ^
+//     ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   Finv<FunuCyclicBound<A<A<Object>>>> x151;
 //^
 // [analyzer] unspecified
-//                                    ^
+//     ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   Finv<FunuCyclicBound<A<A<FutureOr<Object>>>>> x152;
 //^
 // [analyzer] unspecified
-//                                              ^
+//     ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   Finv<FunuCyclicCoBound<Object>> x153;
 //^
 // [analyzer] unspecified
-//                                ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   Finv<FunuCyclicCoBound<FutureOr<Object>>> x154;
 //^
 // [analyzer] unspecified
-//                                          ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   Finv<FunuCyclicCoBound<Function(Function(Object))>> x157;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   Finv<FunuCyclicCoBound<Function(Function(FutureOr<Object>))>> x158;
 //^
 // [analyzer] unspecified
-//                                                              ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   Funu<FunuBound<Object>> x163;
 //^
 // [analyzer] unspecified
-//                        ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   Funu<FunuBound<FutureOr<Object>>> x164;
 //^
 // [analyzer] unspecified
-//                                  ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
   Funu<FunuCyclicBound<Object>> x165;
 //^
 // [analyzer] unspecified
-//                              ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   Funu<FunuCyclicBound<FutureOr<Object>>> x166;
 //^
 // [analyzer] unspecified
-//                                        ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   Funu<FunuCyclicBound<A<Object>>> x167;
 //^
 // [analyzer] unspecified
-//                                 ^
+//     ^
 // [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   Funu<FunuCyclicBound<A<FutureOr<Object>>>> x168;
 //^
 // [analyzer] unspecified
-//                                           ^
+//     ^
 // [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   Funu<FunuCyclicBound<A<A<Object>>>> x169;
 //^
 // [analyzer] unspecified
-//                                    ^
+//     ^
 // [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   Funu<FunuCyclicBound<A<A<FutureOr<Object>>>>> x170;
 //^
 // [analyzer] unspecified
-//                                              ^
+//     ^
 // [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
   Funu<FunuCyclicCoBound<Object>> x171;
 //^
 // [analyzer] unspecified
-//                                ^
+//     ^
 // [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   Funu<FunuCyclicCoBound<FutureOr<Object>>> x172;
 //^
 // [analyzer] unspecified
-//                                          ^
+//     ^
 // [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   Funu<FunuCyclicCoBound<Function(Function(Object))>> x175;
 //^
 // [analyzer] unspecified
-//                                                    ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   Funu<FunuCyclicCoBound<Function(Function(FutureOr<Object>))>> x176;
 //^
 // [analyzer] unspecified
-//                                                              ^
+//     ^
 // [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
 }
 
@@ -3111,12 +2991,10 @@
   FunuCyclicCoBound<Function(Never)> x1;
 //^
 // [analyzer] unspecified
-//                                   ^
 // [cfe] Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
   FunuCyclicCoBound<Function(N)> x2;
 //^
 // [analyzer] unspecified
-//                               ^
 // [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
 }
 
@@ -3133,8 +3011,6 @@
   void f(AinvCyclicCoBound source) {
 //       ^
 // [analyzer] unspecified
-//                         ^
-// [cfe] Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
 // [cfe] Inferred type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
 
     // We do not use `source` in further tests, because the type of `source`
@@ -3146,9 +3022,8 @@
   void f(B<AinvCyclicCoBound> source) {
 //       ^
 // [analyzer] unspecified
-//                            ^
-// [cfe] Type argument 'AinvCyclicCoBound<dynamic Function(Never) Function(dynamic Function(Never)), dynamic Function(Never)>' doesn't conform to the bound 'B<X>' of the type variable 'X' on 'B'.
-// [cfe] Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+// [cfe] Type argument 'AinvCyclicCoBound<FinvCyclicCoBound<dynamic Function(Never)>, dynamic Function(Never)>' doesn't conform to the bound 'B<X>' of the type variable 'X' on 'B'.
+//         ^
 // [cfe] Inferred type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
 
     // We do not use `source` in further tests, because the type of `source`
diff --git a/tests/language/generic_methods/generic_function_result_test.dart b/tests/language/generic_methods/generic_function_result_test.dart
index 569c2f9..910c9b4 100644
--- a/tests/language/generic_methods/generic_function_result_test.dart
+++ b/tests/language/generic_methods/generic_function_result_test.dart
@@ -14,17 +14,15 @@
           (int i, int j) => i + j;
 
 List<int Function<T>(S, int)> bar<S extends int>() {
+// [error column 1]
+// [cfe] A generic function type can't be used as a type argument.
 //   ^^^^^^^^^^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT
-//                                              ^
-// [cfe] A generic function type can't be used as a type argument.
   return <int Function<T>(S, int)>[foo, foo];
 }
 
 void main() {
   var list = bar<int>();
-  //  ^
-  // [cfe] Generic function type 'int Function<T>(int, int)' inferred as a type argument.
   print(list[0].runtimeType);
   Expect.equals(123, list[1](100, 23));
 }
diff --git a/tests/language/malbounded/instantiation_test.dart b/tests/language/malbounded/instantiation_test.dart
index 2f397b2..d181b51 100644
--- a/tests/language/malbounded/instantiation_test.dart
+++ b/tests/language/malbounded/instantiation_test.dart
@@ -4,13 +4,13 @@
 
 class Super<T extends num> {}
 class Malbounded1 implements Super<String> {}
-//    ^
-// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded1'.
+//                           ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
 //                                 ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
 class Malbounded2 extends Super<String> {}
-//    ^
-// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded2'.
+//                        ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
 //                              ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
 
diff --git a/tests/language/malbounded/type_cast_test.dart b/tests/language/malbounded/type_cast_test.dart
index 2c56e68..e72cb3d 100644
--- a/tests/language/malbounded/type_cast_test.dart
+++ b/tests/language/malbounded/type_cast_test.dart
@@ -6,15 +6,15 @@
 
 class Super<T extends num> {}
 class Malbounded1 implements Super
-//    ^
-// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded1'.
+//                           ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
   <String>
 // ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
   {}
 class Malbounded2 extends Super
-//    ^
-// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded2'.
+//                        ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
   <String>
 // ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
@@ -27,7 +27,7 @@
   Expect.throwsTypeError(() => s as Malbounded1);
   Expect.throwsTypeError(() => s as Malbounded2);
   s as Super
-  //^
+  //   ^
   // [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
       <String>
 //     ^^^^^^
diff --git a/tests/language/malbounded/type_literal_test.dart b/tests/language/malbounded/type_literal_test.dart
index 2369b69..a356615 100644
--- a/tests/language/malbounded/type_literal_test.dart
+++ b/tests/language/malbounded/type_literal_test.dart
@@ -7,8 +7,8 @@
 class Super<T extends num> {}
 
 class Malbounded extends Super
-//    ^
-// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded'.
+//                       ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
     <String>
 //   ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
diff --git a/tests/language/malbounded/type_test2_test.dart b/tests/language/malbounded/type_test2_test.dart
index 8eec3aa..3ee3e90 100644
--- a/tests/language/malbounded/type_test2_test.dart
+++ b/tests/language/malbounded/type_test2_test.dart
@@ -9,7 +9,7 @@
 class B<T> {
   test() {
     new A() is A
-    //      ^
+    //         ^
     // [cfe] Type argument 'T' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
         <T>
 //       ^
diff --git a/tests/language/malbounded/type_test_test.dart b/tests/language/malbounded/type_test_test.dart
index 70fc939..c0c61ff 100644
--- a/tests/language/malbounded/type_test_test.dart
+++ b/tests/language/malbounded/type_test_test.dart
@@ -7,16 +7,16 @@
 class Super<T extends num> {}
 
 class Malbounded1 implements Super
-//    ^
-// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded1'.
+//                           ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
     <String>
 //   ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
     {}
 
 class Malbounded2 extends Super
-//    ^
-// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded2'.
+//                        ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
     <String>
 //   ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
@@ -29,7 +29,7 @@
   Expect.isFalse(s is Malbounded1);
   Expect.isFalse(s is Malbounded2);
   Expect.isTrue(s is Super
-  //              ^
+  //                 ^
   // [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
       <String>
 //     ^^^^^^
diff --git a/tests/language/regress/regress18628_2_test.dart b/tests/language/regress/regress18628_2_test.dart
index 622b724..11a1a44 100644
--- a/tests/language/regress/regress18628_2_test.dart
+++ b/tests/language/regress/regress18628_2_test.dart
@@ -13,8 +13,8 @@
 // This line is supposed to cause the warning; the other lines are
 // marked because they don't make sense when [Y] is not defined.
 class Y<U> extends X<U> {}
-//    ^
-// [cfe] Type argument 'U' doesn't conform to the bound 'Type' of the type variable 'T' on 'X' in the supertype 'X' of class 'Y'.
+//                 ^
+// [cfe] Type argument 'U' doesn't conform to the bound 'Type' of the type variable 'T' on 'X'.
 //                   ^
 // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
 
diff --git a/tests/language/type_variable/bounds3_test.dart b/tests/language/type_variable/bounds3_test.dart
index 471112b..c0482d6 100644
--- a/tests/language/type_variable/bounds3_test.dart
+++ b/tests/language/type_variable/bounds3_test.dart
@@ -9,7 +9,7 @@
 class B<X, Y> {
   foo(x) {
     return x is A<X>;
-    //       ^
+    //          ^
     // [cfe] Type argument 'X' doesn't conform to the bound 'int' of the type variable 'K' on 'A'.
     //            ^
     // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
diff --git a/tests/language/type_variable/bounds4_test.dart b/tests/language/type_variable/bounds4_test.dart
index 9908b9c..e4d5223 100644
--- a/tests/language/type_variable/bounds4_test.dart
+++ b/tests/language/type_variable/bounds4_test.dart
@@ -10,8 +10,8 @@
     > {}
 
 class B<T> implements A<T> {}
-//    ^
-// [cfe] Type argument 'T' doesn't conform to the bound 'num' of the type variable 'T' on 'A' in the supertype 'A' of class 'B'.
+//                    ^
+// [cfe] Type argument 'T' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 //                      ^
 // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
 
diff --git a/tests/language/variance/variance_in_subtyping_error_test.dart b/tests/language/variance/variance_in_subtyping_error_test.dart
index 4271fd0..1230d2b 100644
--- a/tests/language/variance/variance_in_subtyping_error_test.dart
+++ b/tests/language/variance/variance_in_subtyping_error_test.dart
@@ -41,10 +41,10 @@
 
 class D {
   C<Contravariant<Lower>> method1() {
+//^
+// [cfe] Type argument 'Contravariant<Lower>' doesn't conform to the bound 'Contravariant<Middle>' of the type variable 'T' on 'C'.
   //^^^^^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-  //                             ^
-  // [cfe] Type argument 'Contravariant<Lower>' doesn't conform to the bound 'Contravariant<Middle>' of the type variable 'T' on 'C' in the return type.
     return C<Contravariant<Lower>>();
     //     ^
     // [cfe] Type argument 'Contravariant<Lower>' doesn't conform to the bound 'Contravariant<Middle>' of the type variable 'T' on 'C'.
@@ -57,10 +57,10 @@
 
 main() {
   C<Contravariant<Lower>> c = new C<Contravariant<Lower>>();
+//^
+// [cfe] Type argument 'Contravariant<Lower>' doesn't conform to the bound 'Contravariant<Middle>' of the type variable 'T' on 'C'.
   //^^^^^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-  //                      ^
-  // [cfe] Type argument 'Contravariant<Lower>' doesn't conform to the bound 'Contravariant<Middle>' of the type variable 'T' on 'C'.
   //                              ^
   // [cfe] Type argument 'Contravariant<Lower>' doesn't conform to the bound 'Contravariant<Middle>' of the type variable 'T' on 'C'.
   //                                ^^^^^^^^^^^^^^^^^^^^
diff --git a/tests/language/variance/variance_inout_subtyping_error_test.dart b/tests/language/variance/variance_inout_subtyping_error_test.dart
index d994e6c..51e9052 100644
--- a/tests/language/variance/variance_inout_subtyping_error_test.dart
+++ b/tests/language/variance/variance_inout_subtyping_error_test.dart
@@ -58,10 +58,10 @@
 
 class E {
   D<Invariant<Upper>> method1() {
+//^
+// [cfe] Type argument 'Invariant<Upper>' doesn't conform to the bound 'Invariant<Middle>' of the type variable 'T' on 'D'.
   //^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-  //                         ^
-  // [cfe] Type argument 'Invariant<Upper>' doesn't conform to the bound 'Invariant<Middle>' of the type variable 'T' on 'D' in the return type.
     return D<Invariant<Upper>>();
     //     ^
     // [cfe] Type argument 'Invariant<Upper>' doesn't conform to the bound 'Invariant<Middle>' of the type variable 'T' on 'D'.
@@ -70,10 +70,10 @@
   }
 
   D<Invariant<Lower>> method2() {
+//^
+// [cfe] Type argument 'Invariant<Lower>' doesn't conform to the bound 'Invariant<Middle>' of the type variable 'T' on 'D'.
   //^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-  //                         ^
-  // [cfe] Type argument 'Invariant<Lower>' doesn't conform to the bound 'Invariant<Middle>' of the type variable 'T' on 'D' in the return type.
     return D<Invariant<Lower>>();
     //     ^
     // [cfe] Type argument 'Invariant<Lower>' doesn't conform to the bound 'Invariant<Middle>' of the type variable 'T' on 'D'.
@@ -86,19 +86,19 @@
 
 main() {
   D<Invariant<Upper>> dUpper = new D<Invariant<Upper>>();
+//^
+// [cfe] Type argument 'Invariant<Upper>' doesn't conform to the bound 'Invariant<Middle>' of the type variable 'T' on 'D'.
   //^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-  //                  ^
-  // [cfe] Type argument 'Invariant<Upper>' doesn't conform to the bound 'Invariant<Middle>' of the type variable 'T' on 'D'.
   //                               ^
   // [cfe] Type argument 'Invariant<Upper>' doesn't conform to the bound 'Invariant<Middle>' of the type variable 'T' on 'D'.
   //                                 ^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
   D<Invariant<Lower>> dLower = new D<Invariant<Lower>>();
+//^
+// [cfe] Type argument 'Invariant<Lower>' doesn't conform to the bound 'Invariant<Middle>' of the type variable 'T' on 'D'.
   //^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-  //                  ^
-  // [cfe] Type argument 'Invariant<Lower>' doesn't conform to the bound 'Invariant<Middle>' of the type variable 'T' on 'D'.
   //                               ^
   // [cfe] Type argument 'Invariant<Lower>' doesn't conform to the bound 'Invariant<Middle>' of the type variable 'T' on 'D'.
   //                                 ^^^^^^^^^^^^^^^^
diff --git a/tests/language/variance/variance_out_subtyping_error_test.dart b/tests/language/variance/variance_out_subtyping_error_test.dart
index 2ddcd3e..ecce279 100644
--- a/tests/language/variance/variance_out_subtyping_error_test.dart
+++ b/tests/language/variance/variance_out_subtyping_error_test.dart
@@ -41,10 +41,10 @@
 
 class D {
   C<Covariant<Upper>> method1() {
+//^
+// [cfe] Type argument 'Covariant<Upper>' doesn't conform to the bound 'Covariant<Middle>' of the type variable 'T' on 'C'.
   //^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-  //                         ^
-  // [cfe] Type argument 'Covariant<Upper>' doesn't conform to the bound 'Covariant<Middle>' of the type variable 'T' on 'C' in the return type.
     return C<Covariant<Upper>>();
     //     ^
     // [cfe] Type argument 'Covariant<Upper>' doesn't conform to the bound 'Covariant<Middle>' of the type variable 'T' on 'C'.
@@ -57,10 +57,10 @@
 
 main() {
   C<Covariant<Upper>> c = new C<Covariant<Upper>>();
+//^
+// [cfe] Type argument 'Covariant<Upper>' doesn't conform to the bound 'Covariant<Middle>' of the type variable 'T' on 'C'.
   //^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-  //                  ^
-  // [cfe] Type argument 'Covariant<Upper>' doesn't conform to the bound 'Covariant<Middle>' of the type variable 'T' on 'C'.
   //                          ^
   // [cfe] Type argument 'Covariant<Upper>' doesn't conform to the bound 'Covariant<Middle>' of the type variable 'T' on 'C'.
   //                            ^^^^^^^^^^^^^^^^
diff --git a/tests/language_2/generic/f_bounded_quantification_test.dart b/tests/language_2/generic/f_bounded_quantification_test.dart
index 055e05a..7ff3b40 100644
--- a/tests/language_2/generic/f_bounded_quantification_test.dart
+++ b/tests/language_2/generic/f_bounded_quantification_test.dart
@@ -19,10 +19,10 @@
 main() {
   FBound<Bar> fb = new FBound<Bar>();
   FBound<SubBar> fsb = new FBound<SubBar>();
+//^
+// [cfe] Type argument 'SubBar' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
   //     ^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-  //             ^
-  // [cfe] Type argument 'SubBar' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
   //                       ^
   // [cfe] Type argument 'SubBar' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
   //                              ^^^^^^
@@ -30,10 +30,10 @@
 
   FBound<Baz<Bar>> fbb = new FBound<Baz<Bar>>();
   FBound<SubBaz<Bar>> fsbb = new FBound<SubBaz<Bar>>();
+//^
+// [cfe] Type argument 'SubBaz<Bar>' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
   //     ^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-  //                  ^
-  // [cfe] Type argument 'SubBaz<Bar>' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
   //                             ^
   // [cfe] Type argument 'SubBaz<Bar>' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
   //                                    ^^^^^^^^^^^
diff --git a/tests/language_2/generic/function_type_as_type_argument_test.dart b/tests/language_2/generic/function_type_as_type_argument_test.dart
index 130d1b2..6dcc8f7 100644
--- a/tests/language_2/generic/function_type_as_type_argument_test.dart
+++ b/tests/language_2/generic/function_type_as_type_argument_test.dart
@@ -18,17 +18,16 @@
 
   // Generic function types are not allowed as type arguments.
   List<T Function<T>(T)> typedList = <T Function<T>(T)>[foo];
-  //   ^^^^^^^^^^^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT
-  //                     ^
-  // [cfe] A generic function type can't be used as a type argument.
+//^
+// [cfe] A generic function type can't be used as a type argument.
+//     ^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT
 
   // Type inference must also give an error.
   var inferredList = [foo];
-  //  ^
-  // [cfe] Generic function type 'T Function<T>(T)' inferred as a type argument.
   //                 ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
+  // [cfe] Generic function type 'T Function<T>(T)' inferred as a type argument.
 
   // No error if illegal type cannot be inferred.
   var dynamicList = <dynamic>[foo];
diff --git a/tests/language_2/generic_methods/generic_function_result_test.dart b/tests/language_2/generic_methods/generic_function_result_test.dart
index d291d2d..d50dcb5 100644
--- a/tests/language_2/generic_methods/generic_function_result_test.dart
+++ b/tests/language_2/generic_methods/generic_function_result_test.dart
@@ -16,17 +16,15 @@
           (int i, int j) => i + j;
 
 List<int Function<T>(S, int)> bar<S extends int>() {
+// [error column 1]
+// [cfe] A generic function type can't be used as a type argument.
 //   ^^^^^^^^^^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT
-//                                              ^
-// [cfe] A generic function type can't be used as a type argument.
   return <int Function<T>(S, int)>[foo, foo];
 }
 
 void main() {
   var list = bar<int>();
-  //  ^
-  // [cfe] Generic function type 'int Function<T>(int, int)' inferred as a type argument.
   print(list[0].runtimeType);
   Expect.equals(123, list[1](100, 23));
 }
diff --git a/tests/language_2/malbounded/instantiation_test.dart b/tests/language_2/malbounded/instantiation_test.dart
index 9f52427..b3f0bfa 100644
--- a/tests/language_2/malbounded/instantiation_test.dart
+++ b/tests/language_2/malbounded/instantiation_test.dart
@@ -6,13 +6,13 @@
 
 class Super<T extends num> {}
 class Malbounded1 implements Super<String> {}
-//    ^
-// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded1'.
+//                           ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
 //                                 ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
 class Malbounded2 extends Super<String> {}
-//    ^
-// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded2'.
+//                        ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
 //                              ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
 
diff --git a/tests/language_2/malbounded/type_cast_test.dart b/tests/language_2/malbounded/type_cast_test.dart
index 476c63e..7e98c55 100644
--- a/tests/language_2/malbounded/type_cast_test.dart
+++ b/tests/language_2/malbounded/type_cast_test.dart
@@ -8,15 +8,15 @@
 
 class Super<T extends num> {}
 class Malbounded1 implements Super
-//    ^
-// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded1'.
+//                           ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
   <String>
 // ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
   {}
 class Malbounded2 extends Super
-//    ^
-// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded2'.
+//                        ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
   <String>
 // ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
@@ -29,7 +29,7 @@
   Expect.throwsTypeError(() => s as Malbounded1);
   Expect.throwsTypeError(() => s as Malbounded2);
   s as Super
-  //^
+  //   ^
   // [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
       <String>
 //     ^^^^^^
diff --git a/tests/language_2/malbounded/type_literal_test.dart b/tests/language_2/malbounded/type_literal_test.dart
index ebfef5b..eb4a34c 100644
--- a/tests/language_2/malbounded/type_literal_test.dart
+++ b/tests/language_2/malbounded/type_literal_test.dart
@@ -9,8 +9,8 @@
 class Super<T extends num> {}
 
 class Malbounded extends Super
-//    ^
-// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded'.
+//                       ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
     <String>
 //   ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
diff --git a/tests/language_2/malbounded/type_test2_test.dart b/tests/language_2/malbounded/type_test2_test.dart
index 542b7f6..0e4cb69 100644
--- a/tests/language_2/malbounded/type_test2_test.dart
+++ b/tests/language_2/malbounded/type_test2_test.dart
@@ -11,7 +11,7 @@
 class B<T> {
   test() {
     new A() is A
-    //      ^
+    //         ^
     // [cfe] Type argument 'T' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
         <T>
 //       ^
diff --git a/tests/language_2/malbounded/type_test_test.dart b/tests/language_2/malbounded/type_test_test.dart
index b5434fd..c312857 100644
--- a/tests/language_2/malbounded/type_test_test.dart
+++ b/tests/language_2/malbounded/type_test_test.dart
@@ -9,16 +9,16 @@
 class Super<T extends num> {}
 
 class Malbounded1 implements Super
-//    ^
-// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded1'.
+//                           ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
     <String>
 //   ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
     {}
 
 class Malbounded2 extends Super
-//    ^
-// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded2'.
+//                        ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
     <String>
 //   ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
@@ -31,7 +31,7 @@
   Expect.isFalse(s is Malbounded1);
   Expect.isFalse(s is Malbounded2);
   Expect.isTrue(s is Super
-  //              ^
+  //                 ^
   // [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
       <String>
 //     ^^^^^^
diff --git a/tests/language_2/regress/regress18628_2_test.dart b/tests/language_2/regress/regress18628_2_test.dart
index 85d59ca..e035c81 100644
--- a/tests/language_2/regress/regress18628_2_test.dart
+++ b/tests/language_2/regress/regress18628_2_test.dart
@@ -15,8 +15,8 @@
 // This line is supposed to cause the warning; the other lines are
 // marked because they don't make sense when [Y] is not defined.
 class Y<U> extends X<U> {}
-//    ^
-// [cfe] Type argument 'U' doesn't conform to the bound 'Type' of the type variable 'T' on 'X' in the supertype 'X' of class 'Y'.
+//                 ^
+// [cfe] Type argument 'U' doesn't conform to the bound 'Type' of the type variable 'T' on 'X'.
 //                   ^
 // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
 
diff --git a/tests/language_2/type_variable/bounds3_test.dart b/tests/language_2/type_variable/bounds3_test.dart
index a56675e..7246ac7 100644
--- a/tests/language_2/type_variable/bounds3_test.dart
+++ b/tests/language_2/type_variable/bounds3_test.dart
@@ -11,7 +11,7 @@
 class B<X, Y> {
   foo(x) {
     return x is A<X>;
-    //       ^
+    //          ^
     // [cfe] Type argument 'X' doesn't conform to the bound 'int' of the type variable 'K' on 'A'.
     //            ^
     // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
diff --git a/tests/language_2/type_variable/bounds4_test.dart b/tests/language_2/type_variable/bounds4_test.dart
index 265c94f0..9fa6558 100644
--- a/tests/language_2/type_variable/bounds4_test.dart
+++ b/tests/language_2/type_variable/bounds4_test.dart
@@ -12,8 +12,8 @@
     > {}
 
 class B<T> implements A<T> {}
-//    ^
-// [cfe] Type argument 'T' doesn't conform to the bound 'num' of the type variable 'T' on 'A' in the supertype 'A' of class 'B'.
+//                    ^
+// [cfe] Type argument 'T' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
 //                      ^
 // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS