diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 7a00b4e..6ecde36 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -1760,6 +1760,37 @@
       constructor.initializers.add(buildInvalidInitializer(buildProblem(
           fasta.messageConstructorNotSync, body!.fileOffset, noLength)));
     }
+    if (libraryBuilder.enableEnhancedEnumsInLibrary &&
+        classBuilder is SourceEnumBuilder &&
+        constructor.initializers.isNotEmpty &&
+        constructor.initializers.last is RedirectingInitializer) {
+      RedirectingInitializer redirectingInitializer =
+          constructor.initializers.last as RedirectingInitializer;
+      redirectingInitializer.arguments.positional.insertAll(0, [
+        new VariableGet(constructor.function.positionalParameters[0])
+          ..parent = redirectingInitializer.arguments,
+        new VariableGet(constructor.function.positionalParameters[1])
+          ..parent = redirectingInitializer.arguments
+      ]);
+
+      LocatedMessage? message = checkArgumentsForFunction(
+          redirectingInitializer.target.function,
+          redirectingInitializer.arguments,
+          builder.charOffset, const <TypeParameter>[]);
+      if (message != null) {
+        Initializer invalidInitializer = buildInvalidInitializer(
+            buildUnresolvedError(
+                forest.createNullLiteral(redirectingInitializer.fileOffset),
+                constructorNameForDiagnostics(builder.name, isSuper: false),
+                redirectingInitializer.arguments,
+                redirectingInitializer.fileOffset,
+                isSuper: false,
+                message: message,
+                kind: UnresolvedKind.Constructor));
+        constructor.initializers.removeLast();
+        constructor.initializers.add(invalidInitializer..parent = constructor);
+      }
+    }
     if (needsImplicitSuperInitializer) {
       /// >If no superinitializer is provided, an implicit superinitializer
       /// >of the form super() is added at the end of k’s initializer list,
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index ce46969..f792c94 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -4576,7 +4576,14 @@
       // The check of the arguments is done later for super initializers if the
       // 'super-parameters' language feature is enabled. In that case the
       // additional parameters can be added at a later stage.
-      if (!(isSuper && _helper.libraryBuilder.enableSuperParametersInLibrary)) {
+      bool isPotentialSuperParametersReceiver =
+          isSuper && _helper.libraryBuilder.enableSuperParametersInLibrary;
+      // Additional arguments are added to the redirecting initializer of an
+      // enum constructor, so the check is performed later.
+      bool isEnumConstructorRedirectingInitializer =
+          constructor.enclosingClass.isEnum;
+      if (!isPotentialSuperParametersReceiver &&
+          !isEnumConstructorRedirectingInitializer) {
         message = _helper.checkArgumentsForFunction(
             constructor.function, arguments, offset, <TypeParameter>[]);
       }
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 75da84f..2bd2dab 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -3114,14 +3114,6 @@
       int count,
       Token beginToken,
       Token endToken) {
-    // TODO(cstefantsova): Call endClassFields instead.
-    debugEvent("EnumFields");
-    popFieldInfos(count); // field infos
-    pop(); // type
-    pop(); // metadata
-    popDeclarationContext();
-    // Skip the declaration. An error as already been produced by the parser.
-
     if (!libraryBuilder.enableEnhancedEnumsInLibrary) {
       addProblem(
           templateExperimentNotEnabled.withArguments('enhanced-enums',
@@ -3129,6 +3121,8 @@
           beginToken.charOffset,
           -1);
     }
+    endClassFields(abstractToken, externalToken, staticToken, covariantToken,
+        lateToken, varFinalOrConst, count, beginToken, endToken);
   }
 
   @override
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart
new file mode 100644
index 0000000..e047de1
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+enum E1 {
+  one(1),
+  two.named(2);
+
+  final int foo;
+
+  const E1(this.foo);
+  const E1.named(int value) : this(value); // Ok.
+}
+
+enum E2 {
+  one(1),
+  two.named(2);
+
+  final int foo;
+
+  const E2(this.foo);
+  const E2.named(int value) : this(value, value); // Error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.expect
new file mode 100644
index 0000000..99bf4f6
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+// Try removing the extra positional arguments.
+//   const E2.named(int value) : this(value, value); // Error.
+//                                   ^
+//
+// pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:9: Error: Final field 'foo' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   const E2.named(int value) : this(value, value); // Error.
+//         ^^^^^
+// pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:19:13: Context: 'foo' is defined here.
+//   final int foo;
+//             ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C8;
+  static const field self::E1 one = #C4;
+  static const field self::E1 two = #C7;
+  final field core::int foo;
+  const constructor •(core::int index, core::String name, core::int foo) → self::E1
+    : self::E1::foo = foo, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, core::int value) → self::E1
+    : this self::E1::•(index, name, value)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  const E2.named(int value) : this(value, value); // Error.
+                                  ^";
+  static const field self::E2 one = #C9;
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  const E2.named(int value) : this(value, value); // Error.
+                                  ^";
+  final field core::int foo;
+  const constructor •(core::int index, core::String name, core::int foo) → self::E2
+    : self::E2::foo = foo, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, core::int value) → self::E2
+    : self::E2::foo = null, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  const E2.named(int value) : this(value, value); // Error.
+                                  ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = 0
+  #C3 = "one"
+  #C4 = self::E1 {foo:#C1, index:#C2, _name:#C3}
+  #C5 = 2
+  #C6 = "two"
+  #C7 = self::E1 {foo:#C5, index:#C1, _name:#C6}
+  #C8 = <self::E1>[#C4, #C7]
+  #C9 = self::E2 {foo:#C1, index:#C2, _name:#C3}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///redirecting_initializers.dart:
+- E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E1.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
+- E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
+- E2.named (from org-dartlang-testcase:///redirecting_initializers.dart:22:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect
new file mode 100644
index 0000000..99bf4f6
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+// Try removing the extra positional arguments.
+//   const E2.named(int value) : this(value, value); // Error.
+//                                   ^
+//
+// pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:9: Error: Final field 'foo' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   const E2.named(int value) : this(value, value); // Error.
+//         ^^^^^
+// pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:19:13: Context: 'foo' is defined here.
+//   final int foo;
+//             ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C8;
+  static const field self::E1 one = #C4;
+  static const field self::E1 two = #C7;
+  final field core::int foo;
+  const constructor •(core::int index, core::String name, core::int foo) → self::E1
+    : self::E1::foo = foo, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, core::int value) → self::E1
+    : this self::E1::•(index, name, value)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  const E2.named(int value) : this(value, value); // Error.
+                                  ^";
+  static const field self::E2 one = #C9;
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  const E2.named(int value) : this(value, value); // Error.
+                                  ^";
+  final field core::int foo;
+  const constructor •(core::int index, core::String name, core::int foo) → self::E2
+    : self::E2::foo = foo, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, core::int value) → self::E2
+    : self::E2::foo = null, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  const E2.named(int value) : this(value, value); // Error.
+                                  ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = 0
+  #C3 = "one"
+  #C4 = self::E1 {foo:#C1, index:#C2, _name:#C3}
+  #C5 = 2
+  #C6 = "two"
+  #C7 = self::E1 {foo:#C5, index:#C1, _name:#C6}
+  #C8 = <self::E1>[#C4, #C7]
+  #C9 = self::E2 {foo:#C1, index:#C2, _name:#C3}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///redirecting_initializers.dart:
+- E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E1.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
+- E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
+- E2.named (from org-dartlang-testcase:///redirecting_initializers.dart:22:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.textual_outline.expect
new file mode 100644
index 0000000..8246ad5
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+enum E1 { one(1), two.named(2); final int foo; const E1(this.foo); const E1.named(int value) : this(value); }
+enum E2 { one(1), two.named(2); final int foo; const E2(this.foo); const E2.named(int value) : this(value, value); }
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect
new file mode 100644
index 0000000..352aa87
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+// Try removing the extra positional arguments.
+//   const E2.named(int value) : this(value, value); // Error.
+//                                   ^
+//
+// pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:9: Error: Final field 'foo' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   const E2.named(int value) : this(value, value); // Error.
+//         ^^^^^
+// pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:19:13: Context: 'foo' is defined here.
+//   final int foo;
+//             ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C8;
+  static const field self::E1 one = #C4;
+  static const field self::E1 two = #C7;
+  final field core::int foo;
+  const constructor •(core::int index, core::String name, core::int foo) → self::E1
+    : self::E1::foo = foo, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, core::int value) → self::E1
+    : this self::E1::•(index, name, value)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  const E2.named(int value) : this(value, value); // Error.
+                                  ^";
+  static const field self::E2 one = #C9;
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  const E2.named(int value) : this(value, value); // Error.
+                                  ^";
+  final field core::int foo;
+  const constructor •(core::int index, core::String name, core::int foo) → self::E2
+    : self::E2::foo = foo, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, core::int value) → self::E2
+    : self::E2::foo = null, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  const E2.named(int value) : this(value, value); // Error.
+                                  ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = 0
+  #C3 = "one"
+  #C4 = self::E1 {foo:#C1, index:#C2, _name:#C3}
+  #C5 = 2
+  #C6 = "two"
+  #C7 = self::E1 {foo:#C5, index:#C1, _name:#C6}
+  #C8 = <self::E1*>[#C4, #C7]
+  #C9 = self::E2 {foo:#C1, index:#C2, _name:#C3}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///redirecting_initializers.dart:
+- E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E1.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
+- E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
+- E2.named (from org-dartlang-testcase:///redirecting_initializers.dart:22:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect
new file mode 100644
index 0000000..352aa87
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+// Try removing the extra positional arguments.
+//   const E2.named(int value) : this(value, value); // Error.
+//                                   ^
+//
+// pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:9: Error: Final field 'foo' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   const E2.named(int value) : this(value, value); // Error.
+//         ^^^^^
+// pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:19:13: Context: 'foo' is defined here.
+//   final int foo;
+//             ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C8;
+  static const field self::E1 one = #C4;
+  static const field self::E1 two = #C7;
+  final field core::int foo;
+  const constructor •(core::int index, core::String name, core::int foo) → self::E1
+    : self::E1::foo = foo, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, core::int value) → self::E1
+    : this self::E1::•(index, name, value)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  const E2.named(int value) : this(value, value); // Error.
+                                  ^";
+  static const field self::E2 one = #C9;
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  const E2.named(int value) : this(value, value); // Error.
+                                  ^";
+  final field core::int foo;
+  const constructor •(core::int index, core::String name, core::int foo) → self::E2
+    : self::E2::foo = foo, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, core::int value) → self::E2
+    : self::E2::foo = null, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  const E2.named(int value) : this(value, value); // Error.
+                                  ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = 0
+  #C3 = "one"
+  #C4 = self::E1 {foo:#C1, index:#C2, _name:#C3}
+  #C5 = 2
+  #C6 = "two"
+  #C7 = self::E1 {foo:#C5, index:#C1, _name:#C6}
+  #C8 = <self::E1*>[#C4, #C7]
+  #C9 = self::E2 {foo:#C1, index:#C2, _name:#C3}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///redirecting_initializers.dart:
+- E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E1.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
+- E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
+- E2.named (from org-dartlang-testcase:///redirecting_initializers.dart:22:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.outline.expect
new file mode 100644
index 0000000..6ded04c
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.outline.expect
@@ -0,0 +1,54 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+// Try removing the extra positional arguments.
+//   const E2.named(int value) : this(value, value); // Error.
+//                                   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = const <self::E1>[self::E1::one, self::E1::two];
+  static const field self::E1 one = const self::E1::•(0, "one", 1);
+  static const field self::E1 two = const self::E1::named(1, "two", 2);
+  final field core::int foo;
+  const constructor •(core::int index, core::String name, core::int foo) → self::E1
+    : self::E1::foo = foo, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, core::int value) → self::E1
+    : this self::E1::•(index, name, value)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = const <self::E2>[self::E2::one, self::E2::two];
+  static const field self::E2 one = const self::E2::•(0, "one", 1);
+  static const field self::E2 two = const self::E2::named(1, "two", 2);
+  final field core::int foo;
+  const constructor •(core::int index, core::String name, core::int foo) → self::E2
+    : self::E2::foo = foo, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, core::int value) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  const E2.named(int value) : this(value, value); // Error.
+                                  ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///redirecting_initializers.dart:5:6 -> ListConstant(const <E1*>[const E1{E1.foo: 1, _Enum.index: 0, _Enum._name: "one"}, const E1{E1.foo: 2, _Enum.index: 1, _Enum._name: "two"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_initializers.dart:6:3 -> InstanceConstant(const E1{E1.foo: 1, _Enum.index: 0, _Enum._name: "one"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_initializers.dart:7:3 -> InstanceConstant(const E1{E1.foo: 2, _Enum.index: 1, _Enum._name: "two"})
+Evaluated: StaticGet @ org-dartlang-testcase:///redirecting_initializers.dart:15:6 -> InstanceConstant(const E2{E2.foo: 1, _Enum.index: 0, _Enum._name: "one"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_initializers.dart:16:3 -> InstanceConstant(const E2{E2.foo: 1, _Enum.index: 0, _Enum._name: "one"})
+Extra constant evaluation: evaluated: 23, effectively constant: 5
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect
new file mode 100644
index 0000000..352aa87
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+// Try removing the extra positional arguments.
+//   const E2.named(int value) : this(value, value); // Error.
+//                                   ^
+//
+// pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:9: Error: Final field 'foo' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   const E2.named(int value) : this(value, value); // Error.
+//         ^^^^^
+// pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:19:13: Context: 'foo' is defined here.
+//   final int foo;
+//             ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C8;
+  static const field self::E1 one = #C4;
+  static const field self::E1 two = #C7;
+  final field core::int foo;
+  const constructor •(core::int index, core::String name, core::int foo) → self::E1
+    : self::E1::foo = foo, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, core::int value) → self::E1
+    : this self::E1::•(index, name, value)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  const E2.named(int value) : this(value, value); // Error.
+                                  ^";
+  static const field self::E2 one = #C9;
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  const E2.named(int value) : this(value, value); // Error.
+                                  ^";
+  final field core::int foo;
+  const constructor •(core::int index, core::String name, core::int foo) → self::E2
+    : self::E2::foo = foo, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, core::int value) → self::E2
+    : self::E2::foo = null, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  const E2.named(int value) : this(value, value); // Error.
+                                  ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = 0
+  #C3 = "one"
+  #C4 = self::E1 {foo:#C1, index:#C2, _name:#C3}
+  #C5 = 2
+  #C6 = "two"
+  #C7 = self::E1 {foo:#C5, index:#C1, _name:#C6}
+  #C8 = <self::E1*>[#C4, #C7]
+  #C9 = self::E2 {foo:#C1, index:#C2, _name:#C3}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///redirecting_initializers.dart:
+- E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E1.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
+- E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
+- E2.named (from org-dartlang-testcase:///redirecting_initializers.dart:22:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart
new file mode 100644
index 0000000..c82bd4d
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+enum E1 {
+  one(1),
+  two.named(2);
+
+  final int foo;
+
+  const E1(this.foo);
+
+  const E1.named(int value) : foo = value;
+}
+
+enum E2<X, Y> {
+  one<int, String>(1, "one"),
+  two.named("two", 2),
+  three.named("three", "three");
+
+  final X foo;
+  final Y bar;
+
+  const E2(this.foo, this.bar);
+  const E2.named(Y this.bar, X this.foo);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect
new file mode 100644
index 0000000..b546ffd
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect
@@ -0,0 +1,61 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C8;
+  static const field self::E1 one = #C4;
+  static const field self::E1 two = #C7;
+  final field core::int foo;
+  const constructor •(core::int index, core::String name, core::int foo) → self::E1
+    : self::E1::foo = foo, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, core::int value) → self::E1
+    : self::E1::foo = value, super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2<dynamic, dynamic>> values = #C13;
+  static const field self::E2<core::int, core::String> one = #C9;
+  static const field self::E2<core::int, core::String> two = #C10;
+  static const field self::E2<core::String, core::String> three = #C12;
+  final field self::E2::X% foo;
+  final field self::E2::Y% bar;
+  const constructor •(core::int index, core::String name, self::E2::X% foo, self::E2::Y% bar) → self::E2<self::E2::X%, self::E2::Y%>
+    : self::E2::foo = foo, self::E2::bar = bar, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, self::E2::Y% bar, self::E2::X% foo) → self::E2<self::E2::X%, self::E2::Y%>
+    : self::E2::bar = bar, self::E2::foo = foo, super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = 0
+  #C3 = "one"
+  #C4 = self::E1 {foo:#C1, index:#C2, _name:#C3}
+  #C5 = 2
+  #C6 = "two"
+  #C7 = self::E1 {foo:#C5, index:#C1, _name:#C6}
+  #C8 = <self::E1>[#C4, #C7]
+  #C9 = self::E2<core::int, core::String> {foo:#C1, bar:#C3, index:#C2, _name:#C3}
+  #C10 = self::E2<core::int, core::String> {foo:#C5, bar:#C6, index:#C1, _name:#C6}
+  #C11 = "three"
+  #C12 = self::E2<core::String, core::String> {foo:#C11, bar:#C11, index:#C5, _name:#C11}
+  #C13 = <self::E2<dynamic, dynamic>>[#C9, #C10, #C12]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///simple_fields.dart:
+- E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E1.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
+- E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
+- E2.named (from org-dartlang-testcase:///simple_fields.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect
new file mode 100644
index 0000000..b546ffd
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect
@@ -0,0 +1,61 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C8;
+  static const field self::E1 one = #C4;
+  static const field self::E1 two = #C7;
+  final field core::int foo;
+  const constructor •(core::int index, core::String name, core::int foo) → self::E1
+    : self::E1::foo = foo, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, core::int value) → self::E1
+    : self::E1::foo = value, super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2<dynamic, dynamic>> values = #C13;
+  static const field self::E2<core::int, core::String> one = #C9;
+  static const field self::E2<core::int, core::String> two = #C10;
+  static const field self::E2<core::String, core::String> three = #C12;
+  final field self::E2::X% foo;
+  final field self::E2::Y% bar;
+  const constructor •(core::int index, core::String name, self::E2::X% foo, self::E2::Y% bar) → self::E2<self::E2::X%, self::E2::Y%>
+    : self::E2::foo = foo, self::E2::bar = bar, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, self::E2::Y% bar, self::E2::X% foo) → self::E2<self::E2::X%, self::E2::Y%>
+    : self::E2::bar = bar, self::E2::foo = foo, super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = 0
+  #C3 = "one"
+  #C4 = self::E1 {foo:#C1, index:#C2, _name:#C3}
+  #C5 = 2
+  #C6 = "two"
+  #C7 = self::E1 {foo:#C5, index:#C1, _name:#C6}
+  #C8 = <self::E1>[#C4, #C7]
+  #C9 = self::E2<core::int, core::String> {foo:#C1, bar:#C3, index:#C2, _name:#C3}
+  #C10 = self::E2<core::int, core::String> {foo:#C5, bar:#C6, index:#C1, _name:#C6}
+  #C11 = "three"
+  #C12 = self::E2<core::String, core::String> {foo:#C11, bar:#C11, index:#C5, _name:#C11}
+  #C13 = <self::E2<dynamic, dynamic>>[#C9, #C10, #C12]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///simple_fields.dart:
+- E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E1.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
+- E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
+- E2.named (from org-dartlang-testcase:///simple_fields.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.textual_outline.expect
new file mode 100644
index 0000000..d11d9cd
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+enum E1 { one(1), two.named(2); final int foo; const E1(this.foo); const E1.named(int value) : foo = value; }
+enum E2<X, Y> { one<int, String>(1, "one"), two.named("two", 2), three.named("three", "three"); final X foo; final Y bar; const E2(this.foo, this.bar); const E2.named(Y this.bar, X this.foo); }
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect
new file mode 100644
index 0000000..c1e1607
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect
@@ -0,0 +1,61 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C8;
+  static const field self::E1 one = #C4;
+  static const field self::E1 two = #C7;
+  final field core::int foo;
+  const constructor •(core::int index, core::String name, core::int foo) → self::E1
+    : self::E1::foo = foo, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, core::int value) → self::E1
+    : self::E1::foo = value, super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2<dynamic, dynamic>> values = #C13;
+  static const field self::E2<core::int, core::String> one = #C9;
+  static const field self::E2<core::int, core::String> two = #C10;
+  static const field self::E2<core::String, core::String> three = #C12;
+  final field self::E2::X% foo;
+  final field self::E2::Y% bar;
+  const constructor •(core::int index, core::String name, self::E2::X% foo, self::E2::Y% bar) → self::E2<self::E2::X%, self::E2::Y%>
+    : self::E2::foo = foo, self::E2::bar = bar, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, self::E2::Y% bar, self::E2::X% foo) → self::E2<self::E2::X%, self::E2::Y%>
+    : self::E2::bar = bar, self::E2::foo = foo, super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = 0
+  #C3 = "one"
+  #C4 = self::E1 {foo:#C1, index:#C2, _name:#C3}
+  #C5 = 2
+  #C6 = "two"
+  #C7 = self::E1 {foo:#C5, index:#C1, _name:#C6}
+  #C8 = <self::E1*>[#C4, #C7]
+  #C9 = self::E2<core::int*, core::String*> {foo:#C1, bar:#C3, index:#C2, _name:#C3}
+  #C10 = self::E2<core::int*, core::String*> {foo:#C5, bar:#C6, index:#C1, _name:#C6}
+  #C11 = "three"
+  #C12 = self::E2<core::String*, core::String*> {foo:#C11, bar:#C11, index:#C5, _name:#C11}
+  #C13 = <self::E2<dynamic, dynamic>*>[#C9, #C10, #C12]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///simple_fields.dart:
+- E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E1.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
+- E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
+- E2.named (from org-dartlang-testcase:///simple_fields.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect
new file mode 100644
index 0000000..c1e1607
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect
@@ -0,0 +1,61 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C8;
+  static const field self::E1 one = #C4;
+  static const field self::E1 two = #C7;
+  final field core::int foo;
+  const constructor •(core::int index, core::String name, core::int foo) → self::E1
+    : self::E1::foo = foo, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, core::int value) → self::E1
+    : self::E1::foo = value, super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2<dynamic, dynamic>> values = #C13;
+  static const field self::E2<core::int, core::String> one = #C9;
+  static const field self::E2<core::int, core::String> two = #C10;
+  static const field self::E2<core::String, core::String> three = #C12;
+  final field self::E2::X% foo;
+  final field self::E2::Y% bar;
+  const constructor •(core::int index, core::String name, self::E2::X% foo, self::E2::Y% bar) → self::E2<self::E2::X%, self::E2::Y%>
+    : self::E2::foo = foo, self::E2::bar = bar, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, self::E2::Y% bar, self::E2::X% foo) → self::E2<self::E2::X%, self::E2::Y%>
+    : self::E2::bar = bar, self::E2::foo = foo, super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = 0
+  #C3 = "one"
+  #C4 = self::E1 {foo:#C1, index:#C2, _name:#C3}
+  #C5 = 2
+  #C6 = "two"
+  #C7 = self::E1 {foo:#C5, index:#C1, _name:#C6}
+  #C8 = <self::E1*>[#C4, #C7]
+  #C9 = self::E2<core::int*, core::String*> {foo:#C1, bar:#C3, index:#C2, _name:#C3}
+  #C10 = self::E2<core::int*, core::String*> {foo:#C5, bar:#C6, index:#C1, _name:#C6}
+  #C11 = "three"
+  #C12 = self::E2<core::String*, core::String*> {foo:#C11, bar:#C11, index:#C5, _name:#C11}
+  #C13 = <self::E2<dynamic, dynamic>*>[#C9, #C10, #C12]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///simple_fields.dart:
+- E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E1.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
+- E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
+- E2.named (from org-dartlang-testcase:///simple_fields.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.outline.expect
new file mode 100644
index 0000000..e4af5a2
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.outline.expect
@@ -0,0 +1,47 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = const <self::E1>[self::E1::one, self::E1::two];
+  static const field self::E1 one = const self::E1::•(0, "one", 1);
+  static const field self::E1 two = const self::E1::named(1, "two", 2);
+  final field core::int foo;
+  const constructor •(core::int index, core::String name, core::int foo) → self::E1
+    : self::E1::foo = foo, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, core::int value) → self::E1
+    : self::E1::foo = value, super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2<dynamic, dynamic>> values = const <self::E2<dynamic, dynamic>>[self::E2::one, self::E2::two, self::E2::three];
+  static const field self::E2<core::int, core::String> one = const self::E2::•<core::int, core::String>(0, "one", 1, "one");
+  static const field self::E2<core::int, core::String> two = const self::E2::named<core::int, core::String>(1, "two", "two", 2);
+  static const field self::E2<core::String, core::String> three = const self::E2::named<core::String, core::String>(2, "three", "three", "three");
+  final field self::E2::X% foo;
+  final field self::E2::Y% bar;
+  const constructor •(core::int index, core::String name, self::E2::X% foo, self::E2::Y% bar) → self::E2<self::E2::X%, self::E2::Y%>
+    : self::E2::foo = foo, self::E2::bar = bar, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, self::E2::Y% bar, self::E2::X% foo) → self::E2<self::E2::X%, self::E2::Y%>
+    : self::E2::bar = bar, self::E2::foo = foo, super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///simple_fields.dart:5:6 -> ListConstant(const <E1*>[const E1{E1.foo: 1, _Enum.index: 0, _Enum._name: "one"}, const E1{E1.foo: 2, _Enum.index: 1, _Enum._name: "two"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///simple_fields.dart:6:3 -> InstanceConstant(const E1{E1.foo: 1, _Enum.index: 0, _Enum._name: "one"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///simple_fields.dart:7:3 -> InstanceConstant(const E1{E1.foo: 2, _Enum.index: 1, _Enum._name: "two"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///simple_fields.dart:16:6 -> ListConstant(const <E2<dynamic, dynamic>*>[const E2<int*, String*>{E2.foo: 1, E2.bar: "one", _Enum.index: 0, _Enum._name: "one"}, const E2<int*, String*>{E2.foo: 2, E2.bar: "two", _Enum.index: 1, _Enum._name: "two"}, const E2<String*, String*>{E2.foo: "three", E2.bar: "three", _Enum.index: 2, _Enum._name: "three"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///simple_fields.dart:17:3 -> InstanceConstant(const E2<int*, String*>{E2.foo: 1, E2.bar: "one", _Enum.index: 0, _Enum._name: "one"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///simple_fields.dart:18:3 -> InstanceConstant(const E2<int*, String*>{E2.foo: 2, E2.bar: "two", _Enum.index: 1, _Enum._name: "two"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///simple_fields.dart:19:3 -> InstanceConstant(const E2<String*, String*>{E2.foo: "three", E2.bar: "three", _Enum.index: 2, _Enum._name: "three"})
+Extra constant evaluation: evaluated: 27, effectively constant: 7
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect
new file mode 100644
index 0000000..c1e1607
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect
@@ -0,0 +1,61 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C8;
+  static const field self::E1 one = #C4;
+  static const field self::E1 two = #C7;
+  final field core::int foo;
+  const constructor •(core::int index, core::String name, core::int foo) → self::E1
+    : self::E1::foo = foo, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, core::int value) → self::E1
+    : self::E1::foo = value, super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2<dynamic, dynamic>> values = #C13;
+  static const field self::E2<core::int, core::String> one = #C9;
+  static const field self::E2<core::int, core::String> two = #C10;
+  static const field self::E2<core::String, core::String> three = #C12;
+  final field self::E2::X% foo;
+  final field self::E2::Y% bar;
+  const constructor •(core::int index, core::String name, self::E2::X% foo, self::E2::Y% bar) → self::E2<self::E2::X%, self::E2::Y%>
+    : self::E2::foo = foo, self::E2::bar = bar, super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name, self::E2::Y% bar, self::E2::X% foo) → self::E2<self::E2::X%, self::E2::Y%>
+    : self::E2::bar = bar, self::E2::foo = foo, super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = 0
+  #C3 = "one"
+  #C4 = self::E1 {foo:#C1, index:#C2, _name:#C3}
+  #C5 = 2
+  #C6 = "two"
+  #C7 = self::E1 {foo:#C5, index:#C1, _name:#C6}
+  #C8 = <self::E1*>[#C4, #C7]
+  #C9 = self::E2<core::int*, core::String*> {foo:#C1, bar:#C3, index:#C2, _name:#C3}
+  #C10 = self::E2<core::int*, core::String*> {foo:#C5, bar:#C6, index:#C1, _name:#C6}
+  #C11 = "three"
+  #C12 = self::E2<core::String*, core::String*> {foo:#C11, bar:#C11, index:#C5, _name:#C11}
+  #C13 = <self::E2<dynamic, dynamic>*>[#C9, #C10, #C12]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///simple_fields.dart:
+- E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E1.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
+- E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
+- E2.named (from org-dartlang-testcase:///simple_fields.dart:25:9)
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index bc8ab91..386be8a 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -31,6 +31,8 @@
 enhanced_enums/entries_with_type_arguments: FormatterCrash
 enhanced_enums/inference_in_constructor_parameters: FormatterCrash
 enhanced_enums/qualified_names_with_no_type_arguments: FormatterCrash
+enhanced_enums/redirecting_initializers: FormatterCrash
+enhanced_enums/simple_fields: FormatterCrash
 extension_types/basic_show: FormatterCrash
 extension_types/call_not_get: FormatterCrash
 extension_types/keyword_in_show_hide_element: FormatterCrash
diff --git a/pkg/native_stack_traces/CHANGELOG.md b/pkg/native_stack_traces/CHANGELOG.md
index 12bf080..5ad01eb 100644
--- a/pkg/native_stack_traces/CHANGELOG.md
+++ b/pkg/native_stack_traces/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.4.5
+
+- Handle stack traces larger than 100 entries.
+
 ## 0.4.5-dev
 
 - Require Dart >= 2.14
diff --git a/pkg/native_stack_traces/pubspec.yaml b/pkg/native_stack_traces/pubspec.yaml
index 1110d5c..0247ac9 100644
--- a/pkg/native_stack_traces/pubspec.yaml
+++ b/pkg/native_stack_traces/pubspec.yaml
@@ -1,6 +1,6 @@
 name: native_stack_traces
 description: Utilities for working with non-symbolic stack traces.
-version: 0.4.5-dev
+version: 0.4.5
 
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/native_stack_traces
 
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index 3bfb9a8..b4dcf19 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -435,22 +435,6 @@
   }
 }
 
