[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