diff --git a/DEPS b/DEPS
index b13d2dc..cfd0829 100644
--- a/DEPS
+++ b/DEPS
@@ -44,7 +44,7 @@
   # co19 is a cipd package. Use update.sh in tests/co19[_2] to update these
   # hashes. It requires access to the dart-build-access group, which EngProd
   # has.
-  "co19_rev": "143ad7f74919b132951e447a547236e991d9f900",
+  "co19_rev": "73fa4da0cb5a6fec136a2ac045503770eed2b58f",
   # This line prevents conflicts when both packages are rolled simultaneously.
   "co19_2_rev": "995745937abffe9fc3a6441f9f0db27b2d706e4c",
 
diff --git a/pkg/_fe_analyzer_shared/lib/src/util/libraries_specification.dart b/pkg/_fe_analyzer_shared/lib/src/util/libraries_specification.dart
index 7bc929b..4e453145 100644
--- a/pkg/_fe_analyzer_shared/lib/src/util/libraries_specification.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/util/libraries_specification.dart
@@ -42,8 +42,8 @@
 ///   - a top level entry for each target. Keys are target names (e.g. "vm"
 ///     above), and values contain the entire specification of a target.
 ///
-///   - each target specification is a map. Today, only one key is supported on
-///     this map: "libraries".
+///   - each target specification is a map. The supported keys are "libraries"
+///     and "include".
 ///
 ///   - The "libraries" entry contains details for how each platform library is
 ///     implemented. The entry is a map, where keys are the name of the platform
@@ -79,6 +79,30 @@
 ///     Internal libraries are never supported through conditional imports and
 ///     const `fromEnvironment` expressions.
 ///
+///   - The "include" entry is a list of maps, each containing either a "path"
+///     and a "target" entry, or only a "target" entry.
+///
+///     If both "path" and "target" entries are present, the libraries
+///     specification file located at "path", relative to the location current
+///     libraries specification file is loaded, and the libraries defined
+///     in the target with the target name of the "target" entry are included in
+///     this target.
+///
+///     If only the "target" is present, the libraries in the target in the
+///     current libraries specification file with the target name of the
+///     "target" entry are included in this target.
+///
+///     The "include" mechanism support transitive inclusion but doesn't allow
+///     cyclic dependencies.
+///
+///     If the same library is defined in multiple included target
+///     specifications, the last included takes precedence. This means that
+///     if a target specification include a library and also defines it itself,
+///     the latter is used.
+///
+///     Currently it is not supported to include a subset of the libraries from
+///     an included target specifications.
+///
 ///
 /// Note: we currently have several different files that need to be updated
 /// when changing libraries, sources, and patch files:
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index 4576ec6..814b523 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -137,6 +137,14 @@
       /* charOffset = */ null,
       instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
 