-void Assembler::LoadWordFromPoolIndexFixed(Register dst, intptr_t index) {
-  ASSERT(constant_pool_allowed());
-  ASSERT(dst != PP);
-  Operand op;
-  // PP is _un_tagged on ARM64.
-  const uint32_t offset = target::ObjectPool::element_offset(index);
-  const uint32_t upper20 = offset & 0xfffff000;
-  const uint32_t lower12 = offset & 0x00000fff;
-  const Operand::OperandType ot =
-      Operand::CanHold(upper20, kXRegSizeInBits, &op);
-  ASSERT(ot == Operand::Immediate);
-  ASSERT(Address::CanHoldOffset(lower12));
-  add(dst, PP, op);
-  ldr(dst, Address(dst, lower12));
-}
-
 void Assembler::LoadDoubleWordFromPoolIndex(Register lower,
                                             Register upper,
                                             intptr_t index) {
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h
index 886ab74..554f4d8 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.h
+++ b/runtime/vm/compiler/assembler/assembler_arm64.h
@@ -2250,8 +2250,6 @@
 
   compiler::LRState lr_state_ = compiler::LRState::OnEntry();
 
-  void LoadWordFromPoolIndexFixed(Register dst, intptr_t index);
-
   // Note: the function never clobbers TMP, TMP2 scratch registers.
   void LoadObjectHelper(Register dst, const Object& obj, bool is_unique);
 
diff --git a/tools/VERSION b/tools/VERSION
index 01443da..40a0483 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 16
 PATCH 0
-PRERELEASE 148
+PRERELEASE 149
 PRERELEASE_PATCH 0
\ No newline at end of file
