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 e47921b..4e4540e 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
@@ -199,14 +199,14 @@
 
     scope.forEach(buildBuilders);
     constructors.forEach(buildBuilders);
-    if (supertypeBuilder != null) {
-      supertypeBuilder = _checkSupertype(supertypeBuilder!);
-    }
     if (isEnumMixin) {
       assert(supertypeBuilder?.name == "_Enum");
       supertypeBuilder?.resolveIn(coreLibrary.scope,
           supertypeBuilder?.charOffset ?? charOffset, fileUri, library);
     }
+    if (supertypeBuilder != null) {
+      supertypeBuilder = _checkSupertype(supertypeBuilder!);
+    }
     Supertype? supertype =
         supertypeBuilder?.buildSupertype(library, charOffset, fileUri);
     if (supertype != null) {
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 cf5835e..aaf1d48 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
@@ -6,30 +6,7 @@
 
 import 'package:_fe_analyzer_shared/src/scanner/token.dart';
 
-import 'package:kernel/ast.dart'
-    show
-        Arguments,
-        AsyncMarker,
-        Class,
-        Constructor,
-        ConstructorInvocation,
-        DartType,
-        Expression,
-        Field,
-        InstanceAccessKind,
-        InstanceGet,
-        IntLiteral,
-        ListLiteral,
-        Name,
-        ProcedureKind,
-        Reference,
-        ReturnStatement,
-        StaticGet,
-        StringConcatenation,
-        StringLiteral,
-        SuperInitializer,
-        ThisExpression,
-        setParents;
+import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/reference_from_index.dart' show IndexedClass;
 
@@ -594,12 +571,20 @@
               }
             }
             BodyBuilder? bodyBuilder;
-            if (enumConstantInfo.argumentsBeginToken != null) {
+            if (enumConstantInfo.argumentsBeginToken != null ||
+                typeArgumentBuilders == null && cls.typeParameters.isNotEmpty) {
+              // We need to create a BodyBuilder in two cases: 1) if the
+              // arguments token is provided, we'll use the BodyBuilder to
+              // parse them and perform inference, 2) if the type arguments
+              // aren't provided, but required, we'll use it to infer them.
               bodyBuilder = library.loader
                   .createBodyBuilderForOutlineExpression(
                       library, this, this, scope, fileUri);
               bodyBuilder.constantContext = ConstantContext.required;
-              arguments = bodyBuilder
+            }
+
+            if (enumConstantInfo.argumentsBeginToken != null) {
+              arguments = bodyBuilder!
                   .parseArguments(enumConstantInfo.argumentsBeginToken!);
               bodyBuilder.performBacklogComputations(delayedActionPerformers);
 
@@ -607,11 +592,16 @@
             } else {
               arguments = new ArgumentsImpl(enumSyntheticArguments);
             }
+
             if (typeArguments != null && arguments is ArgumentsImpl) {
               ArgumentsImpl.setNonInferrableArgumentTypes(
                   arguments, typeArguments);
+            } else if (cls.typeParameters.isNotEmpty) {
+              arguments.types.addAll(new List<DartType>.filled(
+                  cls.typeParameters.length, const UnknownType()));
             }
             setParents(enumSyntheticArguments, arguments);
+
             Expression initializer = new ConstructorInvocation(
                 constructorBuilder.constructor, arguments,
                 isConst: true)
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index 54f7ba1..4e51302 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -491,6 +491,8 @@
 getter1c
 getter1d
 getter1e
+gi
+gm
 goo
 google
 graphic
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart
index 6afc407..1197e8e 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart
@@ -16,4 +16,8 @@
   const E2(X f);
 }
 
+enum E3<X extends num, Y extends String, Z extends Function(X, Y)> {
+  element
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.expect
index cdcb164..494cf2f 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.expect
@@ -20,6 +20,15 @@
   method toString() → core::String
     return "E2.${this.{core::_Enum::_name}{core::String}}";
 }
+class E3<X extends core::num, Y extends core::String, Z extends (self::E3::X, self::E3::Y) → dynamic = (Never, Never) → dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3<core::num, core::String, (Never, Never) → dynamic>> values = #C9;
+  static const field self::E3<core::num, core::String, (core::num, core::String) → dynamic> element = #C8;
+  const constructor •(core::int index, core::String name) → self::E3<self::E3::X, self::E3::Y, self::E3::Z>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
 static method foo<X extends core::Object? = dynamic>(self::foo::X% x) → self::foo::X%
   return x;
 static method main() → dynamic {}
