[cfe] Report errors on restricted instance members in enums

Part of https://github.com/dart-lang/sdk/issues/47453

Change-Id: I2fddd2ad5da82807fef7e9ed1d7a6781fde38600
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/237365
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Chloe Stefantsova <cstefantsova@google.com>
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index 620fd67..40c42a8 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -2778,14 +2778,38 @@
     problemMessage: r"""Enum constructors can't be torn off.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)>
+    templateEnumContainsRestrictedInstanceDeclaration =
+    const Template<Message Function(String name)>(
+        problemMessageTemplate:
+            r"""An enum can't declare a non-abstract member named '#name'.""",
+        withArguments: _withArgumentsEnumContainsRestrictedInstanceDeclaration);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)>
+    codeEnumContainsRestrictedInstanceDeclaration =
+    const Code<Message Function(String name)>(
+  "EnumContainsRestrictedInstanceDeclaration",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsEnumContainsRestrictedInstanceDeclaration(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeEnumContainsRestrictedInstanceDeclaration,
+      problemMessage:
+          """An enum can't declare a non-abstract member named '${name}'.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeEnumContainsValuesDeclaration =
     messageEnumContainsValuesDeclaration;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageEnumContainsValuesDeclaration = const MessageCode(
     "EnumContainsValuesDeclaration",
-    problemMessage:
-        r"""Enums can't contain declarations of members with the name 'values'.""");
+    problemMessage: r"""An enum can't declare a member named 'values'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeEnumDeclarationEmpty = messageEnumDeclarationEmpty;
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 0d215bd..8910926 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
@@ -36,6 +36,7 @@
         templateDuplicatedDeclaration,
         templateDuplicatedDeclarationCause,
         templateDuplicatedDeclarationSyntheticCause,
+        templateEnumContainsRestrictedInstanceDeclaration,
         templateEnumConstantSameNameAsEnclosing;
 
 import '../kernel/body_builder.dart';
@@ -271,6 +272,28 @@
           fileUri);
     }
 
+    for (String restrictedInstanceMemberName in const [
+      "index",
+      "hashCode",
+      "=="
+    ]) {
+      Builder? customIndexDeclaration =
+          scope.lookupLocalMember(restrictedInstanceMemberName, setter: false);
+      if (customIndexDeclaration is MemberBuilder &&
+          !customIndexDeclaration.isAbstract) {
+        // Retrieve the earliest declaration for error reporting.
+        while (customIndexDeclaration?.next != null) {
+          customIndexDeclaration = customIndexDeclaration?.next;
+        }
+        parent.addProblem(
+            templateEnumContainsRestrictedInstanceDeclaration
+                .withArguments(restrictedInstanceMemberName),
+            customIndexDeclaration!.charOffset,
+            customIndexDeclaration.fullNameForErrors.length,
+            fileUri);
+      }
+    }
+
     SourceFieldBuilder valuesBuilder = new SourceFieldBuilder(
         /* metadata = */ null,
         listType,
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index ba85304..5ea9761 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -217,6 +217,8 @@
 EnumConstructorSuperInitializer/example: Fail
 EnumConstructorTearoff/analyzerCode: Fail
 EnumConstructorTearoff/example: Fail
+EnumContainsRestrictedInstanceDeclaration/analyzerCode: Fail
+EnumContainsRestrictedInstanceDeclaration/example: Fail
 EnumContainsValuesDeclaration/analyzerCode: Fail
 EnumContainsValuesDeclaration/example: Fail
 EnumDeclaresConstFactory/analyzerCode: Fail
@@ -225,6 +227,8 @@
 EnumDeclaresFactory/example: Fail
 EnumFactoryRedirectsToConstructor/analyzerCode: Fail
 EnumFactoryRedirectsToConstructor/example: Fail
+EnumImplementerContainsForbiddedInstanceDeclaration/analyzerCode: Fail
+EnumImplementerContainsForbiddedInstanceDeclaration/example: Fail
 EnumImplementerContainsValuesDeclaration/analyzerCode: Fail
 EnumImplementerContainsValuesDeclaration/example: Fail
 EnumInstantiation/example: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index b8822fa..730af31 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -5493,7 +5493,7 @@
   problemMessage: "Enum factory constructors can't redirect to generative constructors."
 
 EnumContainsValuesDeclaration:
-  problemMessage: "Enums can't contain declarations of members with the name 'values'."
+  problemMessage: "An enum can't declare a member named 'values'."
 
 EnumImplementerContainsValuesDeclaration:
   problemMessage: "'#name' has 'Enum' as a superinterface and can't contain non-static member with name 'values'."
@@ -5516,3 +5516,6 @@
 
 OptionalSuperParameterWithoutInitializer:
   problemMessage: "Type '#type' of the optional super-initializer parameter '#name' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor."
+
+EnumContainsRestrictedInstanceDeclaration:
+  problemMessage: "An enum can't declare a non-abstract member named '#name'."
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_equals.dart b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart
new file mode 100644
index 0000000..dbad564
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+enum E1 {
+  element;
+
+  bool operator==(Object other) => true; // Error.
+}
+
+enum E2 {
+  element;
+
+  bool operator==(Object other); // Ok.
+}
+
+abstract class I3 {
+  bool operator==(Object other);
+}
+
+enum E3 implements I3 { element } // Ok.
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.strong.expect
new file mode 100644
index 0000000..b0f0e52
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.strong.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_equals.dart:8:16: Error: An enum can't declare a non-abstract member named '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class I3 extends core::Object {
+  synthetic constructor •() → self::I3
+    : super core::Object::•()
+    ;
+  abstract operator ==(core::Object other) → core::bool;
+}
+class E3 extends core::_Enum implements self::I3 /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3>[#C7]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_equals.dart:
+- E1. (from org-dartlang-testcase:///declared_equals.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_equals.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_equals.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.strong.transformed.expect
new file mode 100644
index 0000000..b0f0e52
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.strong.transformed.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_equals.dart:8:16: Error: An enum can't declare a non-abstract member named '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class I3 extends core::Object {
+  synthetic constructor •() → self::I3
+    : super core::Object::•()
+    ;
+  abstract operator ==(core::Object other) → core::bool;
+}
+class E3 extends core::_Enum implements self::I3 /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3>[#C7]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_equals.dart:
+- E1. (from org-dartlang-testcase:///declared_equals.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_equals.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_equals.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.textual_outline.expect
new file mode 100644
index 0000000..22f42d5
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+enum E1 {
+  element;
+
+  bool operator ==(Object other) => true;
+}
+
+enum E2 {
+  element;
+
+  bool operator ==(Object other);
+}
+
+abstract class I3 {
+  bool operator ==(Object other);
+}
+
+enum E3 implements I3 { element }
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..a705c86
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+abstract class I3 {
+  bool operator ==(Object other);
+}
+
+enum E1 {
+  element;
+
+  bool operator ==(Object other) => true;
+}
+
+enum E2 {
+  element;
+
+  bool operator ==(Object other);
+}
+
+enum E3 implements I3 { element }
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.expect
new file mode 100644
index 0000000..e9a2e61
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_equals.dart:8:16: Error: An enum can't declare a non-abstract member named '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class I3 extends core::Object {
+  synthetic constructor •() → self::I3
+    : super core::Object::•()
+    ;
+  abstract operator ==(core::Object other) → core::bool;
+}
+class E3 extends core::_Enum implements self::I3 /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3*>[#C7]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_equals.dart:
+- E1. (from org-dartlang-testcase:///declared_equals.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_equals.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_equals.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.modular.expect
new file mode 100644
index 0000000..e9a2e61
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.modular.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_equals.dart:8:16: Error: An enum can't declare a non-abstract member named '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class I3 extends core::Object {
+  synthetic constructor •() → self::I3
+    : super core::Object::•()
+    ;
+  abstract operator ==(core::Object other) → core::bool;
+}
+class E3 extends core::_Enum implements self::I3 /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3*>[#C7]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_equals.dart:
+- E1. (from org-dartlang-testcase:///declared_equals.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_equals.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_equals.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.outline.expect
new file mode 100644
index 0000000..9e49691
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.outline.expect
@@ -0,0 +1,58 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_equals.dart:8:16: Error: An enum can't declare a non-abstract member named '=='.
+//   bool operator==(Object other) => true; // 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::element];
+  static const field self::E1 element = const self::E1::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  operator ==(core::Object other) → core::bool
+    ;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = const <self::E2>[self::E2::element];
+  static const field self::E2 element = const self::E2::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class I3 extends core::Object {
+  synthetic constructor •() → self::I3
+    ;
+  abstract operator ==(core::Object other) → core::bool;
+}
+class E3 extends core::_Enum implements self::I3 /*isEnum*/  {
+  static const field core::List<self::E3> values = const <self::E3>[self::E3::element];
+  static const field self::E3 element = const self::E3::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_equals.dart:5:6 -> ListConstant(const <E1*>[const E1{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_equals.dart:6:3 -> InstanceConstant(const E1{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_equals.dart:11:6 -> ListConstant(const <E2*>[const E2{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_equals.dart:12:3 -> InstanceConstant(const E2{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_equals.dart:21:6 -> ListConstant(const <E3*>[const E3{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_equals.dart:21:25 -> InstanceConstant(const E3{_Enum.index: 0, _Enum._name: "element"})
+Extra constant evaluation: evaluated: 21, effectively constant: 6
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.transformed.expect
new file mode 100644
index 0000000..e9a2e61
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.transformed.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_equals.dart:8:16: Error: An enum can't declare a non-abstract member named '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class I3 extends core::Object {
+  synthetic constructor •() → self::I3
+    : super core::Object::•()
+    ;
+  abstract operator ==(core::Object other) → core::bool;
+}
+class E3 extends core::_Enum implements self::I3 /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3*>[#C7]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_equals.dart:
+- E1. (from org-dartlang-testcase:///declared_equals.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_equals.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_equals.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart
new file mode 100644
index 0000000..2630888
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart
@@ -0,0 +1,89 @@
+// 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.
+
+enum E1 {
+  element;
+
+  int get hashCode => 42; // Error.
+}
+
+enum E2 {
+  element;
+
+  String get hashCode => "foo"; // Error.
+}
+
+enum E3 {
+  element;
+
+  final int hashCode = 42; // Error.
+}
+
+enum E4 {
+  element;
+
+  List<String> hashCode() => []; // Error.
+}
+
+enum E5 {
+  element;
+
+  Never get hashCode => throw 42; // Error.
+}
+
+enum E6 {
+  element;
+
+  final int foo = 0, hashCode = 1, bar = 2; // Error.
+}
+
+enum E7 {
+  element;
+
+  void set hashCode(int value) {} // Ok.
+
+  int get hashCode; // Ok.
+}
+
+enum E8 {
+  element;
+
+  void set hashCode(String value) {} // Error.
+}
+
+enum E9 {
+  element;
+
+  double get hashCode; // Error.
+}
+
+enum E10 {
+  element;
+
+  static int get hashCode => 42; // Error.
+}
+
+enum E11 {
+  element;
+
+  static void set hashCode(int value) {} // Error.
+}
+
+enum E12 {
+  hashCode // Error.
+}
+
+abstract class I13 {
+  int get hashCode;
+}
+
+enum E13 implements I13 { element } // Ok.
+
+abstract class I14 {
+  Never get hashCode;
+}
+
+enum E14 implements I14 { element } // Error.
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.strong.expect
new file mode 100644
index 0000000..b907c0c
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.strong.expect
@@ -0,0 +1,324 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:8:11: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   int get hashCode => 42; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:14:14: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   String get hashCode => "foo"; // Error.
+//              ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:20:13: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   final int hashCode = 42; // Error.
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:26:16: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   List<String> hashCode() => []; // Error.
+//                ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:32:13: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   Never get hashCode => throw 42; // Error.
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:38:22: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   final int foo = 0, hashCode = 1, bar = 2; // Error.
+//                      ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:64:18: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   static int get hashCode => 42; // Error.
+//                  ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:26:16: Error: Can't declare a member that conflicts with an inherited one.
+//   List<String> hashCode() => []; // Error.
+//                ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:64:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get hashCode => 42; // Error.
+//                  ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:70:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set hashCode(int value) {} // Error.
+//                   ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:74:3: Error: Can't declare a member that conflicts with an inherited one.
+//   hashCode // Error.
+//   ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:14:14: Error: The return type of the method 'E2.hashCode' is 'String', which does not match the return type, 'int', of the overridden method, 'Object.hashCode'.
+// Change to a subtype of 'int'.
+//   String get hashCode => "foo"; // Error.
+//              ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the overridden method ('hashCode').
+//   int get hashCode => _getHash(this);
+//           ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:52:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'String' of the setter 'E8.hashCode'.
+//   void set hashCode(String value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:58:14: Error: The return type of the method 'E9.hashCode' is 'double', which does not match the return type, 'int', of the overridden method, 'Object.hashCode'.
+// Change to a subtype of 'int'.
+//   double get hashCode; // Error.
+//              ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the overridden method ('hashCode').
+//   int get hashCode => _getHash(this);
+//           ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:55:6: Error: The implementation of 'hashCode' in the non-abstract class 'E9' does not conform to its interface.
+// enum E9 {
+//      ^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: The return type of the method 'Object.hashCode' is 'int', which does not match the return type, 'double', of the overridden method, 'E9.hashCode'.
+// Change to a subtype of 'double'.
+//   int get hashCode => _getHash(this);
+//           ^
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:58:14: Context: This is the overridden method ('hashCode').
+//   double get hashCode; // Error.
+//              ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:87:6: Error: The implementation of 'hashCode' in the non-abstract class 'E14' does not conform to its interface.
+// enum E14 implements I14 { element } // Error.
+//      ^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: The return type of the method 'Object.hashCode' is 'int', which does not match the return type, 'Never', of the overridden method, 'I14.hashCode'.
+// Change to a subtype of 'Never'.
+//   int get hashCode => _getHash(this);
+//           ^
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:84:13: Context: This is the overridden method ('hashCode').
+//   Never get hashCode;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → core::int
+    return 42;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → core::String
+    return "foo";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C9;
+  final field core::int hashCode = 42;
+  static const field self::E3 element = #C8;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C11;
+  static const field self::E4 element = #C10;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  method hashCode() → core::List<core::String>
+    return <core::String>[];
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C13;
+  static const field self::E5 element = #C12;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → Never
+    return throw 42;
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C17;
+  final field core::int foo = 0;
+  final field core::int hashCode = 1;
+  final field core::int bar = 2;
+  static const field self::E6 element = #C16;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C19;
+  static const field self::E7 element = #C18;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  set hashCode(core::int value) → void {}
+  abstract get hashCode() → core::int;
+}
+class E8 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E8> values = #C21;
+  static const field self::E8 element = #C20;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+  set hashCode(core::String value) → void {}
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = #C23;
+  static const field self::E9 element = #C22;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+  abstract get hashCode() → core::double;
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = #C25;
+  static const field self::E10 element = #C24;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+  static get hashCode() → core::int
+    return 42;
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = #C27;
+  static const field self::E11 element = #C26;
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+  static set hashCode(core::int value) → void {}
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = #C30;
+  static const field self::E12 hashCode = #C29;
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I13 extends core::Object {
+  synthetic constructor •() → self::I13
+    : super core::Object::•()
+    ;
+  abstract get hashCode() → core::int;
+}
+class E13 extends core::_Enum implements self::I13 /*isEnum*/  {
+  static const field core::List<self::E13> values = #C32;
+  static const field self::E13 element = #C31;
+  const constructor •(core::int index, core::String name) → self::E13
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I14 extends core::Object {
+  synthetic constructor •() → self::I14
+    : super core::Object::•()
+    ;
+  abstract get hashCode() → Never;
+}
+class E14 extends core::_Enum implements self::I14 /*isEnum*/  {
+  static const field core::List<self::E14> values = #C34;
+  static const field self::E14 element = #C33;
+  const constructor •(core::int index, core::String name) → self::E14
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get hashCode() → Never; -> self::I14::hashCode
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2>[#C5]
+  #C7 = 42
+  #C8 = self::E3 {hashCode:#C7, index:#C1, _name:#C2}
+  #C9 = <self::E3>[#C8]
+  #C10 = self::E4 {index:#C1, _name:#C2}
+  #C11 = <self::E4>[#C10]
+  #C12 = self::E5 {index:#C1, _name:#C2}
+  #C13 = <self::E5>[#C12]
+  #C14 = 1
+  #C15 = 2
+  #C16 = self::E6 {foo:#C1, hashCode:#C14, bar:#C15, index:#C1, _name:#C2}
+  #C17 = <self::E6>[#C16]
+  #C18 = self::E7 {index:#C1, _name:#C2}
+  #C19 = <self::E7>[#C18]
+  #C20 = self::E8 {index:#C1, _name:#C2}
+  #C21 = <self::E8>[#C20]
+  #C22 = self::E9 {index:#C1, _name:#C2}
+  #C23 = <self::E9>[#C22]
+  #C24 = self::E10 {index:#C1, _name:#C2}
+  #C25 = <self::E10>[#C24]
+  #C26 = self::E11 {index:#C1, _name:#C2}
+  #C27 = <self::E11>[#C26]
+  #C28 = "hashCode"
+  #C29 = self::E12 {index:#C1, _name:#C28}
+  #C30 = <self::E12>[#C29]
+  #C31 = self::E13 {index:#C1, _name:#C2}
+  #C32 = <self::E13>[#C31]
+  #C33 = self::E14 {index:#C1, _name:#C2}
+  #C34 = <self::E14>[#C33]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_hashcode.dart:
+- E1. (from org-dartlang-testcase:///declared_hashcode.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_hashcode.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_hashcode.dart:17:6)
+- E4. (from org-dartlang-testcase:///declared_hashcode.dart:23:6)
+- E5. (from org-dartlang-testcase:///declared_hashcode.dart:29:6)
+- E6. (from org-dartlang-testcase:///declared_hashcode.dart:35:6)
+- E7. (from org-dartlang-testcase:///declared_hashcode.dart:41:6)
+- E8. (from org-dartlang-testcase:///declared_hashcode.dart:49:6)
+- E9. (from org-dartlang-testcase:///declared_hashcode.dart:55:6)
+- E10. (from org-dartlang-testcase:///declared_hashcode.dart:61:6)
+- E11. (from org-dartlang-testcase:///declared_hashcode.dart:67:6)
+- E12. (from org-dartlang-testcase:///declared_hashcode.dart:73:6)
+- E13. (from org-dartlang-testcase:///declared_hashcode.dart:81:6)
+- E14. (from org-dartlang-testcase:///declared_hashcode.dart:87:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.textual_outline.expect
new file mode 100644
index 0000000..b68bbf2
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.textual_outline.expect
@@ -0,0 +1,82 @@
+enum E1 {
+  element;
+
+  int get hashCode => 42;
+}
+
+enum E2 {
+  element;
+
+  String get hashCode => "foo";
+}
+
+enum E3 {
+  element;
+
+  final int hashCode = 42;
+}
+
+enum E4 {
+  element;
+
+  List<String> hashCode() => [];
+}
+
+enum E5 {
+  element;
+
+  Never get hashCode => throw 42;
+}
+
+enum E6 {
+  element;
+
+  final int foo = 0, hashCode = 1, bar = 2;
+}
+
+enum E7 {
+  element;
+
+  void set hashCode(int value) {}
+  int get hashCode;
+}
+
+enum E8 {
+  element;
+
+  void set hashCode(String value) {}
+}
+
+enum E9 {
+  element;
+
+  double get hashCode;
+}
+
+enum E10 {
+  element;
+
+  static int get hashCode => 42;
+}
+
+enum E11 {
+  element;
+
+  static void set hashCode(int value) {}
+}
+
+enum E12 { hashCode }
+
+abstract class I13 {
+  int get hashCode;
+}
+
+enum E13 implements I13 { element }
+
+abstract class I14 {
+  Never get hashCode;
+}
+
+enum E14 implements I14 { element }
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..808b575
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.textual_outline_modelled.expect
@@ -0,0 +1,82 @@
+abstract class I13 {
+  int get hashCode;
+}
+
+abstract class I14 {
+  Never get hashCode;
+}
+
+enum E1 {
+  element;
+
+  int get hashCode => 42;
+}
+
+enum E10 {
+  element;
+
+  static int get hashCode => 42;
+}
+
+enum E11 {
+  element;
+
+  static void set hashCode(int value) {}
+}
+
+enum E12 { hashCode }
+
+enum E13 implements I13 { element }
+
+enum E14 implements I14 { element }
+
+enum E2 {
+  element;
+
+  String get hashCode => "foo";
+}
+
+enum E3 {
+  element;
+
+  final int hashCode = 42;
+}
+
+enum E4 {
+  element;
+
+  List<String> hashCode() => [];
+}
+
+enum E5 {
+  element;
+
+  Never get hashCode => throw 42;
+}
+
+enum E6 {
+  element;
+
+  final int foo = 0, hashCode = 1, bar = 2;
+}
+
+enum E7 {
+  element;
+
+  void set hashCode(int value) {}
+  int get hashCode;
+}
+
+enum E8 {
+  element;
+
+  void set hashCode(String value) {}
+}
+
+enum E9 {
+  element;
+
+  double get hashCode;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.weak.expect
new file mode 100644
index 0000000..8f3f873
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.weak.expect
@@ -0,0 +1,324 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:8:11: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   int get hashCode => 42; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:14:14: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   String get hashCode => "foo"; // Error.
+//              ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:20:13: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   final int hashCode = 42; // Error.
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:26:16: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   List<String> hashCode() => []; // Error.
+//                ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:32:13: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   Never get hashCode => throw 42; // Error.
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:38:22: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   final int foo = 0, hashCode = 1, bar = 2; // Error.
+//                      ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:64:18: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   static int get hashCode => 42; // Error.
+//                  ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:26:16: Error: Can't declare a member that conflicts with an inherited one.
+//   List<String> hashCode() => []; // Error.
+//                ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:64:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get hashCode => 42; // Error.
+//                  ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:70:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set hashCode(int value) {} // Error.
+//                   ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:74:3: Error: Can't declare a member that conflicts with an inherited one.
+//   hashCode // Error.
+//   ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:14:14: Error: The return type of the method 'E2.hashCode' is 'String', which does not match the return type, 'int', of the overridden method, 'Object.hashCode'.
+// Change to a subtype of 'int'.
+//   String get hashCode => "foo"; // Error.
+//              ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the overridden method ('hashCode').
+//   int get hashCode => _getHash(this);
+//           ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:52:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'String' of the setter 'E8.hashCode'.
+//   void set hashCode(String value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:58:14: Error: The return type of the method 'E9.hashCode' is 'double', which does not match the return type, 'int', of the overridden method, 'Object.hashCode'.
+// Change to a subtype of 'int'.
+//   double get hashCode; // Error.
+//              ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the overridden method ('hashCode').
+//   int get hashCode => _getHash(this);
+//           ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:55:6: Error: The implementation of 'hashCode' in the non-abstract class 'E9' does not conform to its interface.
+// enum E9 {
+//      ^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: The return type of the method 'Object.hashCode' is 'int', which does not match the return type, 'double', of the overridden method, 'E9.hashCode'.
+// Change to a subtype of 'double'.
+//   int get hashCode => _getHash(this);
+//           ^
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:58:14: Context: This is the overridden method ('hashCode').
+//   double get hashCode; // Error.
+//              ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:87:6: Error: The implementation of 'hashCode' in the non-abstract class 'E14' does not conform to its interface.
+// enum E14 implements I14 { element } // Error.
+//      ^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: The return type of the method 'Object.hashCode' is 'int', which does not match the return type, 'Never', of the overridden method, 'I14.hashCode'.
+// Change to a subtype of 'Never'.
+//   int get hashCode => _getHash(this);
+//           ^
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:84:13: Context: This is the overridden method ('hashCode').
+//   Never get hashCode;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → core::int
+    return 42;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → core::String
+    return "foo";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C9;
+  final field core::int hashCode = 42;
+  static const field self::E3 element = #C8;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C11;
+  static const field self::E4 element = #C10;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  method hashCode() → core::List<core::String>
+    return <core::String>[];
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C13;
+  static const field self::E5 element = #C12;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → Never
+    return throw 42;
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C17;
+  final field core::int foo = 0;
+  final field core::int hashCode = 1;
+  final field core::int bar = 2;
+  static const field self::E6 element = #C16;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C19;
+  static const field self::E7 element = #C18;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  set hashCode(core::int value) → void {}
+  abstract get hashCode() → core::int;
+}
+class E8 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E8> values = #C21;
+  static const field self::E8 element = #C20;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+  set hashCode(core::String value) → void {}
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = #C23;
+  static const field self::E9 element = #C22;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+  abstract get hashCode() → core::double;
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = #C25;
+  static const field self::E10 element = #C24;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+  static get hashCode() → core::int
+    return 42;
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = #C27;
+  static const field self::E11 element = #C26;
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+  static set hashCode(core::int value) → void {}
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = #C30;
+  static const field self::E12 hashCode = #C29;
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I13 extends core::Object {
+  synthetic constructor •() → self::I13
+    : super core::Object::•()
+    ;
+  abstract get hashCode() → core::int;
+}
+class E13 extends core::_Enum implements self::I13 /*isEnum*/  {
+  static const field core::List<self::E13> values = #C32;
+  static const field self::E13 element = #C31;
+  const constructor •(core::int index, core::String name) → self::E13
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I14 extends core::Object {
+  synthetic constructor •() → self::I14
+    : super core::Object::•()
+    ;
+  abstract get hashCode() → Never;
+}
+class E14 extends core::_Enum implements self::I14 /*isEnum*/  {
+  static const field core::List<self::E14> values = #C34;
+  static const field self::E14 element = #C33;
+  const constructor •(core::int index, core::String name) → self::E14
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get hashCode() → Never; -> self::I14::hashCode
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = 42
+  #C8 = self::E3 {hashCode:#C7, index:#C1, _name:#C2}
+  #C9 = <self::E3*>[#C8]
+  #C10 = self::E4 {index:#C1, _name:#C2}
+  #C11 = <self::E4*>[#C10]
+  #C12 = self::E5 {index:#C1, _name:#C2}
+  #C13 = <self::E5*>[#C12]
+  #C14 = 1
+  #C15 = 2
+  #C16 = self::E6 {foo:#C1, hashCode:#C14, bar:#C15, index:#C1, _name:#C2}
+  #C17 = <self::E6*>[#C16]
+  #C18 = self::E7 {index:#C1, _name:#C2}
+  #C19 = <self::E7*>[#C18]
+  #C20 = self::E8 {index:#C1, _name:#C2}
+  #C21 = <self::E8*>[#C20]
+  #C22 = self::E9 {index:#C1, _name:#C2}
+  #C23 = <self::E9*>[#C22]
+  #C24 = self::E10 {index:#C1, _name:#C2}
+  #C25 = <self::E10*>[#C24]
+  #C26 = self::E11 {index:#C1, _name:#C2}
+  #C27 = <self::E11*>[#C26]
+  #C28 = "hashCode"
+  #C29 = self::E12 {index:#C1, _name:#C28}
+  #C30 = <self::E12*>[#C29]
+  #C31 = self::E13 {index:#C1, _name:#C2}
+  #C32 = <self::E13*>[#C31]
+  #C33 = self::E14 {index:#C1, _name:#C2}
+  #C34 = <self::E14*>[#C33]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_hashcode.dart:
+- E1. (from org-dartlang-testcase:///declared_hashcode.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_hashcode.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_hashcode.dart:17:6)
+- E4. (from org-dartlang-testcase:///declared_hashcode.dart:23:6)
+- E5. (from org-dartlang-testcase:///declared_hashcode.dart:29:6)
+- E6. (from org-dartlang-testcase:///declared_hashcode.dart:35:6)
+- E7. (from org-dartlang-testcase:///declared_hashcode.dart:41:6)
+- E8. (from org-dartlang-testcase:///declared_hashcode.dart:49:6)
+- E9. (from org-dartlang-testcase:///declared_hashcode.dart:55:6)
+- E10. (from org-dartlang-testcase:///declared_hashcode.dart:61:6)
+- E11. (from org-dartlang-testcase:///declared_hashcode.dart:67:6)
+- E12. (from org-dartlang-testcase:///declared_hashcode.dart:73:6)
+- E13. (from org-dartlang-testcase:///declared_hashcode.dart:81:6)
+- E14. (from org-dartlang-testcase:///declared_hashcode.dart:87:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.weak.modular.expect
new file mode 100644
index 0000000..8f3f873
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.weak.modular.expect
@@ -0,0 +1,324 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:8:11: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   int get hashCode => 42; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:14:14: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   String get hashCode => "foo"; // Error.
+//              ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:20:13: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   final int hashCode = 42; // Error.
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:26:16: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   List<String> hashCode() => []; // Error.
+//                ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:32:13: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   Never get hashCode => throw 42; // Error.
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:38:22: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   final int foo = 0, hashCode = 1, bar = 2; // Error.
+//                      ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:64:18: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   static int get hashCode => 42; // Error.
+//                  ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:26:16: Error: Can't declare a member that conflicts with an inherited one.
+//   List<String> hashCode() => []; // Error.
+//                ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:64:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get hashCode => 42; // Error.
+//                  ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:70:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set hashCode(int value) {} // Error.
+//                   ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:74:3: Error: Can't declare a member that conflicts with an inherited one.
+//   hashCode // Error.
+//   ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:14:14: Error: The return type of the method 'E2.hashCode' is 'String', which does not match the return type, 'int', of the overridden method, 'Object.hashCode'.
+// Change to a subtype of 'int'.
+//   String get hashCode => "foo"; // Error.
+//              ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the overridden method ('hashCode').
+//   int get hashCode => _getHash(this);
+//           ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:52:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'String' of the setter 'E8.hashCode'.
+//   void set hashCode(String value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:58:14: Error: The return type of the method 'E9.hashCode' is 'double', which does not match the return type, 'int', of the overridden method, 'Object.hashCode'.
+// Change to a subtype of 'int'.
+//   double get hashCode; // Error.
+//              ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the overridden method ('hashCode').
+//   int get hashCode => _getHash(this);
+//           ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:55:6: Error: The implementation of 'hashCode' in the non-abstract class 'E9' does not conform to its interface.
+// enum E9 {
+//      ^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: The return type of the method 'Object.hashCode' is 'int', which does not match the return type, 'double', of the overridden method, 'E9.hashCode'.
+// Change to a subtype of 'double'.
+//   int get hashCode => _getHash(this);
+//           ^
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:58:14: Context: This is the overridden method ('hashCode').
+//   double get hashCode; // Error.
+//              ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:87:6: Error: The implementation of 'hashCode' in the non-abstract class 'E14' does not conform to its interface.
+// enum E14 implements I14 { element } // Error.
+//      ^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: The return type of the method 'Object.hashCode' is 'int', which does not match the return type, 'Never', of the overridden method, 'I14.hashCode'.
+// Change to a subtype of 'Never'.
+//   int get hashCode => _getHash(this);
+//           ^
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:84:13: Context: This is the overridden method ('hashCode').
+//   Never get hashCode;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → core::int
+    return 42;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → core::String
+    return "foo";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C9;
+  final field core::int hashCode = 42;
+  static const field self::E3 element = #C8;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C11;
+  static const field self::E4 element = #C10;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  method hashCode() → core::List<core::String>
+    return <core::String>[];
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C13;
+  static const field self::E5 element = #C12;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → Never
+    return throw 42;
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C17;
+  final field core::int foo = 0;
+  final field core::int hashCode = 1;
+  final field core::int bar = 2;
+  static const field self::E6 element = #C16;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C19;
+  static const field self::E7 element = #C18;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  set hashCode(core::int value) → void {}
+  abstract get hashCode() → core::int;
+}
+class E8 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E8> values = #C21;
+  static const field self::E8 element = #C20;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+  set hashCode(core::String value) → void {}
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = #C23;
+  static const field self::E9 element = #C22;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+  abstract get hashCode() → core::double;
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = #C25;
+  static const field self::E10 element = #C24;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+  static get hashCode() → core::int
+    return 42;
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = #C27;
+  static const field self::E11 element = #C26;
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+  static set hashCode(core::int value) → void {}
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = #C30;
+  static const field self::E12 hashCode = #C29;
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I13 extends core::Object {
+  synthetic constructor •() → self::I13
+    : super core::Object::•()
+    ;
+  abstract get hashCode() → core::int;
+}
+class E13 extends core::_Enum implements self::I13 /*isEnum*/  {
+  static const field core::List<self::E13> values = #C32;
+  static const field self::E13 element = #C31;
+  const constructor •(core::int index, core::String name) → self::E13
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I14 extends core::Object {
+  synthetic constructor •() → self::I14
+    : super core::Object::•()
+    ;
+  abstract get hashCode() → Never;
+}
+class E14 extends core::_Enum implements self::I14 /*isEnum*/  {
+  static const field core::List<self::E14> values = #C34;
+  static const field self::E14 element = #C33;
+  const constructor •(core::int index, core::String name) → self::E14
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get hashCode() → Never; -> self::I14::hashCode
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = 42
+  #C8 = self::E3 {hashCode:#C7, index:#C1, _name:#C2}
+  #C9 = <self::E3*>[#C8]
+  #C10 = self::E4 {index:#C1, _name:#C2}
+  #C11 = <self::E4*>[#C10]
+  #C12 = self::E5 {index:#C1, _name:#C2}
+  #C13 = <self::E5*>[#C12]
+  #C14 = 1
+  #C15 = 2
+  #C16 = self::E6 {foo:#C1, hashCode:#C14, bar:#C15, index:#C1, _name:#C2}
+  #C17 = <self::E6*>[#C16]
+  #C18 = self::E7 {index:#C1, _name:#C2}
+  #C19 = <self::E7*>[#C18]
+  #C20 = self::E8 {index:#C1, _name:#C2}
+  #C21 = <self::E8*>[#C20]
+  #C22 = self::E9 {index:#C1, _name:#C2}
+  #C23 = <self::E9*>[#C22]
+  #C24 = self::E10 {index:#C1, _name:#C2}
+  #C25 = <self::E10*>[#C24]
+  #C26 = self::E11 {index:#C1, _name:#C2}
+  #C27 = <self::E11*>[#C26]
+  #C28 = "hashCode"
+  #C29 = self::E12 {index:#C1, _name:#C28}
+  #C30 = <self::E12*>[#C29]
+  #C31 = self::E13 {index:#C1, _name:#C2}
+  #C32 = <self::E13*>[#C31]
+  #C33 = self::E14 {index:#C1, _name:#C2}
+  #C34 = <self::E14*>[#C33]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_hashcode.dart:
+- E1. (from org-dartlang-testcase:///declared_hashcode.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_hashcode.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_hashcode.dart:17:6)
+- E4. (from org-dartlang-testcase:///declared_hashcode.dart:23:6)
+- E5. (from org-dartlang-testcase:///declared_hashcode.dart:29:6)
+- E6. (from org-dartlang-testcase:///declared_hashcode.dart:35:6)
+- E7. (from org-dartlang-testcase:///declared_hashcode.dart:41:6)
+- E8. (from org-dartlang-testcase:///declared_hashcode.dart:49:6)
+- E9. (from org-dartlang-testcase:///declared_hashcode.dart:55:6)
+- E10. (from org-dartlang-testcase:///declared_hashcode.dart:61:6)
+- E11. (from org-dartlang-testcase:///declared_hashcode.dart:67:6)
+- E12. (from org-dartlang-testcase:///declared_hashcode.dart:73:6)
+- E13. (from org-dartlang-testcase:///declared_hashcode.dart:81:6)
+- E14. (from org-dartlang-testcase:///declared_hashcode.dart:87:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.weak.outline.expect
new file mode 100644
index 0000000..d6594a4
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.weak.outline.expect
@@ -0,0 +1,301 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:8:11: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   int get hashCode => 42; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:14:14: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   String get hashCode => "foo"; // Error.
+//              ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:20:13: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   final int hashCode = 42; // Error.
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:26:16: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   List<String> hashCode() => []; // Error.
+//                ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:32:13: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   Never get hashCode => throw 42; // Error.
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:38:22: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   final int foo = 0, hashCode = 1, bar = 2; // Error.
+//                      ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:64:18: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   static int get hashCode => 42; // Error.
+//                  ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:26:16: Error: Can't declare a member that conflicts with an inherited one.
+//   List<String> hashCode() => []; // Error.
+//                ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:64:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get hashCode => 42; // Error.
+//                  ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:70:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set hashCode(int value) {} // Error.
+//                   ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:74:3: Error: Can't declare a member that conflicts with an inherited one.
+//   hashCode // Error.
+//   ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:14:14: Error: The return type of the method 'E2.hashCode' is 'String', which does not match the return type, 'int', of the overridden method, 'Object.hashCode'.
+// Change to a subtype of 'int'.
+//   String get hashCode => "foo"; // Error.
+//              ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the overridden method ('hashCode').
+//   int get hashCode => _getHash(this);
+//           ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:52:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'String' of the setter 'E8.hashCode'.
+//   void set hashCode(String value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:58:14: Error: The return type of the method 'E9.hashCode' is 'double', which does not match the return type, 'int', of the overridden method, 'Object.hashCode'.
+// Change to a subtype of 'int'.
+//   double get hashCode; // Error.
+//              ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the overridden method ('hashCode').
+//   int get hashCode => _getHash(this);
+//           ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:55:6: Error: The implementation of 'hashCode' in the non-abstract class 'E9' does not conform to its interface.
+// enum E9 {
+//      ^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: The return type of the method 'Object.hashCode' is 'int', which does not match the return type, 'double', of the overridden method, 'E9.hashCode'.
+// Change to a subtype of 'double'.
+//   int get hashCode => _getHash(this);
+//           ^
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:58:14: Context: This is the overridden method ('hashCode').
+//   double get hashCode; // Error.
+//              ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:87:6: Error: The implementation of 'hashCode' in the non-abstract class 'E14' does not conform to its interface.
+// enum E14 implements I14 { element } // Error.
+//      ^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: The return type of the method 'Object.hashCode' is 'int', which does not match the return type, 'Never', of the overridden method, 'I14.hashCode'.
+// Change to a subtype of 'Never'.
+//   int get hashCode => _getHash(this);
+//           ^
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:84:13: Context: This is the overridden method ('hashCode').
+//   Never get hashCode;
+//             ^
+//
+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::element];
+  static const field self::E1 element = const self::E1::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → core::int
+    ;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = const <self::E2>[self::E2::element];
+  static const field self::E2 element = const self::E2::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → core::String
+    ;
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = const <self::E3>[self::E3::element];
+  final field core::int hashCode;
+  static const field self::E3 element = const self::E3::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = const <self::E4>[self::E4::element];
+  static const field self::E4 element = const self::E4::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  method hashCode() → core::List<core::String>
+    ;
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = const <self::E5>[self::E5::element];
+  static const field self::E5 element = const self::E5::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → Never
+    ;
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = const <self::E6>[self::E6::element];
+  final field core::int foo;
+  final field core::int hashCode;
+  final field core::int bar;
+  static const field self::E6 element = const self::E6::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = const <self::E7>[self::E7::element];
+  static const field self::E7 element = const self::E7::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  set hashCode(core::int value) → void
+    ;
+  abstract get hashCode() → core::int;
+}
+class E8 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E8> values = const <self::E8>[self::E8::element];
+  static const field self::E8 element = const self::E8::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+  set hashCode(core::String value) → void
+    ;
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = const <self::E9>[self::E9::element];
+  static const field self::E9 element = const self::E9::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+  abstract get hashCode() → core::double;
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = const <self::E10>[self::E10::element];
+  static const field self::E10 element = const self::E10::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+  static get hashCode() → core::int
+    ;
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = const <self::E11>[self::E11::element];
+  static const field self::E11 element = const self::E11::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+  static set hashCode(core::int value) → void
+    ;
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = const <self::E12>[self::E12::hashCode];
+  static const field self::E12 hashCode = const self::E12::•(0, "hashCode");
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I13 extends core::Object {
+  synthetic constructor •() → self::I13
+    ;
+  abstract get hashCode() → core::int;
+}
+class E13 extends core::_Enum implements self::I13 /*isEnum*/  {
+  static const field core::List<self::E13> values = const <self::E13>[self::E13::element];
+  static const field self::E13 element = const self::E13::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E13
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I14 extends core::Object {
+  synthetic constructor •() → self::I14
+    ;
+  abstract get hashCode() → Never;
+}
+class E14 extends core::_Enum implements self::I14 /*isEnum*/  {
+  static const field core::List<self::E14> values = const <self::E14>[self::E14::element];
+  static const field self::E14 element = const self::E14::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E14
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get hashCode() → Never; -> self::I14::hashCode
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:5:6 -> ListConstant(const <E1*>[const E1{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:6:3 -> InstanceConstant(const E1{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:11:6 -> ListConstant(const <E2*>[const E2{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:12:3 -> InstanceConstant(const E2{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:17:6 -> ListConstant(const <E3*>[const E3{E3.hashCode: null, _Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:18:3 -> InstanceConstant(const E3{E3.hashCode: null, _Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:23:6 -> ListConstant(const <E4*>[const E4{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:24:3 -> InstanceConstant(const E4{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:29:6 -> ListConstant(const <E5*>[const E5{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:30:3 -> InstanceConstant(const E5{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:35:6 -> ListConstant(const <E6*>[const E6{E6.foo: null, E6.hashCode: null, E6.bar: null, _Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:36:3 -> InstanceConstant(const E6{E6.foo: null, E6.hashCode: null, E6.bar: null, _Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:41:6 -> ListConstant(const <E7*>[const E7{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:42:3 -> InstanceConstant(const E7{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:49:6 -> ListConstant(const <E8*>[const E8{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:50:3 -> InstanceConstant(const E8{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:55:6 -> ListConstant(const <E9*>[const E9{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:56:3 -> InstanceConstant(const E9{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:61:6 -> ListConstant(const <E10*>[const E10{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:62:3 -> InstanceConstant(const E10{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:67:6 -> ListConstant(const <E11*>[const E11{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:68:3 -> InstanceConstant(const E11{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:73:6 -> ListConstant(const <E12*>[const E12{_Enum.index: 0, _Enum._name: "hashCode"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:74:3 -> InstanceConstant(const E12{_Enum.index: 0, _Enum._name: "hashCode"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:81:6 -> ListConstant(const <E13*>[const E13{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:81:27 -> InstanceConstant(const E13{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:87:6 -> ListConstant(const <E14*>[const E14{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:87:27 -> InstanceConstant(const E14{_Enum.index: 0, _Enum._name: "element"})
+Extra constant evaluation: evaluated: 98, effectively constant: 28
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_index.dart b/pkg/front_end/testcases/enhanced_enums/declared_index.dart
new file mode 100644
index 0000000..db6042d
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_index.dart
@@ -0,0 +1,89 @@
+// 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.
+
+enum E1 {
+  element;
+
+  int get index => 42; // Error.
+}
+
+enum E2 {
+  element;
+
+  String get index => "foo"; // Error.
+}
+
+enum E3 {
+  element;
+
+  final int index = 42; // Error.
+}
+
+enum E4 {
+  element;
+
+  List<String> index() => []; // Error.
+}
+
+enum E5 {
+  element;
+
+  Never get index => throw 42; // Error.
+}
+
+enum E6 {
+  element;
+
+  final int foo = 0, index = 1, bar = 2; // Error.
+}
+
+enum E7 {
+  element;
+
+  void set index(int value) {} // Ok.
+
+  int get index; // Ok.
+}
+
+enum E8 {
+  element;
+
+  void set index(String value) {} // Error.
+}
+
+enum E9 {
+  element;
+
+  double get index; // Error.
+}
+
+enum E10 {
+  element;
+
+  static int get index => 42; // Error.
+}
+
+enum E11 {
+  element;
+
+  static void set index(int value) {} // Error.
+}
+
+enum E12 {
+  index // Error.
+}
+
+abstract class I13 {
+  int get index;
+}
+
+enum E13 implements I13 { element } // Ok.
+
+abstract class I14 {
+  Never get index;
+}
+
+enum E14 implements I14 { element } // Error.
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_index.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.strong.expect
new file mode 100644
index 0000000..63126a8
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.strong.expect
@@ -0,0 +1,324 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:8:11: Error: An enum can't declare a non-abstract member named 'index'.
+//   int get index => 42; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:14:14: Error: An enum can't declare a non-abstract member named 'index'.
+//   String get index => "foo"; // Error.
+//              ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:20:13: Error: An enum can't declare a non-abstract member named 'index'.
+//   final int index = 42; // Error.
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:26:16: Error: An enum can't declare a non-abstract member named 'index'.
+//   List<String> index() => []; // Error.
+//                ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:32:13: Error: An enum can't declare a non-abstract member named 'index'.
+//   Never get index => throw 42; // Error.
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:38:22: Error: An enum can't declare a non-abstract member named 'index'.
+//   final int foo = 0, index = 1, bar = 2; // Error.
+//                      ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:64:18: Error: An enum can't declare a non-abstract member named 'index'.
+//   static int get index => 42; // Error.
+//                  ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:26:16: Error: Can't declare a member that conflicts with an inherited one.
+//   List<String> index() => []; // Error.
+//                ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:64:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get index => 42; // Error.
+//                  ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:70:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set index(int value) {} // Error.
+//                   ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:74:3: Error: Can't declare a member that conflicts with an inherited one.
+//   index // Error.
+//   ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:14:14: Error: The return type of the method 'E2.index' is 'String', which does not match the return type, 'int', of the overridden method, '_Enum.index'.
+// Change to a subtype of 'int'.
+//   String get index => "foo"; // Error.
+//              ^
+// sdk/lib/core/enum.dart:101:13: Context: This is the overridden method ('index').
+//   final int index;
+//             ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:52:12: Error: The type 'int' of the inherited field '_Enum.index' is not a subtype of the type 'String' of the setter 'E8.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the declaration of the field '_Enum.index'.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:58:14: Error: The return type of the method 'E9.index' is 'double', which does not match the return type, 'int', of the overridden method, '_Enum.index'.
+// Change to a subtype of 'int'.
+//   double get index; // Error.
+//              ^
+// sdk/lib/core/enum.dart:101:13: Context: This is the overridden method ('index').
+//   final int index;
+//             ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:55:6: Error: The implementation of 'index' in the non-abstract class 'E9' does not conform to its interface.
+// enum E9 {
+//      ^^
+// sdk/lib/core/enum.dart:101:13: Context: The return type of the method '_Enum.index' is 'int', which does not match the return type, 'double', of the overridden method, 'E9.index'.
+// Change to a subtype of 'double'.
+//   final int index;
+//             ^
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:58:14: Context: This is the overridden method ('index').
+//   double get index; // Error.
+//              ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:87:6: Error: The implementation of 'index' in the non-abstract class 'E14' does not conform to its interface.
+// enum E14 implements I14 { element } // Error.
+//      ^^^
+// sdk/lib/core/enum.dart:101:13: Context: The return type of the method '_Enum.index' is 'int', which does not match the return type, 'Never', of the overridden method, 'I14.index'.
+// Change to a subtype of 'Never'.
+//   final int index;
+//             ^
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:84:13: Context: This is the overridden method ('index').
+//   Never get index;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  get index() → core::int
+    return 42;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  get index() → core::String
+    return "foo";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C9;
+  final field core::int index = 42;
+  static const field self::E3 element = #C8;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C11;
+  static const field self::E4 element = #C10;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  method index() → core::List<core::String>
+    return <core::String>[];
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C13;
+  static const field self::E5 element = #C12;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+  get index() → Never
+    return throw 42;
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C17;
+  final field core::int foo = 0;
+  final field core::int index = 1;
+  final field core::int bar = 2;
+  static const field self::E6 element = #C16;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C19;
+  static const field self::E7 element = #C18;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  set index(core::int value) → void {}
+  abstract get index() → core::int;
+}
+class E8 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E8> values = #C21;
+  static const field self::E8 element = #C20;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+  set index(core::String value) → void {}
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = #C23;
+  static const field self::E9 element = #C22;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+  abstract get index() → core::double;
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = #C25;
+  static const field self::E10 element = #C24;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+  static get index() → core::int
+    return 42;
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = #C27;
+  static const field self::E11 element = #C26;
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+  static set index(core::int value) → void {}
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = #C30;
+  static const field self::E12 index = #C29;
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I13 extends core::Object {
+  synthetic constructor •() → self::I13
+    : super core::Object::•()
+    ;
+  abstract get index() → core::int;
+}
+class E13 extends core::_Enum implements self::I13 /*isEnum*/  {
+  static const field core::List<self::E13> values = #C32;
+  static const field self::E13 element = #C31;
+  const constructor •(core::int index, core::String name) → self::E13
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I14 extends core::Object {
+  synthetic constructor •() → self::I14
+    : super core::Object::•()
+    ;
+  abstract get index() → Never;
+}
+class E14 extends core::_Enum implements self::I14 /*isEnum*/  {
+  static const field core::List<self::E14> values = #C34;
+  static const field self::E14 element = #C33;
+  const constructor •(core::int index, core::String name) → self::E14
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → Never; -> self::I14::index
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2>[#C5]
+  #C7 = 42
+  #C8 = self::E3 {index:#C7, index:#C1, _name:#C2}
+  #C9 = <self::E3>[#C8]
+  #C10 = self::E4 {index:#C1, _name:#C2}
+  #C11 = <self::E4>[#C10]
+  #C12 = self::E5 {index:#C1, _name:#C2}
+  #C13 = <self::E5>[#C12]
+  #C14 = 1
+  #C15 = 2
+  #C16 = self::E6 {foo:#C1, index:#C14, bar:#C15, index:#C1, _name:#C2}
+  #C17 = <self::E6>[#C16]
+  #C18 = self::E7 {index:#C1, _name:#C2}
+  #C19 = <self::E7>[#C18]
+  #C20 = self::E8 {index:#C1, _name:#C2}
+  #C21 = <self::E8>[#C20]
+  #C22 = self::E9 {index:#C1, _name:#C2}
+  #C23 = <self::E9>[#C22]
+  #C24 = self::E10 {index:#C1, _name:#C2}
+  #C25 = <self::E10>[#C24]
+  #C26 = self::E11 {index:#C1, _name:#C2}
+  #C27 = <self::E11>[#C26]
+  #C28 = "index"
+  #C29 = self::E12 {index:#C1, _name:#C28}
+  #C30 = <self::E12>[#C29]
+  #C31 = self::E13 {index:#C1, _name:#C2}
+  #C32 = <self::E13>[#C31]
+  #C33 = self::E14 {index:#C1, _name:#C2}
+  #C34 = <self::E14>[#C33]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_index.dart:
+- E1. (from org-dartlang-testcase:///declared_index.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_index.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_index.dart:17:6)
+- E4. (from org-dartlang-testcase:///declared_index.dart:23:6)
+- E5. (from org-dartlang-testcase:///declared_index.dart:29:6)
+- E6. (from org-dartlang-testcase:///declared_index.dart:35:6)
+- E7. (from org-dartlang-testcase:///declared_index.dart:41:6)
+- E8. (from org-dartlang-testcase:///declared_index.dart:49:6)
+- E9. (from org-dartlang-testcase:///declared_index.dart:55:6)
+- E10. (from org-dartlang-testcase:///declared_index.dart:61:6)
+- E11. (from org-dartlang-testcase:///declared_index.dart:67:6)
+- E12. (from org-dartlang-testcase:///declared_index.dart:73:6)
+- E13. (from org-dartlang-testcase:///declared_index.dart:81:6)
+- E14. (from org-dartlang-testcase:///declared_index.dart:87:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_index.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.textual_outline.expect
new file mode 100644
index 0000000..2b8d9c5
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.textual_outline.expect
@@ -0,0 +1,82 @@
+enum E1 {
+  element;
+
+  int get index => 42;
+}
+
+enum E2 {
+  element;
+
+  String get index => "foo";
+}
+
+enum E3 {
+  element;
+
+  final int index = 42;
+}
+
+enum E4 {
+  element;
+
+  List<String> index() => [];
+}
+
+enum E5 {
+  element;
+
+  Never get index => throw 42;
+}
+
+enum E6 {
+  element;
+
+  final int foo = 0, index = 1, bar = 2;
+}
+
+enum E7 {
+  element;
+
+  void set index(int value) {}
+  int get index;
+}
+
+enum E8 {
+  element;
+
+  void set index(String value) {}
+}
+
+enum E9 {
+  element;
+
+  double get index;
+}
+
+enum E10 {
+  element;
+
+  static int get index => 42;
+}
+
+enum E11 {
+  element;
+
+  static void set index(int value) {}
+}
+
+enum E12 { index }
+
+abstract class I13 {
+  int get index;
+}
+
+enum E13 implements I13 { element }
+
+abstract class I14 {
+  Never get index;
+}
+
+enum E14 implements I14 { element }
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_index.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b6960cf
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.textual_outline_modelled.expect
@@ -0,0 +1,82 @@
+abstract class I13 {
+  int get index;
+}
+
+abstract class I14 {
+  Never get index;
+}
+
+enum E1 {
+  element;
+
+  int get index => 42;
+}
+
+enum E10 {
+  element;
+
+  static int get index => 42;
+}
+
+enum E11 {
+  element;
+
+  static void set index(int value) {}
+}
+
+enum E12 { index }
+
+enum E13 implements I13 { element }
+
+enum E14 implements I14 { element }
+
+enum E2 {
+  element;
+
+  String get index => "foo";
+}
+
+enum E3 {
+  element;
+
+  final int index = 42;
+}
+
+enum E4 {
+  element;
+
+  List<String> index() => [];
+}
+
+enum E5 {
+  element;
+
+  Never get index => throw 42;
+}
+
+enum E6 {
+  element;
+
+  final int foo = 0, index = 1, bar = 2;
+}
+
+enum E7 {
+  element;
+
+  void set index(int value) {}
+  int get index;
+}
+
+enum E8 {
+  element;
+
+  void set index(String value) {}
+}
+
+enum E9 {
+  element;
+
+  double get index;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_index.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.weak.expect
new file mode 100644
index 0000000..22e1547
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.weak.expect
@@ -0,0 +1,324 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:8:11: Error: An enum can't declare a non-abstract member named 'index'.
+//   int get index => 42; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:14:14: Error: An enum can't declare a non-abstract member named 'index'.
+//   String get index => "foo"; // Error.
+//              ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:20:13: Error: An enum can't declare a non-abstract member named 'index'.
+//   final int index = 42; // Error.
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:26:16: Error: An enum can't declare a non-abstract member named 'index'.
+//   List<String> index() => []; // Error.
+//                ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:32:13: Error: An enum can't declare a non-abstract member named 'index'.
+//   Never get index => throw 42; // Error.
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:38:22: Error: An enum can't declare a non-abstract member named 'index'.
+//   final int foo = 0, index = 1, bar = 2; // Error.
+//                      ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:64:18: Error: An enum can't declare a non-abstract member named 'index'.
+//   static int get index => 42; // Error.
+//                  ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:26:16: Error: Can't declare a member that conflicts with an inherited one.
+//   List<String> index() => []; // Error.
+//                ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:64:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get index => 42; // Error.
+//                  ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:70:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set index(int value) {} // Error.
+//                   ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:74:3: Error: Can't declare a member that conflicts with an inherited one.
+//   index // Error.
+//   ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:14:14: Error: The return type of the method 'E2.index' is 'String', which does not match the return type, 'int', of the overridden method, '_Enum.index'.
+// Change to a subtype of 'int'.
+//   String get index => "foo"; // Error.
+//              ^
+// sdk/lib/core/enum.dart:101:13: Context: This is the overridden method ('index').
+//   final int index;
+//             ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:52:12: Error: The type 'int' of the inherited field '_Enum.index' is not a subtype of the type 'String' of the setter 'E8.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the declaration of the field '_Enum.index'.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:58:14: Error: The return type of the method 'E9.index' is 'double', which does not match the return type, 'int', of the overridden method, '_Enum.index'.
+// Change to a subtype of 'int'.
+//   double get index; // Error.
+//              ^
+// sdk/lib/core/enum.dart:101:13: Context: This is the overridden method ('index').
+//   final int index;
+//             ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:55:6: Error: The implementation of 'index' in the non-abstract class 'E9' does not conform to its interface.
+// enum E9 {
+//      ^^
+// sdk/lib/core/enum.dart:101:13: Context: The return type of the method '_Enum.index' is 'int', which does not match the return type, 'double', of the overridden method, 'E9.index'.
+// Change to a subtype of 'double'.
+//   final int index;
+//             ^
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:58:14: Context: This is the overridden method ('index').
+//   double get index; // Error.
+//              ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:87:6: Error: The implementation of 'index' in the non-abstract class 'E14' does not conform to its interface.
+// enum E14 implements I14 { element } // Error.
+//      ^^^
+// sdk/lib/core/enum.dart:101:13: Context: The return type of the method '_Enum.index' is 'int', which does not match the return type, 'Never', of the overridden method, 'I14.index'.
+// Change to a subtype of 'Never'.
+//   final int index;
+//             ^
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:84:13: Context: This is the overridden method ('index').
+//   Never get index;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  get index() → core::int
+    return 42;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  get index() → core::String
+    return "foo";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C9;
+  final field core::int index = 42;
+  static const field self::E3 element = #C8;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C11;
+  static const field self::E4 element = #C10;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  method index() → core::List<core::String>
+    return <core::String>[];
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C13;
+  static const field self::E5 element = #C12;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+  get index() → Never
+    return throw 42;
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C17;
+  final field core::int foo = 0;
+  final field core::int index = 1;
+  final field core::int bar = 2;
+  static const field self::E6 element = #C16;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C19;
+  static const field self::E7 element = #C18;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  set index(core::int value) → void {}
+  abstract get index() → core::int;
+}
+class E8 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E8> values = #C21;
+  static const field self::E8 element = #C20;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+  set index(core::String value) → void {}
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = #C23;
+  static const field self::E9 element = #C22;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+  abstract get index() → core::double;
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = #C25;
+  static const field self::E10 element = #C24;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+  static get index() → core::int
+    return 42;
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = #C27;
+  static const field self::E11 element = #C26;
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+  static set index(core::int value) → void {}
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = #C30;
+  static const field self::E12 index = #C29;
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I13 extends core::Object {
+  synthetic constructor •() → self::I13
+    : super core::Object::•()
+    ;
+  abstract get index() → core::int;
+}
+class E13 extends core::_Enum implements self::I13 /*isEnum*/  {
+  static const field core::List<self::E13> values = #C32;
+  static const field self::E13 element = #C31;
+  const constructor •(core::int index, core::String name) → self::E13
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I14 extends core::Object {
+  synthetic constructor •() → self::I14
+    : super core::Object::•()
+    ;
+  abstract get index() → Never;
+}
+class E14 extends core::_Enum implements self::I14 /*isEnum*/  {
+  static const field core::List<self::E14> values = #C34;
+  static const field self::E14 element = #C33;
+  const constructor •(core::int index, core::String name) → self::E14
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → Never; -> self::I14::index
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = 42
+  #C8 = self::E3 {index:#C7, index:#C1, _name:#C2}
+  #C9 = <self::E3*>[#C8]
+  #C10 = self::E4 {index:#C1, _name:#C2}
+  #C11 = <self::E4*>[#C10]
+  #C12 = self::E5 {index:#C1, _name:#C2}
+  #C13 = <self::E5*>[#C12]
+  #C14 = 1
+  #C15 = 2
+  #C16 = self::E6 {foo:#C1, index:#C14, bar:#C15, index:#C1, _name:#C2}
+  #C17 = <self::E6*>[#C16]
+  #C18 = self::E7 {index:#C1, _name:#C2}
+  #C19 = <self::E7*>[#C18]
+  #C20 = self::E8 {index:#C1, _name:#C2}
+  #C21 = <self::E8*>[#C20]
+  #C22 = self::E9 {index:#C1, _name:#C2}
+  #C23 = <self::E9*>[#C22]
+  #C24 = self::E10 {index:#C1, _name:#C2}
+  #C25 = <self::E10*>[#C24]
+  #C26 = self::E11 {index:#C1, _name:#C2}
+  #C27 = <self::E11*>[#C26]
+  #C28 = "index"
+  #C29 = self::E12 {index:#C1, _name:#C28}
+  #C30 = <self::E12*>[#C29]
+  #C31 = self::E13 {index:#C1, _name:#C2}
+  #C32 = <self::E13*>[#C31]
+  #C33 = self::E14 {index:#C1, _name:#C2}
+  #C34 = <self::E14*>[#C33]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_index.dart:
+- E1. (from org-dartlang-testcase:///declared_index.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_index.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_index.dart:17:6)
+- E4. (from org-dartlang-testcase:///declared_index.dart:23:6)
+- E5. (from org-dartlang-testcase:///declared_index.dart:29:6)
+- E6. (from org-dartlang-testcase:///declared_index.dart:35:6)
+- E7. (from org-dartlang-testcase:///declared_index.dart:41:6)
+- E8. (from org-dartlang-testcase:///declared_index.dart:49:6)
+- E9. (from org-dartlang-testcase:///declared_index.dart:55:6)
+- E10. (from org-dartlang-testcase:///declared_index.dart:61:6)
+- E11. (from org-dartlang-testcase:///declared_index.dart:67:6)
+- E12. (from org-dartlang-testcase:///declared_index.dart:73:6)
+- E13. (from org-dartlang-testcase:///declared_index.dart:81:6)
+- E14. (from org-dartlang-testcase:///declared_index.dart:87:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_index.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.weak.modular.expect
new file mode 100644
index 0000000..22e1547
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.weak.modular.expect
@@ -0,0 +1,324 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:8:11: Error: An enum can't declare a non-abstract member named 'index'.
+//   int get index => 42; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:14:14: Error: An enum can't declare a non-abstract member named 'index'.
+//   String get index => "foo"; // Error.
+//              ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:20:13: Error: An enum can't declare a non-abstract member named 'index'.
+//   final int index = 42; // Error.
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:26:16: Error: An enum can't declare a non-abstract member named 'index'.
+//   List<String> index() => []; // Error.
+//                ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:32:13: Error: An enum can't declare a non-abstract member named 'index'.
+//   Never get index => throw 42; // Error.
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:38:22: Error: An enum can't declare a non-abstract member named 'index'.
+//   final int foo = 0, index = 1, bar = 2; // Error.
+//                      ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:64:18: Error: An enum can't declare a non-abstract member named 'index'.
+//   static int get index => 42; // Error.
+//                  ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:26:16: Error: Can't declare a member that conflicts with an inherited one.
+//   List<String> index() => []; // Error.
+//                ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:64:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get index => 42; // Error.
+//                  ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:70:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set index(int value) {} // Error.
+//                   ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:74:3: Error: Can't declare a member that conflicts with an inherited one.
+//   index // Error.
+//   ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:14:14: Error: The return type of the method 'E2.index' is 'String', which does not match the return type, 'int', of the overridden method, '_Enum.index'.
+// Change to a subtype of 'int'.
+//   String get index => "foo"; // Error.
+//              ^
+// sdk/lib/core/enum.dart:101:13: Context: This is the overridden method ('index').
+//   final int index;
+//             ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:52:12: Error: The type 'int' of the inherited field '_Enum.index' is not a subtype of the type 'String' of the setter 'E8.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the declaration of the field '_Enum.index'.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:58:14: Error: The return type of the method 'E9.index' is 'double', which does not match the return type, 'int', of the overridden method, '_Enum.index'.
+// Change to a subtype of 'int'.
+//   double get index; // Error.
+//              ^
+// sdk/lib/core/enum.dart:101:13: Context: This is the overridden method ('index').
+//   final int index;
+//             ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:55:6: Error: The implementation of 'index' in the non-abstract class 'E9' does not conform to its interface.
+// enum E9 {
+//      ^^
+// sdk/lib/core/enum.dart:101:13: Context: The return type of the method '_Enum.index' is 'int', which does not match the return type, 'double', of the overridden method, 'E9.index'.
+// Change to a subtype of 'double'.
+//   final int index;
+//             ^
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:58:14: Context: This is the overridden method ('index').
+//   double get index; // Error.
+//              ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:87:6: Error: The implementation of 'index' in the non-abstract class 'E14' does not conform to its interface.
+// enum E14 implements I14 { element } // Error.
+//      ^^^
+// sdk/lib/core/enum.dart:101:13: Context: The return type of the method '_Enum.index' is 'int', which does not match the return type, 'Never', of the overridden method, 'I14.index'.
+// Change to a subtype of 'Never'.
+//   final int index;
+//             ^
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:84:13: Context: This is the overridden method ('index').
+//   Never get index;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  get index() → core::int
+    return 42;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  get index() → core::String
+    return "foo";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C9;
+  final field core::int index = 42;
+  static const field self::E3 element = #C8;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C11;
+  static const field self::E4 element = #C10;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  method index() → core::List<core::String>
+    return <core::String>[];
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C13;
+  static const field self::E5 element = #C12;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+  get index() → Never
+    return throw 42;
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C17;
+  final field core::int foo = 0;
+  final field core::int index = 1;
+  final field core::int bar = 2;
+  static const field self::E6 element = #C16;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C19;
+  static const field self::E7 element = #C18;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  set index(core::int value) → void {}
+  abstract get index() → core::int;
+}
+class E8 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E8> values = #C21;
+  static const field self::E8 element = #C20;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+  set index(core::String value) → void {}
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = #C23;
+  static const field self::E9 element = #C22;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+  abstract get index() → core::double;
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = #C25;
+  static const field self::E10 element = #C24;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+  static get index() → core::int
+    return 42;
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = #C27;
+  static const field self::E11 element = #C26;
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+  static set index(core::int value) → void {}
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = #C30;
+  static const field self::E12 index = #C29;
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I13 extends core::Object {
+  synthetic constructor •() → self::I13
+    : super core::Object::•()
+    ;
+  abstract get index() → core::int;
+}
+class E13 extends core::_Enum implements self::I13 /*isEnum*/  {
+  static const field core::List<self::E13> values = #C32;
+  static const field self::E13 element = #C31;
+  const constructor •(core::int index, core::String name) → self::E13
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I14 extends core::Object {
+  synthetic constructor •() → self::I14
+    : super core::Object::•()
+    ;
+  abstract get index() → Never;
+}
+class E14 extends core::_Enum implements self::I14 /*isEnum*/  {
+  static const field core::List<self::E14> values = #C34;
+  static const field self::E14 element = #C33;
+  const constructor •(core::int index, core::String name) → self::E14
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → Never; -> self::I14::index
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = 42
+  #C8 = self::E3 {index:#C7, index:#C1, _name:#C2}
+  #C9 = <self::E3*>[#C8]
+  #C10 = self::E4 {index:#C1, _name:#C2}
+  #C11 = <self::E4*>[#C10]
+  #C12 = self::E5 {index:#C1, _name:#C2}
+  #C13 = <self::E5*>[#C12]
+  #C14 = 1
+  #C15 = 2
+  #C16 = self::E6 {foo:#C1, index:#C14, bar:#C15, index:#C1, _name:#C2}
+  #C17 = <self::E6*>[#C16]
+  #C18 = self::E7 {index:#C1, _name:#C2}
+  #C19 = <self::E7*>[#C18]
+  #C20 = self::E8 {index:#C1, _name:#C2}
+  #C21 = <self::E8*>[#C20]
+  #C22 = self::E9 {index:#C1, _name:#C2}
+  #C23 = <self::E9*>[#C22]
+  #C24 = self::E10 {index:#C1, _name:#C2}
+  #C25 = <self::E10*>[#C24]
+  #C26 = self::E11 {index:#C1, _name:#C2}
+  #C27 = <self::E11*>[#C26]
+  #C28 = "index"
+  #C29 = self::E12 {index:#C1, _name:#C28}
+  #C30 = <self::E12*>[#C29]
+  #C31 = self::E13 {index:#C1, _name:#C2}
+  #C32 = <self::E13*>[#C31]
+  #C33 = self::E14 {index:#C1, _name:#C2}
+  #C34 = <self::E14*>[#C33]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_index.dart:
+- E1. (from org-dartlang-testcase:///declared_index.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_index.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_index.dart:17:6)
+- E4. (from org-dartlang-testcase:///declared_index.dart:23:6)
+- E5. (from org-dartlang-testcase:///declared_index.dart:29:6)
+- E6. (from org-dartlang-testcase:///declared_index.dart:35:6)
+- E7. (from org-dartlang-testcase:///declared_index.dart:41:6)
+- E8. (from org-dartlang-testcase:///declared_index.dart:49:6)
+- E9. (from org-dartlang-testcase:///declared_index.dart:55:6)
+- E10. (from org-dartlang-testcase:///declared_index.dart:61:6)
+- E11. (from org-dartlang-testcase:///declared_index.dart:67:6)
+- E12. (from org-dartlang-testcase:///declared_index.dart:73:6)
+- E13. (from org-dartlang-testcase:///declared_index.dart:81:6)
+- E14. (from org-dartlang-testcase:///declared_index.dart:87:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_index.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.weak.outline.expect
new file mode 100644
index 0000000..9546bff
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.weak.outline.expect
@@ -0,0 +1,301 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:8:11: Error: An enum can't declare a non-abstract member named 'index'.
+//   int get index => 42; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:14:14: Error: An enum can't declare a non-abstract member named 'index'.
+//   String get index => "foo"; // Error.
+//              ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:20:13: Error: An enum can't declare a non-abstract member named 'index'.
+//   final int index = 42; // Error.
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:26:16: Error: An enum can't declare a non-abstract member named 'index'.
+//   List<String> index() => []; // Error.
+//                ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:32:13: Error: An enum can't declare a non-abstract member named 'index'.
+//   Never get index => throw 42; // Error.
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:38:22: Error: An enum can't declare a non-abstract member named 'index'.
+//   final int foo = 0, index = 1, bar = 2; // Error.
+//                      ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:64:18: Error: An enum can't declare a non-abstract member named 'index'.
+//   static int get index => 42; // Error.
+//                  ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:26:16: Error: Can't declare a member that conflicts with an inherited one.
+//   List<String> index() => []; // Error.
+//                ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:64:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get index => 42; // Error.
+//                  ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:70:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set index(int value) {} // Error.
+//                   ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:74:3: Error: Can't declare a member that conflicts with an inherited one.
+//   index // Error.
+//   ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:14:14: Error: The return type of the method 'E2.index' is 'String', which does not match the return type, 'int', of the overridden method, '_Enum.index'.
+// Change to a subtype of 'int'.
+//   String get index => "foo"; // Error.
+//              ^
+// sdk/lib/core/enum.dart:101:13: Context: This is the overridden method ('index').
+//   final int index;
+//             ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:52:12: Error: The type 'int' of the inherited field '_Enum.index' is not a subtype of the type 'String' of the setter 'E8.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the declaration of the field '_Enum.index'.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:58:14: Error: The return type of the method 'E9.index' is 'double', which does not match the return type, 'int', of the overridden method, '_Enum.index'.
+// Change to a subtype of 'int'.
+//   double get index; // Error.
+//              ^
+// sdk/lib/core/enum.dart:101:13: Context: This is the overridden method ('index').
+//   final int index;
+//             ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:55:6: Error: The implementation of 'index' in the non-abstract class 'E9' does not conform to its interface.
+// enum E9 {
+//      ^^
+// sdk/lib/core/enum.dart:101:13: Context: The return type of the method '_Enum.index' is 'int', which does not match the return type, 'double', of the overridden method, 'E9.index'.
+// Change to a subtype of 'double'.
+//   final int index;
+//             ^
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:58:14: Context: This is the overridden method ('index').
+//   double get index; // Error.
+//              ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:87:6: Error: The implementation of 'index' in the non-abstract class 'E14' does not conform to its interface.
+// enum E14 implements I14 { element } // Error.
+//      ^^^
+// sdk/lib/core/enum.dart:101:13: Context: The return type of the method '_Enum.index' is 'int', which does not match the return type, 'Never', of the overridden method, 'I14.index'.
+// Change to a subtype of 'Never'.
+//   final int index;
+//             ^
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:84:13: Context: This is the overridden method ('index').
+//   Never get index;
+//             ^
+//
+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::element];
+  static const field self::E1 element = const self::E1::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  get index() → core::int
+    ;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = const <self::E2>[self::E2::element];
+  static const field self::E2 element = const self::E2::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  get index() → core::String
+    ;
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = const <self::E3>[self::E3::element];
+  final field core::int index;
+  static const field self::E3 element = const self::E3::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = const <self::E4>[self::E4::element];
+  static const field self::E4 element = const self::E4::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  method index() → core::List<core::String>
+    ;
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = const <self::E5>[self::E5::element];
+  static const field self::E5 element = const self::E5::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+  get index() → Never
+    ;
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = const <self::E6>[self::E6::element];
+  final field core::int foo;
+  final field core::int index;
+  final field core::int bar;
+  static const field self::E6 element = const self::E6::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = const <self::E7>[self::E7::element];
+  static const field self::E7 element = const self::E7::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  set index(core::int value) → void
+    ;
+  abstract get index() → core::int;
+}
+class E8 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E8> values = const <self::E8>[self::E8::element];
+  static const field self::E8 element = const self::E8::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+  set index(core::String value) → void
+    ;
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = const <self::E9>[self::E9::element];
+  static const field self::E9 element = const self::E9::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+  abstract get index() → core::double;
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = const <self::E10>[self::E10::element];
+  static const field self::E10 element = const self::E10::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+  static get index() → core::int
+    ;
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = const <self::E11>[self::E11::element];
+  static const field self::E11 element = const self::E11::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+  static set index(core::int value) → void
+    ;
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = const <self::E12>[self::E12::index];
+  static const field self::E12 index = const self::E12::•(0, "index");
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I13 extends core::Object {
+  synthetic constructor •() → self::I13
+    ;
+  abstract get index() → core::int;
+}
+class E13 extends core::_Enum implements self::I13 /*isEnum*/  {
+  static const field core::List<self::E13> values = const <self::E13>[self::E13::element];
+  static const field self::E13 element = const self::E13::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E13
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I14 extends core::Object {
+  synthetic constructor •() → self::I14
+    ;
+  abstract get index() → Never;
+}
+class E14 extends core::_Enum implements self::I14 /*isEnum*/  {
+  static const field core::List<self::E14> values = const <self::E14>[self::E14::element];
+  static const field self::E14 element = const self::E14::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E14
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → Never; -> self::I14::index
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:5:6 -> ListConstant(const <E1*>[const E1{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:6:3 -> InstanceConstant(const E1{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:11:6 -> ListConstant(const <E2*>[const E2{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:12:3 -> InstanceConstant(const E2{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:17:6 -> ListConstant(const <E3*>[const E3{E3.index: null, _Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:18:3 -> InstanceConstant(const E3{E3.index: null, _Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:23:6 -> ListConstant(const <E4*>[const E4{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:24:3 -> InstanceConstant(const E4{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:29:6 -> ListConstant(const <E5*>[const E5{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:30:3 -> InstanceConstant(const E5{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:35:6 -> ListConstant(const <E6*>[const E6{E6.foo: null, E6.index: null, E6.bar: null, _Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:36:3 -> InstanceConstant(const E6{E6.foo: null, E6.index: null, E6.bar: null, _Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:41:6 -> ListConstant(const <E7*>[const E7{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:42:3 -> InstanceConstant(const E7{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:49:6 -> ListConstant(const <E8*>[const E8{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:50:3 -> InstanceConstant(const E8{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:55:6 -> ListConstant(const <E9*>[const E9{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:56:3 -> InstanceConstant(const E9{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:61:6 -> ListConstant(const <E10*>[const E10{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:62:3 -> InstanceConstant(const E10{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:67:6 -> ListConstant(const <E11*>[const E11{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:68:3 -> InstanceConstant(const E11{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:73:6 -> ListConstant(const <E12*>[const E12{_Enum.index: 0, _Enum._name: "index"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:74:3 -> InstanceConstant(const E12{_Enum.index: 0, _Enum._name: "index"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:81:6 -> ListConstant(const <E13*>[const E13{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:81:27 -> InstanceConstant(const E13{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:87:6 -> ListConstant(const <E14*>[const E14{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:87:27 -> InstanceConstant(const E14{_Enum.index: 0, _Enum._name: "element"})
+Extra constant evaluation: evaluated: 98, effectively constant: 28
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.strong.expect
index dde0f55..9912e9e 100644
--- a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.strong.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E1> values = [E1.element]; // Error in E1.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: An enum can't declare a member named 'values'.
 //   int values = 42; // Error in E2.
 //       ^^^^^^
 //
@@ -17,11 +17,11 @@
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: An enum can't declare a member named 'values'.
 //   void values() {} // Error in E7.
 //        ^^^^^^
 //
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.strong.transformed.expect
index dde0f55..9912e9e 100644
--- a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.strong.transformed.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E1> values = [E1.element]; // Error in E1.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: An enum can't declare a member named 'values'.
 //   int values = 42; // Error in E2.
 //       ^^^^^^
 //
@@ -17,11 +17,11 @@
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: An enum can't declare a member named 'values'.
 //   void values() {} // Error in E7.
 //        ^^^^^^
 //
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.expect
index 3acc5b0..feb041cf 100644
--- a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E1> values = [E1.element]; // Error in E1.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: An enum can't declare a member named 'values'.
 //   int values = 42; // Error in E2.
 //       ^^^^^^
 //
@@ -17,11 +17,11 @@
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: An enum can't declare a member named 'values'.
 //   void values() {} // Error in E7.
 //        ^^^^^^
 //
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.modular.expect
index 3acc5b0..feb041cf 100644
--- a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.modular.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E1> values = [E1.element]; // Error in E1.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: An enum can't declare a member named 'values'.
 //   int values = 42; // Error in E2.
 //       ^^^^^^
 //
@@ -17,11 +17,11 @@
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: An enum can't declare a member named 'values'.
 //   void values() {} // Error in E7.
 //        ^^^^^^
 //
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.outline.expect
index 535787e..0a445dd 100644
--- a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.outline.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E1> values = [E1.element]; // Error in E1.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: An enum can't declare a member named 'values'.
 //   int values = 42; // Error in E2.
 //       ^^^^^^
 //
@@ -17,11 +17,11 @@
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: An enum can't declare a member named 'values'.
 //   void values() {} // Error in E7.
 //        ^^^^^^
 //
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.transformed.expect
index 3acc5b0..feb041cf 100644
--- a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.transformed.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E1> values = [E1.element]; // Error in E1.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: An enum can't declare a member named 'values'.
 //   int values = 42; // Error in E2.
 //       ^^^^^^
 //
@@ -17,11 +17,11 @@
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: An enum can't declare a member named 'values'.
 //   void values() {} // Error in E7.
 //        ^^^^^^
 //
diff --git a/pkg/front_end/testcases/modular.status b/pkg/front_end/testcases/modular.status
index b40f872..a3e7ee6 100644
--- a/pkg/front_end/testcases/modular.status
+++ b/pkg/front_end/testcases/modular.status
@@ -6,6 +6,8 @@
 
 constructor_tearoffs/call_instantiation: TypeCheckError
 constructor_tearoffs/lowering/invalid_redirect: VerificationError
+enhanced_enums/declared_hashcode: TypeCheckError
+enhanced_enums/declared_index: TypeCheckError
 extension_types/access_setter_as_getter: ExpectationFileMismatchSerialized # Expected.
 extension_types/call_not_get: ExpectationFileMismatchSerialized # Expected.
 extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
@@ -29,8 +31,8 @@
 general/getter_vs_setter_type: TypeCheckError
 general/implement_semi_stub: TypeCheckError
 general/implicit_super_call: TypeCheckError
-general/infer_field_from_multiple: TypeCheckError
 general/infer_field_from_multiple2: TypeCheckError
+general/infer_field_from_multiple: TypeCheckError
 general/invalid_operator: TypeCheckError
 general/invalid_operator_override: TypeCheckError
 general/invocations: TypeCheckError
diff --git a/pkg/front_end/testcases/outline.status b/pkg/front_end/testcases/outline.status
index 3e52ebe..a5ff68d 100644
--- a/pkg/front_end/testcases/outline.status
+++ b/pkg/front_end/testcases/outline.status
@@ -2,8 +2,10 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE.md file.
 
+enhanced_enums/declared_hashcode: TypeCheckError
 const_functions/const_functions_const_factory: VerificationError
 constructor_tearoffs/lowering/invalid_redirect: VerificationError
+enhanced_enums/declared_index: TypeCheckError
 extension_types/access_setter_as_getter: ExpectationFileMismatchSerialized # Expected.
 extension_types/call_not_get: ExpectationFileMismatchSerialized # Expected.
 extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
@@ -22,8 +24,8 @@
 general/crashes/crash_06/main: Crash
 general/getter_vs_setter_type: TypeCheckError
 general/implement_semi_stub: TypeCheckError
-general/infer_field_from_multiple: TypeCheckError
 general/infer_field_from_multiple2: TypeCheckError
+general/infer_field_from_multiple: TypeCheckError
 general/invalid_operator: TypeCheckError
 general/invalid_operator_override: TypeCheckError
 general/issue41210a: TypeCheckError
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index f57bbdf..4d3af5e 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -15,6 +15,8 @@
 
 constructor_tearoffs/call_instantiation: TypeCheckError
 constructor_tearoffs/lowering/invalid_redirect: VerificationError
+enhanced_enums/declared_hashcode: TypeCheckError
+enhanced_enums/declared_index: TypeCheckError
 enhanced_enums/simple_mixins: RuntimeError
 extension_types/access_setter_as_getter: ExpectationFileMismatchSerialized # Expected.
 extension_types/call_not_get: ExpectationFileMismatchSerialized # Expected.
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index 9a22f85..2a12a528 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -8,9 +8,11 @@
 
 constructor_tearoffs/call_instantiation: TypeCheckError
 constructor_tearoffs/lowering/invalid_redirect: VerificationError
-enhanced_enums/simple_mixins: RuntimeError
+enhanced_enums/declared_hashcode: TypeCheckError
+enhanced_enums/declared_index: TypeCheckError
 enhanced_enums/named_arguments_anywhere/issue48276: TextSerializationFailure # Issue 47524.
 enhanced_enums/named_arguments_anywhere/redirecting_constructor: TextSerializationFailure # Issue 47524.
+enhanced_enums/simple_mixins: RuntimeError
 extension_types/access_setter_as_getter: ExpectationFileMismatchSerialized # Expected.
 extension_types/call_not_get: ExpectationFileMismatchSerialized # Expected.
 extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
@@ -38,8 +40,8 @@
 general/cascade: RuntimeError
 general/constructor_initializer_invalid: RuntimeError
 general/covariant_field: TypeCheckError
-general/covariant_generic: RuntimeError
 general/covariant_generic2: RuntimeError
+general/covariant_generic: RuntimeError
 general/crashes/crash_02/main: Crash
 general/crashes/crash_06/main: Crash
 general/duplicated_declarations: TypeCheckError
@@ -81,8 +83,8 @@
 general/implement_semi_stub: TypeCheckError
 general/implicit_super_call: TypeCheckError
 general/incomplete_field_formal_parameter: RuntimeError
-general/infer_field_from_multiple: TypeCheckError
 general/infer_field_from_multiple2: TypeCheckError
+general/infer_field_from_multiple: TypeCheckError
 general/invalid_operator: TypeCheckError
 general/invalid_operator_override: TypeCheckError
 general/invocations: TypeCheckError
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index 89d1295..e28929c 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -23,6 +23,8 @@
 
 constructor_tearoffs/call_instantiation: TypeCheckError
 constructor_tearoffs/lowering/invalid_redirect: VerificationError
+enhanced_enums/declared_hashcode: TypeCheckError
+enhanced_enums/declared_index: TypeCheckError
 enhanced_enums/simple_mixins: RuntimeError
 extension_types/access_setter_as_getter: ExpectationFileMismatchSerialized # Expected.
 extension_types/call_not_get: ExpectationFileMismatchSerialized # Expected.
@@ -51,8 +53,8 @@
 general/cascade: RuntimeError
 general/constructor_initializer_invalid: RuntimeError # Fails execution after recovery
 general/covariant_field: TypeCheckError
-general/covariant_generic: RuntimeError
 general/covariant_generic2: RuntimeError
+general/covariant_generic: RuntimeError
 general/crashes/crash_02/main: Crash
 general/crashes/crash_06/main: Crash
 general/duplicated_declarations: TypeCheckError
@@ -94,8 +96,8 @@
 general/implement_semi_stub: TypeCheckError
 general/implicit_super_call: TypeCheckError
 general/incomplete_field_formal_parameter: RuntimeError
-general/infer_field_from_multiple: TypeCheckError
 general/infer_field_from_multiple2: TypeCheckError
+general/infer_field_from_multiple: TypeCheckError
 general/invalid_operator: TypeCheckError
 general/invalid_operator_override: TypeCheckError
 general/invocations: TypeCheckError