+  final NamedTypeBuilder enumType = new NamedTypeBuilder(
+      "Enum",
+      const NullabilityBuilder.omitted(),
+      /* arguments = */ null,
+      /* fileUri = */ null,
+      /* charOffset = */ null,
+      instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
+
   final bool excludeSource = !CompilerContext.current.options.embedSourceText;
 
   final Map<String, String>? environmentDefines =
@@ -406,6 +414,7 @@
           link(new List<Library>.from(loader.libraries), nameRoot: nameRoot);
       computeCoreTypes();
       loader.buildClassHierarchy(sourceClassBuilders, objectClassBuilder);
+      loader.checkSupertypes(sourceClassBuilders, enumClass);
       // TODO(johnniwinther): Enable this when supported in the isolate-based
       //  macro executor.
       /*if (macroApplications != null) {
@@ -416,7 +425,6 @@
       loader.computeShowHideElements();
       loader.installTypedefTearOffs();
       loader.performTopLevelInference(sourceClassBuilders);
-      loader.checkSupertypes(sourceClassBuilders);
       loader.checkOverrides(sourceClassBuilders);
       loader.checkAbstractMembers(sourceClassBuilders);
       loader.addNoSuchMethodForwarders(sourceClassBuilders);
@@ -648,6 +656,10 @@
 
   Class get objectClass => objectClassBuilder.cls;
 
+  ClassBuilder get enumClassBuilder => enumType.declaration as ClassBuilder;
+
+  Class get enumClass => enumClassBuilder.cls;
+
   /// If [builder] doesn't have a constructors, install the defaults.
   void installDefaultConstructor(SourceClassBuilder builder) {
     assert(!builder.isMixinApplication);
@@ -976,6 +988,8 @@
     nullType.bind(nullClassBuilder..isNullClass = true);
     bottomType.bind(loader.coreLibrary
         .lookupLocalMember("Never", required: true) as TypeDeclarationBuilder);
+    enumType.bind(loader.coreLibrary.lookupLocalMember("Enum", required: true)
+        as TypeDeclarationBuilder);
   }
 
   void computeCoreTypes() {
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 4e4540e..fb348d8 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
@@ -40,6 +40,7 @@
 import '../dill/dill_member_builder.dart';
 import '../fasta_codes.dart';
 import '../kernel/combined_member_signature.dart';
+import '../kernel/hierarchy/hierarchy_builder.dart';
 import '../kernel/kernel_helper.dart';
 import '../kernel/kernel_target.dart' show KernelTarget;
 import '../kernel/redirecting_factory_body.dart'
@@ -621,12 +622,34 @@
     }
   }
 
-  void checkSupertypes(CoreTypes coreTypes) {
+  void checkSupertypes(CoreTypes coreTypes,
+      ClassHierarchyBuilder hierarchyBuilder, Class enumClass) {
     // This method determines whether the class (that's being built) its super
     // class appears both in 'extends' and 'implements' clauses and whether any
     // interface appears multiple times in the 'implements' clause.
     // Moreover, it checks that `FutureOr` and `void` are not among the
-    // supertypes.
+    // supertypes and that `Enum` is not implemented by non-abstract classes.
+
+    if (!cls.isAbstract && !cls.isEnum) {
+      bool isEnumFound = false;
+      List<Supertype> interfaces =
+          hierarchyBuilder.getNodeFromClass(cls).superclasses;
+      for (int i = 0; !isEnumFound && i < interfaces.length; i++) {
+        if (interfaces[i].classNode == enumClass) {
+          isEnumFound = true;
+        }
+      }
+      interfaces = hierarchyBuilder.getNodeFromClass(cls).interfaces;
+      for (int i = 0; !isEnumFound && i < interfaces.length; i++) {
+        if (interfaces[i].classNode == enumClass) {
+          isEnumFound = true;
+        }
+      }
+      if (isEnumFound) {
+        addProblem(templateEnumSupertypeOfNonAbstractClass.withArguments(name),
+            charOffset, noLength);
+      }
+    }
 
     void fail(NamedTypeBuilder target, Message message,
         TypeAliasBuilder? aliasBuilder) {
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 0b7498f..a01a8c4 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
@@ -4390,9 +4390,13 @@
     if (arguments.types.isEmpty) return;
     Class klass;
     List<DartType> receiverTypeArguments;
+    Map<TypeParameter, DartType> substitutionMap = <TypeParameter, DartType>{};
     if (receiverType is InterfaceType) {
       klass = receiverType.classNode;
       receiverTypeArguments = receiverType.typeArguments;
+      for (int i = 0; i < receiverTypeArguments.length; ++i) {
+        substitutionMap[klass.typeParameters[i]] = receiverTypeArguments[i];
+      }
     } else {
       return;
     }
@@ -4408,10 +4412,12 @@
           hierarchy.getClassAsInstanceOf(klass, method.enclosingClass!)!;
       klass = method.enclosingClass!;
       receiverTypeArguments = parent.typeArguments;
-    }
-    Map<TypeParameter, DartType> substitutionMap = <TypeParameter, DartType>{};
-    for (int i = 0; i < receiverTypeArguments.length; ++i) {
-      substitutionMap[klass.typeParameters[i]] = receiverTypeArguments[i];
+      Map<TypeParameter, DartType> instanceSubstitutionMap = substitutionMap;
+      substitutionMap = <TypeParameter, DartType>{};
+      for (int i = 0; i < receiverTypeArguments.length; ++i) {
+        substitutionMap[klass.typeParameters[i]] =
+            substitute(receiverTypeArguments[i], instanceSubstitutionMap);
+      }
     }
     List<TypeParameter> methodParameters = method.function.typeParameters;
     // The error is to be reported elsewhere.
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 9795167..e8b0af8 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -1713,20 +1713,12 @@
   bool checkEnumSupertypeIsDenylisted(SourceClassBuilder cls) {
     if (!cls.library.enableEnhancedEnumsInLibrary) {
       cls.addProblem(
-          templateExperimentNotEnabled.withArguments('enhanced-enums',
-              cls.library.enableEnhancedEnumsVersionInLibrary.toText()),
+          templateEnumSupertypeOfNonAbstractClass.withArguments(cls.name),
           cls.charOffset,
           noLength);
       return true;
-    } else {
-      if (!cls.isAbstract) {
-        cls.addProblem(
-            templateEnumSupertypeOfNonAbstractClass.withArguments(cls.name),
-            cls.charOffset,
-            noLength);
-      }
-      return false;
     }
+    return false;
   }
 
   void checkClassSupertypes(
@@ -1925,10 +1917,11 @@
     ticker.logMs("Computed core types");
   }
 
-  void checkSupertypes(List<SourceClassBuilder> sourceClasses) {
+  void checkSupertypes(
+      List<SourceClassBuilder> sourceClasses, Class enumClass) {
     for (SourceClassBuilder builder in sourceClasses) {
       if (builder.library.loader == this && !builder.isPatch) {
-        builder.checkSupertypes(coreTypes);
+        builder.checkSupertypes(coreTypes, hierarchyBuilder, enumClass);
       }
     }
     ticker.logMs("Checked supertypes");
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index b67f720..7ec217f 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -1247,6 +1247,7 @@
 spec'ed
 specialization
 specially
+specifications
 specifics
 speeding
 spend
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart
index 7d0f370..8889a45 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart
@@ -10,4 +10,20 @@
   int get foo => index;
 }
 
+abstract class EnumInterface implements Enum {}
+
+class EnumClass extends EnumInterface { // Error.
+  int get index => 0;
+}
+
+abstract class AbstractEnumClass extends EnumInterface {}
+
+class EnumClass2 extends AbstractEnumClass {} // Error.
+
+mixin EnumMixin on Enum {}
+
+abstract class AbstractEnumClass2 with EnumMixin {}
+
+class EnumClass3 extends AbstractEnumClass2 {} // Error.
+
 main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.strong.expect
index 8e7b231..99bdbbb 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.strong.expect
@@ -10,6 +10,18 @@
 // class B implements Enum { // Error.
 //       ^
 //
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:15:7: Error: Non-abstract class 'EnumClass' has 'Enum' as a superinterface.
+// class EnumClass extends EnumInterface { // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:21:7: Error: Non-abstract class 'EnumClass2' has 'Enum' as a superinterface.
+// class EnumClass2 extends AbstractEnumClass {} // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:27:7: Error: Non-abstract class 'EnumClass3' has 'Enum' as a superinterface.
+// class EnumClass3 extends AbstractEnumClass2 {} // Error.
+//       ^
+//
 // pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:5:7: Error: The non-abstract class 'A' is missing implementations for these members:
 //  - Enum.index
 // Try to either
@@ -38,6 +50,41 @@
 //   int get index;
 //           ^^^^^
 //
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:21:7: Error: The non-abstract class 'EnumClass2' is missing implementations for these members:
+//  - Enum.index
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class EnumClass2 extends AbstractEnumClass {} // Error.
+//       ^^^^^^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: 'Enum.index' is defined here.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:27:7: Error: The non-abstract class 'EnumClass3' is missing implementations for these members:
+//  - Enum.index
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class EnumClass3 extends AbstractEnumClass2 {} // Error.
+//       ^^^^^^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: 'Enum.index' is defined here.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:25:16: Error: 'Object' doesn't implement 'Enum' so it can't be used with 'EnumMixin'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Enum' is from 'dart:core'.
+//  - 'EnumMixin' is from 'pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart'.
+// abstract class AbstractEnumClass2 with EnumMixin {}
+//                ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -59,6 +106,51 @@
   no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
 }
+abstract class EnumInterface extends core::Object implements core::Enum {
+  synthetic constructor •() → self::EnumInterface
+    : super core::Object::•()
+    ;
+}
+class EnumClass extends self::EnumInterface {
+  synthetic constructor •() → self::EnumClass
+    : super self::EnumInterface::•()
+    ;
+  get index() → core::int
+    return 0;
+  no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
+abstract class AbstractEnumClass extends self::EnumInterface {
+  synthetic constructor •() → self::AbstractEnumClass
+    : super self::EnumInterface::•()
+    ;
+}
+class EnumClass2 extends self::AbstractEnumClass {
+  synthetic constructor •() → self::EnumClass2
+    : super self::AbstractEnumClass::•()
+    ;
+  no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
+abstract class EnumMixin extends core::Enum /*isMixinDeclaration*/  {
+}
+abstract class _AbstractEnumClass2&Object&EnumMixin = core::Object with self::EnumMixin /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_AbstractEnumClass2&Object&EnumMixin
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractEnumClass2 extends self::_AbstractEnumClass2&Object&EnumMixin {
+  synthetic constructor •() → self::AbstractEnumClass2
+    : super self::_AbstractEnumClass2&Object&EnumMixin::•()
+    ;
+}
+class EnumClass3 extends self::AbstractEnumClass2 {
+  synthetic constructor •() → self::EnumClass3
+    : super self::AbstractEnumClass2::•()
+    ;
+  no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.strong.transformed.expect
index 8e7b231..9f0c21d 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.strong.transformed.expect
@@ -10,6 +10,18 @@
 // class B implements Enum { // Error.
 //       ^
 //
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:15:7: Error: Non-abstract class 'EnumClass' has 'Enum' as a superinterface.
+// class EnumClass extends EnumInterface { // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:21:7: Error: Non-abstract class 'EnumClass2' has 'Enum' as a superinterface.
+// class EnumClass2 extends AbstractEnumClass {} // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:27:7: Error: Non-abstract class 'EnumClass3' has 'Enum' as a superinterface.
+// class EnumClass3 extends AbstractEnumClass2 {} // Error.
+//       ^
+//
 // pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:5:7: Error: The non-abstract class 'A' is missing implementations for these members:
 //  - Enum.index
 // Try to either
@@ -38,6 +50,41 @@
 //   int get index;
 //           ^^^^^
 //
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:21:7: Error: The non-abstract class 'EnumClass2' is missing implementations for these members:
+//  - Enum.index
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class EnumClass2 extends AbstractEnumClass {} // Error.
+//       ^^^^^^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: 'Enum.index' is defined here.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:27:7: Error: The non-abstract class 'EnumClass3' is missing implementations for these members:
+//  - Enum.index
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class EnumClass3 extends AbstractEnumClass2 {} // Error.
+//       ^^^^^^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: 'Enum.index' is defined here.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:25:16: Error: 'Object' doesn't implement 'Enum' so it can't be used with 'EnumMixin'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Enum' is from 'dart:core'.
+//  - 'EnumMixin' is from 'pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart'.
+// abstract class AbstractEnumClass2 with EnumMixin {}
+//                ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -59,6 +106,51 @@
   no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
 }
+abstract class EnumInterface extends core::Object implements core::Enum {
+  synthetic constructor •() → self::EnumInterface
+    : super core::Object::•()
+    ;
+}
+class EnumClass extends self::EnumInterface {
+  synthetic constructor •() → self::EnumClass
+    : super self::EnumInterface::•()
+    ;
+  get index() → core::int
+    return 0;
+  no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
+abstract class AbstractEnumClass extends self::EnumInterface {
+  synthetic constructor •() → self::AbstractEnumClass
+    : super self::EnumInterface::•()
+    ;
+}
+class EnumClass2 extends self::AbstractEnumClass {
+  synthetic constructor •() → self::EnumClass2
+    : super self::AbstractEnumClass::•()
+    ;
+  no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
+abstract class EnumMixin extends core::Enum /*isMixinDeclaration*/  {
+}
+abstract class _AbstractEnumClass2&Object&EnumMixin extends core::Object implements self::EnumMixin /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_AbstractEnumClass2&Object&EnumMixin
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractEnumClass2 extends self::_AbstractEnumClass2&Object&EnumMixin {
+  synthetic constructor •() → self::AbstractEnumClass2
+    : super self::_AbstractEnumClass2&Object&EnumMixin::•()
+    ;
+}
+class EnumClass3 extends self::AbstractEnumClass2 {
+  synthetic constructor •() → self::EnumClass3
+    : super self::AbstractEnumClass2::•()
+    ;
+  no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.textual_outline.expect
index 585427e..91bd71d 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.textual_outline.expect
@@ -6,4 +6,20 @@
   int get foo => index;
 }
 
+abstract class EnumInterface implements Enum {}
+
+class EnumClass extends EnumInterface {
+  int get index => 0;
+}
+
+abstract class AbstractEnumClass extends EnumInterface {}
+
+class EnumClass2 extends AbstractEnumClass {}
+
+mixin EnumMixin on Enum {}
+
+abstract class AbstractEnumClass2 with EnumMixin {}
+
+class EnumClass3 extends AbstractEnumClass2 {}
+
 main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.textual_outline_modelled.expect
index 585427e..b8f73e5 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.textual_outline_modelled.expect
@@ -1,3 +1,9 @@
+abstract class AbstractEnumClass extends EnumInterface {}
+
+abstract class AbstractEnumClass2 with EnumMixin {}
+
+abstract class EnumInterface implements Enum {}
+
 class A extends Enum {
   int get foo => index;
 }
@@ -6,4 +12,13 @@
   int get foo => index;
 }
 
+class EnumClass extends EnumInterface {
+  int get index => 0;
+}
+
+class EnumClass2 extends AbstractEnumClass {}
+
+class EnumClass3 extends AbstractEnumClass2 {}
+
 main() {}
+mixin EnumMixin on Enum {}
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.expect
index 8e7b231..99bdbbb 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.expect
@@ -10,6 +10,18 @@
 // class B implements Enum { // Error.
 //       ^
 //
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:15:7: Error: Non-abstract class 'EnumClass' has 'Enum' as a superinterface.
+// class EnumClass extends EnumInterface { // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:21:7: Error: Non-abstract class 'EnumClass2' has 'Enum' as a superinterface.
+// class EnumClass2 extends AbstractEnumClass {} // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:27:7: Error: Non-abstract class 'EnumClass3' has 'Enum' as a superinterface.
+// class EnumClass3 extends AbstractEnumClass2 {} // Error.
+//       ^
+//
 // pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:5:7: Error: The non-abstract class 'A' is missing implementations for these members:
 //  - Enum.index
 // Try to either
@@ -38,6 +50,41 @@
 //   int get index;
 //           ^^^^^
 //
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:21:7: Error: The non-abstract class 'EnumClass2' is missing implementations for these members:
+//  - Enum.index
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class EnumClass2 extends AbstractEnumClass {} // Error.
+//       ^^^^^^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: 'Enum.index' is defined here.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:27:7: Error: The non-abstract class 'EnumClass3' is missing implementations for these members:
+//  - Enum.index
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class EnumClass3 extends AbstractEnumClass2 {} // Error.
+//       ^^^^^^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: 'Enum.index' is defined here.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:25:16: Error: 'Object' doesn't implement 'Enum' so it can't be used with 'EnumMixin'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Enum' is from 'dart:core'.
+//  - 'EnumMixin' is from 'pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart'.
+// abstract class AbstractEnumClass2 with EnumMixin {}
+//                ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -59,6 +106,51 @@
   no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
 }
+abstract class EnumInterface extends core::Object implements core::Enum {
+  synthetic constructor •() → self::EnumInterface
+    : super core::Object::•()
+    ;
+}
+class EnumClass extends self::EnumInterface {
+  synthetic constructor •() → self::EnumClass
+    : super self::EnumInterface::•()
+    ;
+  get index() → core::int
+    return 0;
+  no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
+abstract class AbstractEnumClass extends self::EnumInterface {
+  synthetic constructor •() → self::AbstractEnumClass
+    : super self::EnumInterface::•()
+    ;
+}
+class EnumClass2 extends self::AbstractEnumClass {
+  synthetic constructor •() → self::EnumClass2
+    : super self::AbstractEnumClass::•()
+    ;
+  no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
+abstract class EnumMixin extends core::Enum /*isMixinDeclaration*/  {
+}
+abstract class _AbstractEnumClass2&Object&EnumMixin = core::Object with self::EnumMixin /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_AbstractEnumClass2&Object&EnumMixin
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractEnumClass2 extends self::_AbstractEnumClass2&Object&EnumMixin {
+  synthetic constructor •() → self::AbstractEnumClass2
+    : super self::_AbstractEnumClass2&Object&EnumMixin::•()
+    ;
+}
+class EnumClass3 extends self::AbstractEnumClass2 {
+  synthetic constructor •() → self::EnumClass3
+    : super self::AbstractEnumClass2::•()
+    ;
+  no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.modular.expect
index 8e7b231..99bdbbb 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.modular.expect
@@ -10,6 +10,18 @@
 // class B implements Enum { // Error.
 //       ^
 //
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:15:7: Error: Non-abstract class 'EnumClass' has 'Enum' as a superinterface.
+// class EnumClass extends EnumInterface { // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:21:7: Error: Non-abstract class 'EnumClass2' has 'Enum' as a superinterface.
+// class EnumClass2 extends AbstractEnumClass {} // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:27:7: Error: Non-abstract class 'EnumClass3' has 'Enum' as a superinterface.
+// class EnumClass3 extends AbstractEnumClass2 {} // Error.
+//       ^
+//
 // pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:5:7: Error: The non-abstract class 'A' is missing implementations for these members:
 //  - Enum.index
 // Try to either
@@ -38,6 +50,41 @@
 //   int get index;
 //           ^^^^^
 //
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:21:7: Error: The non-abstract class 'EnumClass2' is missing implementations for these members:
+//  - Enum.index
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class EnumClass2 extends AbstractEnumClass {} // Error.
+//       ^^^^^^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: 'Enum.index' is defined here.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:27:7: Error: The non-abstract class 'EnumClass3' is missing implementations for these members:
+//  - Enum.index
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class EnumClass3 extends AbstractEnumClass2 {} // Error.
+//       ^^^^^^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: 'Enum.index' is defined here.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:25:16: Error: 'Object' doesn't implement 'Enum' so it can't be used with 'EnumMixin'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Enum' is from 'dart:core'.
+//  - 'EnumMixin' is from 'pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart'.
+// abstract class AbstractEnumClass2 with EnumMixin {}
+//                ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -59,6 +106,51 @@
   no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
 }
+abstract class EnumInterface extends core::Object implements core::Enum {
+  synthetic constructor •() → self::EnumInterface
+    : super core::Object::•()
+    ;
+}
+class EnumClass extends self::EnumInterface {
+  synthetic constructor •() → self::EnumClass
+    : super self::EnumInterface::•()
+    ;
+  get index() → core::int
+    return 0;
+  no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
+abstract class AbstractEnumClass extends self::EnumInterface {
+  synthetic constructor •() → self::AbstractEnumClass
+    : super self::EnumInterface::•()
+    ;
+}
+class EnumClass2 extends self::AbstractEnumClass {
+  synthetic constructor •() → self::EnumClass2
+    : super self::AbstractEnumClass::•()
+    ;
+  no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
+abstract class EnumMixin extends core::Enum /*isMixinDeclaration*/  {
+}
+abstract class _AbstractEnumClass2&Object&EnumMixin = core::Object with self::EnumMixin /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_AbstractEnumClass2&Object&EnumMixin
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractEnumClass2 extends self::_AbstractEnumClass2&Object&EnumMixin {
+  synthetic constructor •() → self::AbstractEnumClass2
+    : super self::_AbstractEnumClass2&Object&EnumMixin::•()
+    ;
+}
+class EnumClass3 extends self::AbstractEnumClass2 {
+  synthetic constructor •() → self::EnumClass3
+    : super self::AbstractEnumClass2::•()
+    ;
+  no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.outline.expect
index 08bae2f..75296a2 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.outline.expect
@@ -10,6 +10,18 @@
 // class B implements Enum { // Error.
 //       ^
 //
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:15:7: Error: Non-abstract class 'EnumClass' has 'Enum' as a superinterface.
+// class EnumClass extends EnumInterface { // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:21:7: Error: Non-abstract class 'EnumClass2' has 'Enum' as a superinterface.
+// class EnumClass2 extends AbstractEnumClass {} // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:27:7: Error: Non-abstract class 'EnumClass3' has 'Enum' as a superinterface.
+// class EnumClass3 extends AbstractEnumClass2 {} // Error.
+//       ^
+//
 // pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:5:7: Error: The non-abstract class 'A' is missing implementations for these members:
 //  - Enum.index
 // Try to either
@@ -38,6 +50,41 @@
 //   int get index;
 //           ^^^^^
 //
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:21:7: Error: The non-abstract class 'EnumClass2' is missing implementations for these members:
+//  - Enum.index
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class EnumClass2 extends AbstractEnumClass {} // Error.
+//       ^^^^^^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: 'Enum.index' is defined here.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:27:7: Error: The non-abstract class 'EnumClass3' is missing implementations for these members:
+//  - Enum.index
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class EnumClass3 extends AbstractEnumClass2 {} // Error.
+//       ^^^^^^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: 'Enum.index' is defined here.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:25:16: Error: 'Object' doesn't implement 'Enum' so it can't be used with 'EnumMixin'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Enum' is from 'dart:core'.
+//  - 'EnumMixin' is from 'pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart'.
+// abstract class AbstractEnumClass2 with EnumMixin {}
+//                ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -57,6 +104,45 @@
   no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_name, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
 }
+abstract class EnumInterface extends core::Object implements core::Enum {
+  synthetic constructor •() → self::EnumInterface
+    ;
+}
+class EnumClass extends self::EnumInterface {
+  synthetic constructor •() → self::EnumClass
+    ;
+  get index() → core::int
+    ;
+  no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_name, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
+abstract class AbstractEnumClass extends self::EnumInterface {
+  synthetic constructor •() → self::AbstractEnumClass
+    ;
+}
+class EnumClass2 extends self::AbstractEnumClass {
+  synthetic constructor •() → self::EnumClass2
+    ;
+  no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_name, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
+abstract class EnumMixin extends core::Enum /*isMixinDeclaration*/  {
+}
+abstract class _AbstractEnumClass2&Object&EnumMixin = core::Object with self::EnumMixin /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_AbstractEnumClass2&Object&EnumMixin
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractEnumClass2 extends self::_AbstractEnumClass2&Object&EnumMixin {
+  synthetic constructor •() → self::AbstractEnumClass2
+    ;
+}
+class EnumClass3 extends self::AbstractEnumClass2 {
+  synthetic constructor •() → self::EnumClass3
+    ;
+  no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_name, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
 static method main() → dynamic
   ;
 
@@ -70,4 +156,16 @@
 Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/core/enum.dart:47:14 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/core/enum.dart:47:14 -> ListConstant(const <dynamic>[])
 Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/core/enum.dart:47:14 -> MapConstant(const <Symbol*, dynamic>{})
-Extra constant evaluation: evaluated: 18, effectively constant: 8
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/core/enum.dart:47:14 -> SymbolConstant(#_name)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/core/enum.dart:47:14 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/core/enum.dart:47:14 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/core/enum.dart:47:14 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/core/enum.dart:47:14 -> SymbolConstant(#_name)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/core/enum.dart:47:14 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/core/enum.dart:47:14 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/core/enum.dart:47:14 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/core/enum.dart:47:14 -> SymbolConstant(#_name)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/core/enum.dart:47:14 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/core/enum.dart:47:14 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/core/enum.dart:47:14 -> MapConstant(const <Symbol*, dynamic>{})
+Extra constant evaluation: evaluated: 45, effectively constant: 20
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.transformed.expect
index 8e7b231..9f0c21d 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.transformed.expect
@@ -10,6 +10,18 @@
 // class B implements Enum { // Error.
 //       ^
 //
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:15:7: Error: Non-abstract class 'EnumClass' has 'Enum' as a superinterface.
+// class EnumClass extends EnumInterface { // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:21:7: Error: Non-abstract class 'EnumClass2' has 'Enum' as a superinterface.
+// class EnumClass2 extends AbstractEnumClass {} // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:27:7: Error: Non-abstract class 'EnumClass3' has 'Enum' as a superinterface.
+// class EnumClass3 extends AbstractEnumClass2 {} // Error.
+//       ^
+//
 // pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:5:7: Error: The non-abstract class 'A' is missing implementations for these members:
 //  - Enum.index
 // Try to either
@@ -38,6 +50,41 @@
 //   int get index;
 //           ^^^^^
 //
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:21:7: Error: The non-abstract class 'EnumClass2' is missing implementations for these members:
+//  - Enum.index
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class EnumClass2 extends AbstractEnumClass {} // Error.
+//       ^^^^^^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: 'Enum.index' is defined here.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:27:7: Error: The non-abstract class 'EnumClass3' is missing implementations for these members:
+//  - Enum.index
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class EnumClass3 extends AbstractEnumClass2 {} // Error.
+//       ^^^^^^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: 'Enum.index' is defined here.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:25:16: Error: 'Object' doesn't implement 'Enum' so it can't be used with 'EnumMixin'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Enum' is from 'dart:core'.
+//  - 'EnumMixin' is from 'pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart'.
+// abstract class AbstractEnumClass2 with EnumMixin {}
+//                ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -59,6 +106,51 @@
   no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
 }
+abstract class EnumInterface extends core::Object implements core::Enum {
+  synthetic constructor •() → self::EnumInterface
+    : super core::Object::•()
+    ;
+}
+class EnumClass extends self::EnumInterface {
+  synthetic constructor •() → self::EnumClass
+    : super self::EnumInterface::•()
+    ;
+  get index() → core::int
+    return 0;
+  no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
+abstract class AbstractEnumClass extends self::EnumInterface {
+  synthetic constructor •() → self::AbstractEnumClass
+    : super self::EnumInterface::•()
+    ;
+}
+class EnumClass2 extends self::AbstractEnumClass {
+  synthetic constructor •() → self::EnumClass2
+    : super self::AbstractEnumClass::•()
+    ;
+  no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
+abstract class EnumMixin extends core::Enum /*isMixinDeclaration*/  {
+}
+abstract class _AbstractEnumClass2&Object&EnumMixin extends core::Object implements self::EnumMixin /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_AbstractEnumClass2&Object&EnumMixin
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractEnumClass2 extends self::_AbstractEnumClass2&Object&EnumMixin {
+  synthetic constructor •() → self::AbstractEnumClass2
+    : super self::_AbstractEnumClass2&Object&EnumMixin::•()
+    ;
+}
+class EnumClass3 extends self::AbstractEnumClass2 {
+  synthetic constructor •() → self::EnumClass3
+    : super self::AbstractEnumClass2::•()
+    ;
+  no-such-method-forwarder get /* from org-dartlang-sdk:///sdk/lib/core/enum.dart */ _name() → core::String
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/general/hierarchy.dart.weak.expect b/pkg/front_end/testcases/general/hierarchy.dart.weak.expect
index 3c3d062..42fb0ba 100644
--- a/pkg/front_end/testcases/general/hierarchy.dart.weak.expect
+++ b/pkg/front_end/testcases/general/hierarchy.dart.weak.expect
@@ -2,6 +2,11 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: 'A1' can't be used in both 'extends' and 'implements' clauses.
+// Try removing one of the occurrences.
+// class A6 extends A1 implements A1 {}
+//       ^
+//
 // pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: The non-abstract class 'A6' is missing implementations for these members:
 //  - A1.extendedInterfaceMember
 // Try to either
@@ -88,11 +93,6 @@
 //   void mixedInAndImplementedInterfaceMember() {}
 //        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: 'A1' can't be used in both 'extends' and 'implements' clauses.
-// Try removing one of the occurrences.
-// class A6 extends A1 implements A1 {}
-//       ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/hierarchy.dart.weak.modular.expect b/pkg/front_end/testcases/general/hierarchy.dart.weak.modular.expect
index 3c3d062..42fb0ba 100644
--- a/pkg/front_end/testcases/general/hierarchy.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/hierarchy.dart.weak.modular.expect
@@ -2,6 +2,11 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: 'A1' can't be used in both 'extends' and 'implements' clauses.
+// Try removing one of the occurrences.
+// class A6 extends A1 implements A1 {}
+//       ^
+//
 // pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: The non-abstract class 'A6' is missing implementations for these members:
 //  - A1.extendedInterfaceMember
 // Try to either
@@ -88,11 +93,6 @@
 //   void mixedInAndImplementedInterfaceMember() {}
 //        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: 'A1' can't be used in both 'extends' and 'implements' clauses.
-// Try removing one of the occurrences.
-// class A6 extends A1 implements A1 {}
-//       ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/hierarchy.dart.weak.outline.expect b/pkg/front_end/testcases/general/hierarchy.dart.weak.outline.expect
index 66c5f61..f96deda 100644
--- a/pkg/front_end/testcases/general/hierarchy.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/hierarchy.dart.weak.outline.expect
@@ -2,6 +2,11 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: 'A1' can't be used in both 'extends' and 'implements' clauses.
+// Try removing one of the occurrences.
+// class A6 extends A1 implements A1 {}
+//       ^
+//
 // pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: The non-abstract class 'A6' is missing implementations for these members:
 //  - A1.extendedInterfaceMember
 // Try to either
@@ -88,11 +93,6 @@
 //   void mixedInAndImplementedInterfaceMember() {}
 //        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: 'A1' can't be used in both 'extends' and 'implements' clauses.
-// Try removing one of the occurrences.
-// class A6 extends A1 implements A1 {}
-//       ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/hierarchy.dart.weak.transformed.expect b/pkg/front_end/testcases/general/hierarchy.dart.weak.transformed.expect
index 2c99461f9..1b21721 100644
--- a/pkg/front_end/testcases/general/hierarchy.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/hierarchy.dart.weak.transformed.expect
@@ -2,6 +2,11 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: 'A1' can't be used in both 'extends' and 'implements' clauses.
+// Try removing one of the occurrences.
+// class A6 extends A1 implements A1 {}
+//       ^
+//
 // pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: The non-abstract class 'A6' is missing implementations for these members:
 //  - A1.extendedInterfaceMember
 // Try to either
@@ -88,11 +93,6 @@
 //   void mixedInAndImplementedInterfaceMember() {}
 //        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: 'A1' can't be used in both 'extends' and 'implements' clauses.
-// Try removing one of the occurrences.
-// class A6 extends A1 implements A1 {}
-//       ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/issue48131.dart b/pkg/front_end/testcases/general/issue48131.dart
new file mode 100644
index 0000000..cf58ea6
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48131.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.
+
+abstract class A<X> {
+  void foo<Y extends X>() {}
+}
+
+class B<Z> extends A<Z> {}
+
+void main() {
+  new B<Object>().foo<int>();
+}
diff --git a/pkg/front_end/testcases/general/issue48131.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue48131.dart.textual_outline.expect
new file mode 100644
index 0000000..2e5ec26
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48131.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+abstract class A<X> {
+  void foo<Y extends X>() {}
+}
+
+class B<Z> extends A<Z> {}
+
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue48131.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue48131.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..2e5ec26
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48131.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+abstract class A<X> {
+  void foo<Y extends X>() {}
+}
+
+class B<Z> extends A<Z> {}
+
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue48131.dart.weak.expect b/pkg/front_end/testcases/general/issue48131.dart.weak.expect
new file mode 100644
index 0000000..c09fc11
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48131.dart.weak.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  method foo<covariant-by-class Y extends self::A::X%>() → void {}
+}
+class B<Z extends core::Object? = dynamic> extends self::A<self::B::Z%> {
+  synthetic constructor •() → self::B<self::B::Z%>
+    : super self::A::•()
+    ;
+}
+static method main() → void {
+  new self::B::•<core::Object>().{self::A::foo}<core::int>(){() → void};
+}
diff --git a/pkg/front_end/testcases/general/issue48131.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48131.dart.weak.modular.expect
new file mode 100644
index 0000000..c09fc11
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48131.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  method foo<covariant-by-class Y extends self::A::X%>() → void {}
+}
+class B<Z extends core::Object? = dynamic> extends self::A<self::B::Z%> {
+  synthetic constructor •() → self::B<self::B::Z%>
+    : super self::A::•()
+    ;
+}
+static method main() → void {
+  new self::B::•<core::Object>().{self::A::foo}<core::int>(){() → void};
+}
diff --git a/pkg/front_end/testcases/general/issue48131.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48131.dart.weak.outline.expect
new file mode 100644
index 0000000..8eabec2
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48131.dart.weak.outline.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    ;
+  method foo<covariant-by-class Y extends self::A::X%>() → void
+    ;
+}
+class B<Z extends core::Object? = dynamic> extends self::A<self::B::Z%> {
+  synthetic constructor •() → self::B<self::B::Z%>
+    ;
+}
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/general/issue48131.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48131.dart.weak.transformed.expect
new file mode 100644
index 0000000..c09fc11
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48131.dart.weak.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  method foo<covariant-by-class Y extends self::A::X%>() → void {}
+}
+class B<Z extends core::Object? = dynamic> extends self::A<self::B::Z%> {
+  synthetic constructor •() → self::B<self::B::Z%>
+    : super self::A::•()
+    ;
+}
+static method main() → void {
+  new self::B::•<core::Object>().{self::A::foo}<core::int>(){() → void};
+}
diff --git a/pkg/front_end/testcases/nnbd/issue48131.dart b/pkg/front_end/testcases/nnbd/issue48131.dart
new file mode 100644
index 0000000..cf58ea6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue48131.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.
+
+abstract class A<X> {
+  void foo<Y extends X>() {}
+}
+
+class B<Z> extends A<Z> {}
+
+void main() {
+  new B<Object>().foo<int>();
+}
diff --git a/pkg/front_end/testcases/nnbd/issue48131.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue48131.dart.strong.expect
new file mode 100644
index 0000000..c09fc11
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue48131.dart.strong.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  method foo<covariant-by-class Y extends self::A::X%>() → void {}
+}
+class B<Z extends core::Object? = dynamic> extends self::A<self::B::Z%> {
+  synthetic constructor •() → self::B<self::B::Z%>
+    : super self::A::•()
+    ;
+}
+static method main() → void {
+  new self::B::•<core::Object>().{self::A::foo}<core::int>(){() → void};
+}
diff --git a/pkg/front_end/testcases/nnbd/issue48131.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue48131.dart.strong.transformed.expect
new file mode 100644
index 0000000..c09fc11
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue48131.dart.strong.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  method foo<covariant-by-class Y extends self::A::X%>() → void {}
+}
+class B<Z extends core::Object? = dynamic> extends self::A<self::B::Z%> {
+  synthetic constructor •() → self::B<self::B::Z%>
+    : super self::A::•()
+    ;
+}
+static method main() → void {
+  new self::B::•<core::Object>().{self::A::foo}<core::int>(){() → void};
+}
diff --git a/pkg/front_end/testcases/nnbd/issue48131.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/issue48131.dart.textual_outline.expect
new file mode 100644
index 0000000..2e5ec26
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue48131.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+abstract class A<X> {
+  void foo<Y extends X>() {}
+}
+
+class B<Z> extends A<Z> {}
+
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue48131.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/issue48131.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..2e5ec26
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue48131.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+abstract class A<X> {
+  void foo<Y extends X>() {}
+}
+
+class B<Z> extends A<Z> {}
+
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue48131.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue48131.dart.weak.expect
new file mode 100644
index 0000000..c09fc11
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue48131.dart.weak.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  method foo<covariant-by-class Y extends self::A::X%>() → void {}
+}
+class B<Z extends core::Object? = dynamic> extends self::A<self::B::Z%> {
+  synthetic constructor •() → self::B<self::B::Z%>
+    : super self::A::•()
+    ;
+}
+static method main() → void {
+  new self::B::•<core::Object>().{self::A::foo}<core::int>(){() → void};
+}
diff --git a/pkg/front_end/testcases/nnbd/issue48131.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue48131.dart.weak.modular.expect
new file mode 100644
index 0000000..c09fc11
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue48131.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  method foo<covariant-by-class Y extends self::A::X%>() → void {}
+}
+class B<Z extends core::Object? = dynamic> extends self::A<self::B::Z%> {
+  synthetic constructor •() → self::B<self::B::Z%>
+    : super self::A::•()
+    ;
+}
+static method main() → void {
+  new self::B::•<core::Object>().{self::A::foo}<core::int>(){() → void};
+}
diff --git a/pkg/front_end/testcases/nnbd/issue48131.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue48131.dart.weak.outline.expect
new file mode 100644
index 0000000..8eabec2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue48131.dart.weak.outline.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    ;
+  method foo<covariant-by-class Y extends self::A::X%>() → void
+    ;
+}
+class B<Z extends core::Object? = dynamic> extends self::A<self::B::Z%> {
+  synthetic constructor •() → self::B<self::B::Z%>
+    ;
+}
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/nnbd/issue48131.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue48131.dart.weak.transformed.expect
new file mode 100644
index 0000000..c09fc11
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue48131.dart.weak.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  method foo<covariant-by-class Y extends self::A::X%>() → void {}
+}
+class B<Z extends core::Object? = dynamic> extends self::A<self::B::Z%> {
+  synthetic constructor •() → self::B<self::B::Z%>
+    : super self::A::•()
+    ;
+}
+static method main() → void {
+  new self::B::•<core::Object>().{self::A::foo}<core::int>(){() → void};
+}
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 0685477..98ecdc0 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -168,9 +168,7 @@
 [ $system == windows ]
 cc/CorelibCompilerStats: Skip
 dart/disassemble_determinism_test: Slow, Pass # Times out on slower bots.
-dart/isolates/dart_api_create_lightweight_isolate_test: SkipByDesign # https://dartbug.com/40579: Dart C API symbols not available.
 dart_2/disassemble_determinism_test: Slow, Pass # Times out on slower bots.
-dart_2/isolates/dart_api_create_lightweight_isolate_test: SkipByDesign # https://dartbug.com/40579: Dart C API symbols not available.
 
 [ $arch == ia32 && $mode == debug && $system == windows ]
 dart/transferable_test: Skip # This is performance test and somehow debug win ia32 bot's performance is unpredictable
@@ -275,6 +273,11 @@
 dart_2/null_safety_autodetection_in_kernel_compiler_test: SkipByDesign # Test needs to run from source
 dart_2/snapshot_depfile_test: SkipByDesign # Test needs to run from source
 
+[ $compiler == dartkp && $system == windows ]
+dart/finalizer/weak_reference_run_gc_test: SkipByDesign # https://dartbug.com/40579 Dart C API symbols not available.
+dart/isolates/dart_api_create_lightweight_isolate_test: SkipByDesign # https://dartbug.com/40579 Dart C API symbols not available.
+dart_2/isolates/dart_api_create_lightweight_isolate_test: SkipByDesign # https://dartbug.com/40579 Dart C API symbols not available.
+
 [ $compiler == dartkp && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
 dart/causal_stacks/async_throws_stack_lazy_non_symbolic_test: Pass, Slow
 dart_2/causal_stacks/async_throws_stack_lazy_non_symbolic_test: Pass, Slow
@@ -317,11 +320,11 @@
 # up with the real Dart stack trace and hence we don't get correct
 # symbol names.
 [ $arch == simarm || $arch == simarm64 || $arch == simarm64c ]
-cc/DartAPI_NativeFieldAccess: Skip # Test uses dart:ffi which is not supported on simulators.
-cc/DartAPI_NativeFieldAccess_Throws: Skip # Test uses dart:ffi which is not supported on simulators.
-cc/Dart_SetFfiNativeResolver: SkipByDesign # Test uses dart:ffi which is not supported on simulators.
-cc/Dart_SetFfiNativeResolver_DoesNotResolve: SkipByDesign # Test uses dart:ffi which is not supported on simulators.
-cc/Dart_SetFfiNativeResolver_MissingResolver: SkipByDesign # Test uses dart:ffi which is not supported on simulators.
+cc/DartAPI_NativeFieldAccess: SkipByDesign # https://dartbug.com/37299 Test uses dart:ffi which is not supported on simulators.
+cc/DartAPI_NativeFieldAccess_Throws: SkipByDesign # https://dartbug.com/37299 Test uses dart:ffi which is not supported on simulators.
+cc/Dart_SetFfiNativeResolver: SkipByDesign # https://dartbug.com/37299 Test uses dart:ffi which is not supported on simulators.
+cc/Dart_SetFfiNativeResolver_DoesNotResolve: SkipByDesign # https://dartbug.com/37299 Test uses dart:ffi which is not supported on simulators.
+cc/Dart_SetFfiNativeResolver_MissingResolver: SkipByDesign # https://dartbug.com/37299 Test uses dart:ffi which is not supported on simulators.
 cc/LargeMap: SkipByDesign
 cc/Profiler_AllocationSampleTest: SkipByDesign
 cc/Profiler_ArrayAllocation: SkipByDesign
@@ -348,20 +351,21 @@
 cc/Profiler_TrivialRecordAllocation: SkipByDesign
 cc/Profiler_TypedArrayAllocation: SkipByDesign
 cc/Service_Profile: SkipByDesign
-dart/isolates/dart_api_create_lightweight_isolate_test: SkipByDesign # Test uses dart:ffi which is not supported on simulators.
-dart/isolates/thread_pool_test: SkipByDesign # Test uses dart:ffi which is not supported on simulators.
-dart/regress_41971_test: SkipByDesign # dart:ffi is not supported on simulator
+dart/finalizer/weak_reference_run_gc_test: SkipByDesign # https://dartbug.com/37299 FFI not yet supported on simulators.
+dart/isolates/dart_api_create_lightweight_isolate_test: SkipByDesign # https://dartbug.com/37299 Test uses dart:ffi which is not supported on simulators.
+dart/isolates/thread_pool_test: SkipByDesign # https://dartbug.com/37299 Test uses dart:ffi which is not supported on simulators.
+dart/regress_41971_test: SkipByDesign # https://dartbug.com/37299 dart:ffi is not supported on simulator
 dart/sdk_hash_test: SkipSlow # gen_kernel is slow to run on simarm
-dart/unboxed_param_args_descriptor_test: SkipByDesign # FFI helper not supported on simulator
-dart/unboxed_param_tear_off_test: SkipByDesign # FFI helper not supported on simulator
-dart/unboxed_param_test: SkipByDesign # FFI helper not supported on simulator
-dart_2/isolates/dart_api_create_lightweight_isolate_test: SkipByDesign # Test uses dart:ffi which is not supported on simulators.
-dart_2/isolates/thread_pool_test: SkipByDesign # Test uses dart:ffi which is not supported on simulators.
-dart_2/regress_41971_test: SkipByDesign # dart:ffi is not supported on simulator
+dart/unboxed_param_args_descriptor_test: SkipByDesign # https://dartbug.com/37299 FFI helper not supported on simulator
+dart/unboxed_param_tear_off_test: SkipByDesign # https://dartbug.com/37299 FFI helper not supported on simulator
+dart/unboxed_param_test: SkipByDesign # https://dartbug.com/37299 FFI helper not supported on simulator
+dart_2/isolates/dart_api_create_lightweight_isolate_test: SkipByDesign # https://dartbug.com/37299 Test uses dart:ffi which is not supported on simulators.
+dart_2/isolates/thread_pool_test: SkipByDesign # https://dartbug.com/37299 Test uses dart:ffi which is not supported on simulators.
+dart_2/regress_41971_test: SkipByDesign # https://dartbug.com/37299 dart:ffi is not supported on simulator
 dart_2/sdk_hash_test: SkipSlow # gen_kernel is slow to run on simarm
-dart_2/unboxed_param_args_descriptor_test: SkipByDesign # FFI helper not supported on simulator
-dart_2/unboxed_param_tear_off_test: SkipByDesign # FFI helper not supported on simulator
-dart_2/unboxed_param_test: SkipByDesign # FFI helper not supported on simulator
+dart_2/unboxed_param_args_descriptor_test: SkipByDesign # https://dartbug.com/37299 FFI helper not supported on simulator
+dart_2/unboxed_param_tear_off_test: SkipByDesign # https://dartbug.com/37299 FFI helper not supported on simulator
+dart_2/unboxed_param_test: SkipByDesign # https://dartbug.com/37299 FFI helper not supported on simulator
 
 [ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $system != macos ]
 dart/thread_priority_macos_test: SkipByDesign
diff --git a/sdk/bin/dartanalyzer_sdk b/sdk/bin/dartanalyzer_sdk
index 88f4deb..bb7b84a 100755
--- a/sdk/bin/dartanalyzer_sdk
+++ b/sdk/bin/dartanalyzer_sdk
@@ -6,6 +6,8 @@
 # Run dartanalyzer.dart on the Dart VM. This script assumes the Dart SDK's
 # directory structure.
 
+echo "Warning: 'dartanalyzer' is deprecated. Please use 'dart analyze'." 1>&2
+
 function follow_links() {
   file="$1"
   while [ -h "$file" ]; do
diff --git a/sdk/bin/dartanalyzer_sdk.bat b/sdk/bin/dartanalyzer_sdk.bat
index 57dd538..7b1e03b 100644
--- a/sdk/bin/dartanalyzer_sdk.bat
+++ b/sdk/bin/dartanalyzer_sdk.bat
@@ -3,6 +3,8 @@
 REM for details. All rights reserved. Use of this source code is governed by a
 REM BSD-style license that can be found in the LICENSE file.
 
+echo Warning: 'dartanalyzer' is deprecated. Please use 'dart analyze'. 1>&2
+
 setlocal
 rem Handle the case where dart-sdk/bin has been symlinked to.
 set DIR_NAME_WITH_SLASH=%~dp0
diff --git a/tools/VERSION b/tools/VERSION
index dd07624..a6ed96c 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 36
+PRERELEASE 37
 PRERELEASE_PATCH 0
\ No newline at end of file