@@ -31,6 +40,9 @@
   #C4 = <self::E1>[#C3]
   #C5 = self::E2<<X extends core::Object? = dynamic>(X%) → X%> {index:#C1, _name:#C2}
   #C6 = <self::E2<dynamic>>[#C5]
+  #C7 = "element"
+  #C8 = self::E3<core::num, core::String, (core::num, core::String) → dynamic> {index:#C1, _name:#C7}
+  #C9 = <self::E3<dynamic, dynamic, dynamic>>[#C8]
 }
 
 
@@ -40,3 +52,4 @@
 - _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:16:9)
+- E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.transformed.expect
index cdcb164..494cf2f 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.transformed.expect
@@ -20,6 +20,15 @@
   method toString() → core::String
     return "E2.${this.{core::_Enum::_name}{core::String}}";
 }
+class E3<X extends core::num, Y extends core::String, Z extends (self::E3::X, self::E3::Y) → dynamic = (Never, Never) → dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3<core::num, core::String, (Never, Never) → dynamic>> values = #C9;
+  static const field self::E3<core::num, core::String, (core::num, core::String) → dynamic> element = #C8;
+  const constructor •(core::int index, core::String name) → self::E3<self::E3::X, self::E3::Y, self::E3::Z>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
 static method foo<X extends core::Object? = dynamic>(self::foo::X% x) → self::foo::X%
   return x;
 static method main() → dynamic {}
@@ -31,6 +40,9 @@
   #C4 = <self::E1>[#C3]
   #C5 = self::E2<<X extends core::Object? = dynamic>(X%) → X%> {index:#C1, _name:#C2}
   #C6 = <self::E2<dynamic>>[#C5]
+  #C7 = "element"
+  #C8 = self::E3<core::num, core::String, (core::num, core::String) → dynamic> {index:#C1, _name:#C7}
+  #C9 = <self::E3<dynamic, dynamic, dynamic>>[#C8]
 }
 
 
@@ -40,3 +52,4 @@
 - _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:16:9)
+- E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.textual_outline.expect
index 9f80f5b..707dc9c 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.textual_outline.expect
@@ -1,4 +1,5 @@
 X foo<X>(X x) => x;
 enum E1 { bar(foo); const E1(int Function(int) f); }
 enum E2<X> { bar(foo); const E2(X f); }
+enum E3<X extends num, Y extends String, Z extends Function(X, Y)> { element }
 main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.expect
index a6f1734..ae69448 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.expect
@@ -20,6 +20,15 @@
   method toString() → core::String
     return "E2.${this.{core::_Enum::_name}{core::String}}";
 }
+class E3<X extends core::num, Y extends core::String, Z extends (self::E3::X, self::E3::Y) → dynamic = (Never, Never) → dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3<core::num, core::String, (Never, Never) → dynamic>> values = #C9;
+  static const field self::E3<core::num, core::String, (core::num, core::String) → dynamic> element = #C8;
+  const constructor •(core::int index, core::String name) → self::E3<self::E3::X, self::E3::Y, self::E3::Z>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
 static method foo<X extends core::Object? = dynamic>(self::foo::X% x) → self::foo::X%
   return x;
 static method main() → dynamic {}
@@ -31,6 +40,9 @@
   #C4 = <self::E1*>[#C3]
   #C5 = self::E2<<X extends core::Object? = dynamic>(X*) →* X*> {index:#C1, _name:#C2}
   #C6 = <self::E2<dynamic>*>[#C5]
+  #C7 = "element"
+  #C8 = self::E3<core::num*, core::String*, (core::num*, core::String*) →* dynamic> {index:#C1, _name:#C7}
+  #C9 = <self::E3<dynamic, dynamic, dynamic>*>[#C8]
 }
 
 
@@ -40,3 +52,4 @@
 - _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:16:9)
+- E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.modular.expect
index a6f1734..ae69448 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.modular.expect
@@ -20,6 +20,15 @@
   method toString() → core::String
     return "E2.${this.{core::_Enum::_name}{core::String}}";
 }
+class E3<X extends core::num, Y extends core::String, Z extends (self::E3::X, self::E3::Y) → dynamic = (Never, Never) → dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3<core::num, core::String, (Never, Never) → dynamic>> values = #C9;
+  static const field self::E3<core::num, core::String, (core::num, core::String) → dynamic> element = #C8;
+  const constructor •(core::int index, core::String name) → self::E3<self::E3::X, self::E3::Y, self::E3::Z>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
 static method foo<X extends core::Object? = dynamic>(self::foo::X% x) → self::foo::X%
   return x;
 static method main() → dynamic {}
@@ -31,6 +40,9 @@
   #C4 = <self::E1*>[#C3]
   #C5 = self::E2<<X extends core::Object? = dynamic>(X*) →* X*> {index:#C1, _name:#C2}
   #C6 = <self::E2<dynamic>*>[#C5]
+  #C7 = "element"
+  #C8 = self::E3<core::num*, core::String*, (core::num*, core::String*) →* dynamic> {index:#C1, _name:#C7}
+  #C9 = <self::E3<dynamic, dynamic, dynamic>*>[#C8]
 }
 
 
@@ -40,3 +52,4 @@
 - _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:16:9)
+- E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.outline.expect
index 2a59034..399e220 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.outline.expect
@@ -20,6 +20,15 @@
   method toString() → core::String
     return "E2.${this.{core::_Enum::_name}{core::String}}";
 }
+class E3<X extends core::num, Y extends core::String, Z extends (self::E3::X, self::E3::Y) → dynamic = (Never, Never) → dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3<core::num, core::String, (Never, Never) → dynamic>> values = const <self::E3<dynamic, dynamic, dynamic>>[self::E3::element];
+  static const field self::E3<core::num, core::String, (core::num, core::String) → dynamic> element = const self::E3::•<core::num, core::String, (core::num, core::String) → dynamic>(0, "element");
+  const constructor •(core::int index, core::String name) → self::E3<self::E3::X, self::E3::Y, self::E3::Z>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
 static method foo<X extends core::Object? = dynamic>(self::foo::X% x) → self::foo::X%
   ;
 static method main() → dynamic
@@ -31,4 +40,6 @@
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///inference_in_constructor_parameters.dart:8:3 -> InstanceConstant(const E1{_Enum.index: 0, _Enum._name: "bar"})
 Evaluated: ListLiteral @ org-dartlang-testcase:///inference_in_constructor_parameters.dart:13:6 -> ListConstant(const <E2<dynamic>*>[const E2<X* Function<X>(X*)*>{_Enum.index: 0, _Enum._name: "bar"}])
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///inference_in_constructor_parameters.dart:14:3 -> InstanceConstant(const E2<X* Function<X>(X*)*>{_Enum.index: 0, _Enum._name: "bar"})
-Extra constant evaluation: evaluated: 14, effectively constant: 4
+Evaluated: ListLiteral @ org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6 -> ListConstant(const <E3<dynamic, dynamic, dynamic>*>[const E3<num*, String*, dynamic Function(num*, String*)*>{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///inference_in_constructor_parameters.dart:20:3 -> InstanceConstant(const E3<num*, String*, dynamic Function(num*, String*)*>{_Enum.index: 0, _Enum._name: "element"})
+Extra constant evaluation: evaluated: 21, effectively constant: 6
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.transformed.expect
index a6f1734..ae69448 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.transformed.expect
@@ -20,6 +20,15 @@
   method toString() → core::String
     return "E2.${this.{core::_Enum::_name}{core::String}}";
 }
+class E3<X extends core::num, Y extends core::String, Z extends (self::E3::X, self::E3::Y) → dynamic = (Never, Never) → dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3<core::num, core::String, (Never, Never) → dynamic>> values = #C9;
+  static const field self::E3<core::num, core::String, (core::num, core::String) → dynamic> element = #C8;
+  const constructor •(core::int index, core::String name) → self::E3<self::E3::X, self::E3::Y, self::E3::Z>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
 static method foo<X extends core::Object? = dynamic>(self::foo::X% x) → self::foo::X%
   return x;
 static method main() → dynamic {}
@@ -31,6 +40,9 @@
   #C4 = <self::E1*>[#C3]
   #C5 = self::E2<<X extends core::Object? = dynamic>(X*) →* X*> {index:#C1, _name:#C2}
   #C6 = <self::E2<dynamic>*>[#C5]
+  #C7 = "element"
+  #C8 = self::E3<core::num*, core::String*, (core::num*, core::String*) →* dynamic> {index:#C1, _name:#C7}
+  #C9 = <self::E3<dynamic, dynamic, dynamic>*>[#C8]
 }
 
 
@@ -40,3 +52,4 @@
 - _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:16:9)
+- E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart
new file mode 100644
index 0000000..1e4851f
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart
@@ -0,0 +1,20 @@
+// 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.
+
+// The test checks an execution path where _Enum as supertype was checked before
+// being resolved.
+
+mixin GM<T> on Enum {}
+
+mixin M on Object {}
+
+abstract class I {}
+
+abstract class GI<T> {}
+
+enum E<S extends num, T extends num>
+    with GM<T>, M
+    implements I, GI<S> { element }
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect
new file mode 100644
index 0000000..2a27047
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect
@@ -0,0 +1,54 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class GM<T extends core::Object? = dynamic> extends core::Enum /*isMixinDeclaration*/  {
+}
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I
+    : super core::Object::•()
+    ;
+}
+abstract class GI<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GI<self::GI::T%>
+    : super core::Object::•()
+    ;
+}
+abstract class _E&_Enum&GM<S extends core::num, T extends core::num> = core::_Enum with self::GM<self::_E&_Enum&GM::T> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&GM<self::_E&_Enum&GM::S, self::_E&_Enum&GM::T>
+    : super core::_Enum::•(index, _name)
+    ;
+}
+abstract class _E&_Enum&GM&M<S extends core::num, T extends core::num> = self::_E&_Enum&GM<self::_E&_Enum&GM&M::S, self::_E&_Enum&GM&M::T> with self::M /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&GM&M<self::_E&_Enum&GM&M::S, self::_E&_Enum&GM&M::T>
+    : super self::_E&_Enum&GM::•(index, _name)
+    ;
+}
+class E<S extends core::num, T extends core::num> extends self::_E&_Enum&GM&M<self::E::S, self::E::T> implements self::I, self::GI<self::E::S> /*isEnum*/  {
+  static const field core::List<self::E<core::num, core::num>> values = #C4;
+  static const field self::E<core::num, core::num> element = #C3;
+  const constructor •(core::int index, core::String name) → self::E<self::E::S, self::E::T>
+    : super self::_E&_Enum&GM&M::•(index, name)
+    ;
+  method toString() → core::String
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E<core::num, core::num> {index:#C1, _name:#C2}
+  #C4 = <self::E<dynamic, dynamic>>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///supertype_resolved_before_checking.dart:
+- E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
+- _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
+- _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.transformed.expect
new file mode 100644
index 0000000..f14e87d
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.transformed.expect
@@ -0,0 +1,54 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class GM<T extends core::Object? = dynamic> extends core::Enum /*isMixinDeclaration*/  {
+}
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I
+    : super core::Object::•()
+    ;
+}
+abstract class GI<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GI<self::GI::T%>
+    : super core::Object::•()
+    ;
+}
+abstract class _E&_Enum&GM<S extends core::num, T extends core::num> extends core::_Enum implements self::GM<self::_E&_Enum&GM::T> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&GM<self::_E&_Enum&GM::S, self::_E&_Enum&GM::T>
+    : super core::_Enum::•(index, _name)
+    ;
+}
+abstract class _E&_Enum&GM&M<S extends core::num, T extends core::num> extends self::_E&_Enum&GM<self::_E&_Enum&GM&M::S, self::_E&_Enum&GM&M::T> implements self::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&GM&M<self::_E&_Enum&GM&M::S, self::_E&_Enum&GM&M::T>
+    : super self::_E&_Enum&GM::•(index, _name)
+    ;
+}
+class E<S extends core::num, T extends core::num> extends self::_E&_Enum&GM&M<self::E::S, self::E::T> implements self::I, self::GI<self::E::S> /*isEnum*/  {
+  static const field core::List<self::E<core::num, core::num>> values = #C4;
+  static const field self::E<core::num, core::num> element = #C3;
+  const constructor •(core::int index, core::String name) → self::E<self::E::S, self::E::T>
+    : super self::_E&_Enum&GM&M::•(index, name)
+    ;
+  method toString() → core::String
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E<core::num, core::num> {index:#C1, _name:#C2}
+  #C4 = <self::E<dynamic, dynamic>>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///supertype_resolved_before_checking.dart:
+- E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
+- _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
+- _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.textual_outline.expect
new file mode 100644
index 0000000..5874d3e
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+mixin GM<T> on Enum {}
+mixin M on Object {}
+abstract class I {}
+abstract class GI<T> {}
+enum E<S extends num, T extends num> with GM<T>, M implements I, GI<S> { element }
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect
new file mode 100644
index 0000000..93e970e
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect
@@ -0,0 +1,54 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class GM<T extends core::Object? = dynamic> extends core::Enum /*isMixinDeclaration*/  {
+}
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I
+    : super core::Object::•()
+    ;
+}
+abstract class GI<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GI<self::GI::T%>
+    : super core::Object::•()
+    ;
+}
+abstract class _E&_Enum&GM<S extends core::num, T extends core::num> = core::_Enum with self::GM<self::_E&_Enum&GM::T> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&GM<self::_E&_Enum&GM::S, self::_E&_Enum&GM::T>
+    : super core::_Enum::•(index, _name)
+    ;
+}
+abstract class _E&_Enum&GM&M<S extends core::num, T extends core::num> = self::_E&_Enum&GM<self::_E&_Enum&GM&M::S, self::_E&_Enum&GM&M::T> with self::M /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&GM&M<self::_E&_Enum&GM&M::S, self::_E&_Enum&GM&M::T>
+    : super self::_E&_Enum&GM::•(index, _name)
+    ;
+}
+class E<S extends core::num, T extends core::num> extends self::_E&_Enum&GM&M<self::E::S, self::E::T> implements self::I, self::GI<self::E::S> /*isEnum*/  {
+  static const field core::List<self::E<core::num, core::num>> values = #C4;
+  static const field self::E<core::num, core::num> element = #C3;
+  const constructor •(core::int index, core::String name) → self::E<self::E::S, self::E::T>
+    : super self::_E&_Enum&GM&M::•(index, name)
+    ;
+  method toString() → core::String
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E<core::num*, core::num*> {index:#C1, _name:#C2}
+  #C4 = <self::E<dynamic, dynamic>*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///supertype_resolved_before_checking.dart:
+- E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
+- _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
+- _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.modular.expect
new file mode 100644
index 0000000..93e970e
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.modular.expect
@@ -0,0 +1,54 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class GM<T extends core::Object? = dynamic> extends core::Enum /*isMixinDeclaration*/  {
+}
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I
+    : super core::Object::•()
+    ;
+}
+abstract class GI<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GI<self::GI::T%>
+    : super core::Object::•()
+    ;
+}
+abstract class _E&_Enum&GM<S extends core::num, T extends core::num> = core::_Enum with self::GM<self::_E&_Enum&GM::T> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&GM<self::_E&_Enum&GM::S, self::_E&_Enum&GM::T>
+    : super core::_Enum::•(index, _name)
+    ;
+}
+abstract class _E&_Enum&GM&M<S extends core::num, T extends core::num> = self::_E&_Enum&GM<self::_E&_Enum&GM&M::S, self::_E&_Enum&GM&M::T> with self::M /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&GM&M<self::_E&_Enum&GM&M::S, self::_E&_Enum&GM&M::T>
+    : super self::_E&_Enum&GM::•(index, _name)
+    ;
+}
+class E<S extends core::num, T extends core::num> extends self::_E&_Enum&GM&M<self::E::S, self::E::T> implements self::I, self::GI<self::E::S> /*isEnum*/  {
+  static const field core::List<self::E<core::num, core::num>> values = #C4;
+  static const field self::E<core::num, core::num> element = #C3;
+  const constructor •(core::int index, core::String name) → self::E<self::E::S, self::E::T>
+    : super self::_E&_Enum&GM&M::•(index, name)
+    ;
+  method toString() → core::String
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E<core::num*, core::num*> {index:#C1, _name:#C2}
+  #C4 = <self::E<dynamic, dynamic>*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///supertype_resolved_before_checking.dart:
+- E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
+- _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
+- _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.outline.expect
new file mode 100644
index 0000000..7647f76
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.outline.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class GM<T extends core::Object? = dynamic> extends core::Enum /*isMixinDeclaration*/  {
+}
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I
+    ;
+}
+abstract class GI<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GI<self::GI::T%>
+    ;
+}
+abstract class _E&_Enum&GM<S extends core::num, T extends core::num> = core::_Enum with self::GM<self::_E&_Enum&GM::T> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&GM<self::_E&_Enum&GM::S, self::_E&_Enum&GM::T>
+    : super core::_Enum::•(index, _name)
+    ;
+}
+abstract class _E&_Enum&GM&M<S extends core::num, T extends core::num> = self::_E&_Enum&GM<self::_E&_Enum&GM&M::S, self::_E&_Enum&GM&M::T> with self::M /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&GM&M<self::_E&_Enum&GM&M::S, self::_E&_Enum&GM&M::T>
+    : super self::_E&_Enum&GM::•(index, _name)
+    ;
+}
+class E<S extends core::num, T extends core::num> extends self::_E&_Enum&GM&M<self::E::S, self::E::T> implements self::I, self::GI<self::E::S> /*isEnum*/  {
+  static const field core::List<self::E<core::num, core::num>> values = const <self::E<dynamic, dynamic>>[self::E::element];
+  static const field self::E<core::num, core::num> element = const self::E::•<core::num, core::num>(0, "element");
+  const constructor •(core::int index, core::String name) → self::E<self::E::S, self::E::T>
+    ;
+  method toString() → core::String
+    ;
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6 -> ListConstant(const <E<dynamic, dynamic>*>[const E<num*, num*>{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///supertype_resolved_before_checking.dart:18:27 -> InstanceConstant(const E<num*, num*>{})
+Extra constant evaluation: evaluated: 6, effectively constant: 2
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect
new file mode 100644
index 0000000..af64aef
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect
@@ -0,0 +1,54 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class GM<T extends core::Object? = dynamic> extends core::Enum /*isMixinDeclaration*/  {
+}
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I
+    : super core::Object::•()
+    ;
+}
+abstract class GI<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GI<self::GI::T%>
+    : super core::Object::•()
+    ;
+}
+abstract class _E&_Enum&GM<S extends core::num, T extends core::num> extends core::_Enum implements self::GM<self::_E&_Enum&GM::T> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&GM<self::_E&_Enum&GM::S, self::_E&_Enum&GM::T>
+    : super core::_Enum::•(index, _name)
+    ;
+}
+abstract class _E&_Enum&GM&M<S extends core::num, T extends core::num> extends self::_E&_Enum&GM<self::_E&_Enum&GM&M::S, self::_E&_Enum&GM&M::T> implements self::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&GM&M<self::_E&_Enum&GM&M::S, self::_E&_Enum&GM&M::T>
+    : super self::_E&_Enum&GM::•(index, _name)
+    ;
+}
+class E<S extends core::num, T extends core::num> extends self::_E&_Enum&GM&M<self::E::S, self::E::T> implements self::I, self::GI<self::E::S> /*isEnum*/  {
+  static const field core::List<self::E<core::num, core::num>> values = #C4;
+  static const field self::E<core::num, core::num> element = #C3;
+  const constructor •(core::int index, core::String name) → self::E<self::E::S, self::E::T>
+    : super self::_E&_Enum&GM&M::•(index, name)
+    ;
+  method toString() → core::String
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E<core::num*, core::num*> {index:#C1, _name:#C2}
+  #C4 = <self::E<dynamic, dynamic>*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///supertype_resolved_before_checking.dart:
+- E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
+- _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
+- _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 1995742..d95e1b6 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -40,6 +40,7 @@
 enhanced_enums/simple_fields: FormatterCrash
 enhanced_enums/simple_interfaces: FormatterCrash
 enhanced_enums/simple_mixins: FormatterCrash
+enhanced_enums/supertype_resolved_before_checking: FormatterCrash
 extension_types/basic_show: FormatterCrash
 extension_types/call_not_get: FormatterCrash
 extension_types/keyword_in_show_hide_element: FormatterCrash
diff --git a/tools/VERSION b/tools/VERSION
index b85d527..36036a4 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 31
+PRERELEASE 32
 PRERELEASE_PATCH 0
\ No newline at end of file
