Version 2.17.0-215.0.dev

Merge commit 'fc513d9448d5f0353ae1d7377a9a05daa47230ec' into 'dev'
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/test/fasta/expression_suite.dart b/pkg/front_end/test/fasta/expression_suite.dart
index 47c08bb..70c7a91 100644
--- a/pkg/front_end/test/fasta/expression_suite.dart
+++ b/pkg/front_end/test/fasta/expression_suite.dart
@@ -613,7 +613,7 @@
       errors.add(message);
     }
     ..environmentDefines = const {}
-    ..explicitExperimentalFlags = {ExperimentalFlag.nonNullable: false}
+    ..explicitExperimentalFlags = {}
     ..allowedExperimentalFlagsForTesting = const AllowedExperimentalFlags();
 
   final ProcessedOptions options =
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..feb041c 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..feb041c 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..feb041c 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/expression/a.dart b/pkg/front_end/testcases/expression/a.dart
index 63db95e..090f4f4 100644
--- a/pkg/front_end/testcases/expression/a.dart
+++ b/pkg/front_end/testcases/expression/a.dart
@@ -6,7 +6,7 @@
 }
 
 class Foo<E1> {
-  E1 get foo => null;
+  E1? get foo => null;
   String get bar => "hello";
 }
 
diff --git a/pkg/front_end/testcases/expression/b.dart b/pkg/front_end/testcases/expression/b.dart
index dc9ed0a..13e23d1 100644
--- a/pkg/front_end/testcases/expression/b.dart
+++ b/pkg/front_end/testcases/expression/b.dart
@@ -1,4 +1,4 @@
 class Foo<E2> {
-  E2 get foo => null;
+  E2? get foo => null;
   int get bar => 42;
 }
diff --git a/pkg/front_end/testcases/expression/class_capture.expression.yaml.expect b/pkg/front_end/testcases/expression/class_capture.expression.yaml.expect
index 2bf8abf..0379b8f 100644
--- a/pkg/front_end/testcases/expression/class_capture.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_capture.expression.yaml.expect
@@ -1,6 +1,6 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return () → dart.core::int* {
-    return this.{main::B::x}{dart.core::int*}.{dart.core::num::+}(this.{main::B::y}{dart.core::int*}){(dart.core::num*) →* dart.core::int*};
+  return () → dart.core::int {
+    return this.{main::B::x}{dart.core::int}.{dart.core::num::+}(this.{main::B::y}{dart.core::int}){(dart.core::num) → dart.core::int};
   };
diff --git a/pkg/front_end/testcases/expression/class_getter.expression.yaml.expect b/pkg/front_end/testcases/expression/class_getter.expression.yaml.expect
index d0eae14..e30d31e 100644
--- a/pkg/front_end/testcases/expression/class_getter.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_getter.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::B::z}{dart.core::String*};
+  return this.{main::B::z}{dart.core::String};
diff --git a/pkg/front_end/testcases/expression/class_method.expression.yaml.expect b/pkg/front_end/testcases/expression/class_method.expression.yaml.expect
index f5bb3e4..c290c20 100644
--- a/pkg/front_end/testcases/expression/class_method.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_method.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::A::doit_with_this}(2){(dart.core::int*) →* dart.core::int*};
+  return this.{main::A::doit_with_this}(2){(dart.core::int) → dart.core::int};
diff --git a/pkg/front_end/testcases/expression/class_private_get.expression.yaml.expect b/pkg/front_end/testcases/expression/class_private_get.expression.yaml.expect
index b594541..a6002cb 100644
--- a/pkg/front_end/testcases/expression/class_private_get.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_private_get.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::B::_priv}{dart.core::int*};
+  return this.{main::B::_priv}{dart.core::int?};
diff --git a/pkg/front_end/testcases/expression/class_private_method.expression.yaml.expect b/pkg/front_end/testcases/expression/class_private_method.expression.yaml.expect
index b1449b4..b104d4a 100644
--- a/pkg/front_end/testcases/expression/class_private_method.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_private_method.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::B::_privMethod}{() →* void};
+  return this.{main::B::_privMethod}{() → void};
diff --git a/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect b/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect
index b682d78..06ec757 100644
--- a/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect
@@ -4,8 +4,8 @@
               ^^^^^^^^^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return #lib1::globalVar.{dart.core::num::+}(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:13: Error: Undefined name 'staticVar'.\nglobalVar + staticVar + 5\n            ^^^^^^^^^"){(dart.core::num*) →* dart.core::num*}.{dart.core::num::+}(5){(dart.core::num*) →* dart.core::num*};
+  return #lib1::globalVar.{dart.core::num::+}(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:13: Error: Undefined name 'staticVar'.\nglobalVar + staticVar + 5\n            ^^^^^^^^^"){(dart.core::num) → dart.core::double}.{dart.core::double::+}(5){(dart.core::num) → dart.core::double};
 Errors: {
 }
 static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return #lib1::globalVar.{dart.core::num::+}(#lib1::MyClass::staticVar){(dart.core::num*) →* dart.core::int*}.{dart.core::num::+}(5){(dart.core::num*) →* dart.core::int*};
+  return #lib1::globalVar.{dart.core::num::+}(#lib1::MyClass::staticVar){(dart.core::num) → dart.core::int}.{dart.core::num::+}(5){(dart.core::num) → dart.core::int};
diff --git a/pkg/front_end/testcases/expression/class_type_param_bound.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_bound.expression.yaml.expect
index c21f4fd..2fef29d 100644
--- a/pkg/front_end/testcases/expression/class_type_param_bound.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_bound.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
-  return main::hasBound<main::C::T*>();
+  return main::hasBound<main::C::T>();
diff --git a/pkg/front_end/testcases/expression/class_type_param_bound_2.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_bound_2.expression.yaml.expect
index c21f4fd..2fef29d 100644
--- a/pkg/front_end/testcases/expression/class_type_param_bound_2.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_bound_2.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
-  return main::hasBound<main::C::T*>();
+  return main::hasBound<main::C::T>();
diff --git a/pkg/front_end/testcases/expression/class_type_param_bound_illegal.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_bound_illegal.expression.yaml.expect
index 845e716..cd03e3a 100644
--- a/pkg/front_end/testcases/expression/class_type_param_bound_illegal.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_bound_illegal.expression.yaml.expect
@@ -6,4 +6,4 @@
   ^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
-  return main::hasBound<main::A::T*>();
+  return main::hasBound<main::A::T%>();
diff --git a/pkg/front_end/testcases/expression/class_type_param_bound_illegal_2.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_bound_illegal_2.expression.yaml.expect
index 845e716..cd03e3a 100644
--- a/pkg/front_end/testcases/expression/class_type_param_bound_illegal_2.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_bound_illegal_2.expression.yaml.expect
@@ -6,4 +6,4 @@
   ^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
-  return main::hasBound<main::A::T*>();
+  return main::hasBound<main::A::T%>();
diff --git a/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml.expect
index 87b923b..04d903b 100644
--- a/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::MiddlewareApi::toString}(){() →* dart.core::String*};
+  return this.{dart.core::Object::toString}(){() → dart.core::String};
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_reference.expression.yaml.expect
index bed6d1b..e3d9c51 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_reference.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
-  return x is main::A::T*;
+  return x is{ForNonNullableByDefault} main::A::T%;
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml.expect
index d89f1f9..cccded5 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
-  return main::id<main::A::T*>(x as{TypeError,ForDynamic} main::A::T*);
+  return main::id<main::A::T%>(x as{TypeError,ForDynamic,ForNonNullableByDefault} main::A::T%);
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference_ctor.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_reference_ctor.expression.yaml.expect
index 5b0ed1c..c86dbe1 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference_ctor.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_reference_ctor.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
-  return new main::A::•<main::A::T*>();
+  return new main::A::•<main::A::T%>();
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml b/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml
index 642f7ef..04899ba 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml
@@ -7,6 +7,6 @@
 position: "main.dart#A"
 expression: |
   () {
-    T k = null;
+    T? k = null;
     return k;
   }
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml.expect
index dfe66d2..422ee4f 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml.expect
@@ -1,7 +1,7 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return () → main::A::T* {
-    main::A::T* k = null;
+  return () → main::A::T? {
+    main::A::T? k = null;
     return k;
   };
diff --git a/pkg/front_end/testcases/expression/const_usage.expression.yaml.expect b/pkg/front_end/testcases/expression/const_usage.expression.yaml.expect
index e07be30..f87802b 100644
--- a/pkg/front_end/testcases/expression/const_usage.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/const_usage.expression.yaml.expect
@@ -1,7 +1,7 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return #C2.{main::ConstClass::x}{dart.core::int*};
+  return #C2.{main::ConstClass::x}{dart.core::int};
 constants  {
   #C1 = 42
   #C2 = main::ConstClass {x:#C1}
diff --git a/pkg/front_end/testcases/expression/const_usage_class.expression.yaml.expect b/pkg/front_end/testcases/expression/const_usage_class.expression.yaml.expect
index e07be30..f87802b 100644
--- a/pkg/front_end/testcases/expression/const_usage_class.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/const_usage_class.expression.yaml.expect
@@ -1,7 +1,7 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return #C2.{main::ConstClass::x}{dart.core::int*};
+  return #C2.{main::ConstClass::x}{dart.core::int};
 constants  {
   #C1 = 42
   #C2 = main::ConstClass {x:#C1}
diff --git a/pkg/front_end/testcases/expression/core_lib_imported.expression.yaml.expect b/pkg/front_end/testcases/expression/core_lib_imported.expression.yaml.expect
index 5167c83..dd6add4 100644
--- a/pkg/front_end/testcases/expression/core_lib_imported.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/core_lib_imported.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-method /*isLegacy, from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
   return dart.core::identical(1, 1);
diff --git a/pkg/front_end/testcases/expression/core_lib_internal.expression.yaml.expect b/pkg/front_end/testcases/expression/core_lib_internal.expression.yaml.expect
index 72b7d9d..ed30efb 100644
--- a/pkg/front_end/testcases/expression/core_lib_internal.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/core_lib_internal.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-method /*isLegacy, from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return null is dart.collection::Queue<dynamic>*;
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return null is{ForNonNullableByDefault} dart.collection::Queue<dynamic>;
diff --git a/pkg/front_end/testcases/expression/eval.dart b/pkg/front_end/testcases/expression/eval.dart
index db764a3..b905801 100644
--- a/pkg/front_end/testcases/expression/eval.dart
+++ b/pkg/front_end/testcases/expression/eval.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, 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.
-// @dart=2.9
+
 int globalVar = 100;
 
 class MyClass {
diff --git a/pkg/front_end/testcases/expression/evaluate_extension_method.expression.yaml.expect b/pkg/front_end/testcases/expression/evaluate_extension_method.expression.yaml.expect
index 8545fba..7367fce 100644
--- a/pkg/front_end/testcases/expression/evaluate_extension_method.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/evaluate_extension_method.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr< extends dynamic>(dart.core::List<dart.core::String> x) → dynamic
-  return main::Foo|getFortyTwo(x.{dart.core::Iterable::first}{dart.core::String*});
+  return main::Foo|getFortyTwo(x.{dart.core::Iterable::first}{dart.core::String});
diff --git a/pkg/front_end/testcases/expression/evaluate_fold_on_list.expression.yaml.expect b/pkg/front_end/testcases/expression/evaluate_fold_on_list.expression.yaml.expect
index 84d4688..fc134e4 100644
--- a/pkg/front_end/testcases/expression/evaluate_fold_on_list.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/evaluate_fold_on_list.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dart.core::List<dart.core::String> x, dart.core::int y) → dynamic
-  return x.{dart.core::Iterable::fold}<dart.core::int*>(0, (dart.core::int* previousValue, dart.core::String* element) → dart.core::int* => previousValue.{dart.core::num::+}(element.{dart.core::String::length}{dart.core::int*}){(dart.core::num*) →* dart.core::int*}){(dart.core::int*, (dart.core::int*, dart.core::String*) →* dart.core::int*) →* dart.core::int*};
+  return x.{dart.core::Iterable::fold}<dart.core::int>(0, (dart.core::int previousValue, dart.core::String element) → dart.core::int => previousValue.{dart.core::num::+}(element.{dart.core::String::length}{dart.core::int}){(dart.core::num) → dart.core::int}){(dart.core::int, (dart.core::int, dart.core::String) → dart.core::int) → dart.core::int};
diff --git a/pkg/front_end/testcases/expression/extension_this.expression.yaml.expect b/pkg/front_end/testcases/expression/extension_this.expression.yaml.expect
index aed2ac6..89a66e9 100644
--- a/pkg/front_end/testcases/expression/extension_this.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/extension_this.expression.yaml.expect
@@ -2,6 +2,6 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(lowered dynamic #this) → dynamic
   return () → dynamic {
-    dart.core::print(main::Foo|getFortyTwo(#this as{TypeError,ForDynamic} dart.core::String*));
+    dart.core::print(main::Foo|getFortyTwo(#this as{TypeError,ForDynamic,ForNonNullableByDefault} dart.core::String));
     return #this;
   };
diff --git a/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect b/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect
index b6b1ee0..2c26025 100644
--- a/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect
@@ -1,21 +1,21 @@
 Errors: {
 }
-method /*isLegacy, from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic a, dynamic b) → dynamic
-  return ((dynamic a, dynamic b) → dart.core::bool* {
-    if(!(a{dynamic}._usedData =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b{dynamic}._usedData) || !(a{dynamic}._deletedKeys =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b{dynamic}._deletedKeys) || !(a{dynamic}._hashMask =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b{dynamic}._hashMask) || !(a{dynamic}._index{dynamic}.length =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b{dynamic}._index{dynamic}.length) || !(a{dynamic}._data{dynamic}.length =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b{dynamic}._data{dynamic}.length)) {
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic a, dynamic b) → dynamic
+  return ((dynamic a, dynamic b) → dart.core::bool {
+    if(!(a{dynamic}._usedData =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} b{dynamic}._usedData) || !(a{dynamic}._deletedKeys =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} b{dynamic}._deletedKeys) || !(a{dynamic}._hashMask =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} b{dynamic}._hashMask) || !(a{dynamic}._index{dynamic}.length =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} b{dynamic}._index{dynamic}.length) || !(a{dynamic}._data{dynamic}.length =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} b{dynamic}._data{dynamic}.length)) {
       return false;
     }
-    for (dart.core::int* i = 0; i.{dart.core::num::<}(a{dynamic}._index{dynamic}.length as{TypeError,ForDynamic} dart.core::num*){(dart.core::num*) →* dart.core::bool*}; i = i.{dart.core::num::+}(1){(dart.core::num*) →* dart.core::int*}) {
-      if(!(a{dynamic}._index{dynamic}.[](i) =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b{dynamic}._index{dynamic}.[](i))) {
+    for (dart.core::int i = 0; i.{dart.core::num::<}(a{dynamic}._index{dynamic}.length as{TypeError,ForDynamic,ForNonNullableByDefault} dart.core::num){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+      if(!(a{dynamic}._index{dynamic}.[](i) =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} b{dynamic}._index{dynamic}.[](i))) {
         return false;
       }
     }
-    for (dart.core::int* i = 0; i.{dart.core::num::<}(a{dynamic}._data{dynamic}.length as{TypeError,ForDynamic} dart.core::num*){(dart.core::num*) →* dart.core::bool*}; i = i.{dart.core::num::+}(1){(dart.core::num*) →* dart.core::int*}) {
+    for (dart.core::int i = 0; i.{dart.core::num::<}(a{dynamic}._data{dynamic}.length as{TypeError,ForDynamic,ForNonNullableByDefault} dart.core::num){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
       dynamic ad = a{dynamic}._data{dynamic}.[](i);
       dynamic bd = b{dynamic}._data{dynamic}.[](i);
-      if(!dart.core::identical(ad, bd) && !(ad =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} a && bd =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b)) {
+      if(!dart.core::identical(ad, bd) && !(ad =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} a && bd =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} b)) {
         return false;
       }
     }
     return true;
-  })(a, b){(dynamic, dynamic) →* dart.core::bool*};
+  })(a, b){(dynamic, dynamic) → dart.core::bool};
diff --git a/pkg/front_end/testcases/expression/inside_class_with_import_1.expression.yaml.expect b/pkg/front_end/testcases/expression/inside_class_with_import_1.expression.yaml.expect
index e9f21d4..ffd8346 100644
--- a/pkg/front_end/testcases/expression/inside_class_with_import_1.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/inside_class_with_import_1.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{#lib1::Foo::foo}{#lib1::Foo::E1*};
+  return this.{#lib1::Foo::foo}{#lib1::Foo::E1?};
diff --git a/pkg/front_end/testcases/expression/inside_class_with_import_2.expression.yaml.expect b/pkg/front_end/testcases/expression/inside_class_with_import_2.expression.yaml.expect
index bdeb445..75cd1638 100644
--- a/pkg/front_end/testcases/expression/inside_class_with_import_2.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/inside_class_with_import_2.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{#lib1::Foo::bar}{dart.core::String*}.{dart.core::String::length}{dart.core::int*};
+  return this.{#lib1::Foo::bar}{dart.core::String}.{dart.core::String::length}{dart.core::int};
diff --git a/pkg/front_end/testcases/expression/inside_class_with_import_3.expression.yaml.expect b/pkg/front_end/testcases/expression/inside_class_with_import_3.expression.yaml.expect
index 01c5a65..d3baad3 100644
--- a/pkg/front_end/testcases/expression/inside_class_with_import_3.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/inside_class_with_import_3.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return new #lib1::Foo::•<dynamic>().{#lib1::Foo::bar}{dart.core::String*}.{dart.core::String::length}{dart.core::int*};
+  return new #lib1::Foo::•<dynamic>().{#lib1::Foo::bar}{dart.core::String}.{dart.core::String::length}{dart.core::int};
diff --git a/pkg/front_end/testcases/expression/inside_class_with_t.expression.yaml.expect b/pkg/front_end/testcases/expression/inside_class_with_t.expression.yaml.expect
index d7463a7..e0b421b 100644
--- a/pkg/front_end/testcases/expression/inside_class_with_t.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/inside_class_with_t.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::E::t}{main::E::T*};
+  return this.{main::E::t}{main::E::T?};
diff --git a/pkg/front_end/testcases/expression/inside_class_with_t_in_dart_collection.expression.yaml.expect b/pkg/front_end/testcases/expression/inside_class_with_t_in_dart_collection.expression.yaml.expect
index 9625a0d..066255f 100644
--- a/pkg/front_end/testcases/expression/inside_class_with_t_in_dart_collection.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/inside_class_with_t_in_dart_collection.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-method /*isLegacy, from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{dart.collection::LinkedList::first}{dart.collection::LinkedList::E*};
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return this.{dart.collection::LinkedList::first}{dart.collection::LinkedList::E};
diff --git a/pkg/front_end/testcases/expression/lib_external_ctor.expression.yaml.expect b/pkg/front_end/testcases/expression/lib_external_ctor.expression.yaml.expect
index 430f437..3fc7e5b 100644
--- a/pkg/front_end/testcases/expression/lib_external_ctor.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/lib_external_ctor.expression.yaml.expect
@@ -4,7 +4,7 @@
            ^^^^^^^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return () → Null {
+  return () → Never {
     throw new dart.core::AbstractClassInstantiationError::•("Process");
     dart.io::File::fromUri(dart.core::Uri::parse("file://test.dart"));
   };
diff --git a/pkg/front_end/testcases/expression/lib_reference.expression.yaml.expect b/pkg/front_end/testcases/expression/lib_reference.expression.yaml.expect
index 5f9d49f..eab2b6c 100644
--- a/pkg/front_end/testcases/expression/lib_reference.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/lib_reference.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return dart.io::exit(2);
+  return let final Never #t1 = dart.io::exit(2) in throw new dart._internal::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
diff --git a/pkg/front_end/testcases/expression/main.dart b/pkg/front_end/testcases/expression/main.dart
index 35045e1..99bec5b 100644
--- a/pkg/front_end/testcases/expression/main.dart
+++ b/pkg/front_end/testcases/expression/main.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, 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.
-// @dart=2.9
+
 library main;
 
 import 'dart:io' show File, Process, exit;
@@ -31,7 +31,7 @@
   static int staticVar = 3;
   int doit_with_this(int x) => x + 1;
 
-  final int _priv = 0;
+  final int? _priv = 0;
   void _privMethod() {}
 }
 
@@ -40,7 +40,10 @@
 class B extends A<Object> {
   int x;
   final int y = 7;
-  int _priv;
+  int? _priv;
+
+  B(this.x);
+
   String get z {
     return "";
   }
@@ -52,14 +55,14 @@
 class Bound {}
 
 class HasPrivate {
-  int _priv = 0;
+  int? _priv = 0;
 }
 
 class C<T extends Bound> extends HasPrivate {}
 
 void hasBound<T extends Bound>() {}
 
-Object k;
+Object? k;
 
 class D<T> {
   Y id<Y>(Y x) => x;
@@ -97,8 +100,8 @@
 }
 
 class E<T> {
-  T _t;
-  T get t => _t;
+  T? _t;
+  T? get t => _t;
 }
 
 void withBound<E extends String>(List<E> x) {
diff --git a/pkg/front_end/testcases/expression/main_2.dart b/pkg/front_end/testcases/expression/main_2.dart
index eb9600f..5cebe18 100644
--- a/pkg/front_end/testcases/expression/main_2.dart
+++ b/pkg/front_end/testcases/expression/main_2.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 library main_2;
 
 import 'main.dart' as m;
diff --git a/pkg/front_end/testcases/expression/missing_variable_types.expression.yaml.expect b/pkg/front_end/testcases/expression/missing_variable_types.expression.yaml.expect
index 69d0373..4a467bc 100644
--- a/pkg/front_end/testcases/expression/missing_variable_types.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/missing_variable_types.expression.yaml.expect
@@ -1,4 +1,8 @@
 Errors: {
+  org-dartlang-debug:synthetic_debug_expression:1:6: Error: The argument type 'List<dynamic>' can't be assigned to the parameter type 'List<T>'.
+   - 'List' is from 'dart:core'.
+  m(id(s = []))
+       ^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic s) → dynamic
-  return this.{main::D::m}(this.{main::D::id}<dart.core::List<main::D::T*>*>((s = dart.core::_GrowableList::•<dynamic>(0)) as{TypeError} dart.core::List<main::D::T*>*){(dart.core::List<main::D::T*>*) →* dart.core::List<main::D::T*>*}){(dart.core::List<main::D::T*>*) →* dynamic};
+  return this.{main::D::m}(this.{main::D::id}<dart.core::List<main::D::T%>>(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:6: Error: The argument type 'List<dynamic>' can't be assigned to the parameter type 'List<T>'.\n - 'List' is from 'dart:core'.\nm(id(s = []))\n     ^" in (s = dart.core::_GrowableList::•<dynamic>(0)) as{TypeError,ForNonNullableByDefault} Never){(dart.core::List<main::D::T%>) → dart.core::List<main::D::T%>}){(dart.core::List<main::D::T%>) → dynamic};
diff --git a/pkg/front_end/testcases/expression/nolib.expression.yaml.expect b/pkg/front_end/testcases/expression/nolib.expression.yaml.expect
index c46c67f..c48fc35 100644
--- a/pkg/front_end/testcases/expression/nolib.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/nolib.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+method /*isNonNullableByDefault, from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
   return 0;
diff --git a/pkg/front_end/testcases/expression/platform_isandroid.expression.yaml.expect b/pkg/front_end/testcases/expression/platform_isandroid.expression.yaml.expect
index 872d5f9..4cffbf8 100644
--- a/pkg/front_end/testcases/expression/platform_isandroid.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/platform_isandroid.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-static method /*isLegacy, from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
   return dart.io::Platform::isAndroid;
diff --git a/pkg/front_end/testcases/expression/regress_34224.expression.yaml.expect b/pkg/front_end/testcases/expression/regress_34224.expression.yaml.expect
index fd54faa..04d903b 100644
--- a/pkg/front_end/testcases/expression/regress_34224.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/regress_34224.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-method /*isLegacy, from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{dart.core::Object::toString}(){() →* dart.core::String*};
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return this.{dart.core::Object::toString}(){() → dart.core::String};
diff --git a/pkg/front_end/testcases/expression/set_literal.expression.yaml.expect b/pkg/front_end/testcases/expression/set_literal.expression.yaml.expect
index 175aec2..9fe5f50 100644
--- a/pkg/front_end/testcases/expression/set_literal.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/set_literal.expression.yaml.expect
@@ -2,6 +2,6 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
   return block {
-    final dart.core::Set<dart.core::String*>* #t1 = new dart.collection::_CompactLinkedHashSet::•<dart.core::String*>();
-    #t1.{dart.core::Set::add}{Invariant}("a"){(dart.core::String*) →* dart.core::bool*};
+    final dart.core::Set<dart.core::String> #t1 = new dart.collection::_CompactLinkedHashSet::•<dart.core::String>();
+    #t1.{dart.core::Set::add}{Invariant}("a"){(dart.core::String) → dart.core::bool};
   } =>#t1;
diff --git a/pkg/front_end/testcases/expression/spread_element.expression.yaml.expect b/pkg/front_end/testcases/expression/spread_element.expression.yaml.expect
index 6c8b355..caefbcc 100644
--- a/pkg/front_end/testcases/expression/spread_element.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/spread_element.expression.yaml.expect
@@ -2,5 +2,5 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
   return block {
-    final dart.core::List<dart.core::String*>* #t1 = dart.core::List::of<dart.core::String*>(main::listOfStrings);
+    final dart.core::List<dart.core::String> #t1 = dart.core::List::of<dart.core::String>(main::listOfStrings);
   } =>#t1;
diff --git a/pkg/front_end/testcases/expression/type_closure_evaluation.expression.yaml.expect b/pkg/front_end/testcases/expression/type_closure_evaluation.expression.yaml.expect
index 5865e1f..3fb0d47 100644
--- a/pkg/front_end/testcases/expression/type_closure_evaluation.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_closure_evaluation.expression.yaml.expect
@@ -6,4 +6,4 @@
    ^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dart.core::_Closure x) → dynamic
-  return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:2: Error: Cannot invoke an instance of '_Closure' because it declares 'call' to be something other than a method.\n - '_Closure' is from 'dart:core'.\nTry changing 'call' to a method or explicitly invoke 'call'.\nx().fold<int>(0, (previousValue, element) => previousValue + element.length)\n ^"{dynamic}.fold<dart.core::int*>(0, (dynamic previousValue, dynamic element) → dynamic => previousValue{dynamic}.+(element{dynamic}.length));
+  return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:2: Error: Cannot invoke an instance of '_Closure' because it declares 'call' to be something other than a method.\n - '_Closure' is from 'dart:core'.\nTry changing 'call' to a method or explicitly invoke 'call'.\nx().fold<int>(0, (previousValue, element) => previousValue + element.length)\n ^"{dynamic}.fold<dart.core::int>(0, (dynamic previousValue, dynamic element) → dynamic => previousValue{dynamic}.+(element{dynamic}.length));
diff --git a/pkg/front_end/testcases/expression/type_closure_evaluation_2.expression.yaml.expect b/pkg/front_end/testcases/expression/type_closure_evaluation_2.expression.yaml.expect
index 7b31ce4..9b852fc 100644
--- a/pkg/front_end/testcases/expression/type_closure_evaluation_2.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_closure_evaluation_2.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
-  return x{dynamic}.call(){dynamic}.fold<dart.core::int*>(0, (dynamic previousValue, dynamic element) → dynamic => previousValue{dynamic}.+(element{dynamic}.length));
+  return x{dynamic}.call(){dynamic}.fold<dart.core::int>(0, (dynamic previousValue, dynamic element) → dynamic => previousValue{dynamic}.+(element{dynamic}.length));
diff --git a/pkg/front_end/testcases/expression/type_definition_bound_1.expression.yaml.expect b/pkg/front_end/testcases/expression/type_definition_bound_1.expression.yaml.expect
index 680d8c5..5c6162f 100644
--- a/pkg/front_end/testcases/expression/type_definition_bound_1.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_definition_bound_1.expression.yaml.expect
@@ -2,6 +2,6 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<E extends dart.core::String>(dart.core::List<dart.core::String> x) → dynamic
   return (() → Null {
-    dart.core::List<#lib1::debugExpr::E*>* y = dart.core::_GrowableList::•<#lib1::debugExpr::E*>(0);
-    x.{dart.core::List::addAll}(y){(dart.core::Iterable<dart.core::String*>*) →* void};
-  })(){() →* Null};
+    dart.core::List<#lib1::debugExpr::E> y = dart.core::_GrowableList::•<#lib1::debugExpr::E>(0);
+    x.{dart.core::List::addAll}(y){(dart.core::Iterable<dart.core::String>) → void};
+  })(){() → Null};
diff --git a/pkg/front_end/testcases/expression/type_definition_bound_2.expression.yaml.expect b/pkg/front_end/testcases/expression/type_definition_bound_2.expression.yaml.expect
index be07da0..705f6d9 100644
--- a/pkg/front_end/testcases/expression/type_definition_bound_2.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_definition_bound_2.expression.yaml.expect
@@ -7,6 +7,6 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<E extends dart.core::String>(dart.core::List<dart.core::String> x) → dynamic
   return () → Null {
-    dart.core::List<#lib1::debugExpr::E*>* y = dart.core::_GrowableList::•<#lib1::debugExpr::E*>(0);
-    y.{dart.core::List::addAll}(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:31: Error: The argument type 'List<String>' can't be assigned to the parameter type 'Iterable<E>'.\n - 'List' is from 'dart:core'.\n - 'Iterable' is from 'dart:core'.\n() { List<E> y = []; y.addAll(x); }\n                              ^" in x as{TypeError} Never){(dart.core::Iterable<#lib1::debugExpr::E*>*) →* void};
+    dart.core::List<#lib1::debugExpr::E> y = dart.core::_GrowableList::•<#lib1::debugExpr::E>(0);
+    y.{dart.core::List::addAll}(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:31: Error: The argument type 'List<String>' can't be assigned to the parameter type 'Iterable<E>'.\n - 'List' is from 'dart:core'.\n - 'Iterable' is from 'dart:core'.\n() { List<E> y = []; y.addAll(x); }\n                              ^" in x as{TypeError,ForNonNullableByDefault} Never){(dart.core::Iterable<#lib1::debugExpr::E>) → void};
   };
diff --git a/pkg/front_end/testcases/expression/type_definition_bound_3.expression.yaml.expect b/pkg/front_end/testcases/expression/type_definition_bound_3.expression.yaml.expect
index f70deb2..b61150e 100644
--- a/pkg/front_end/testcases/expression/type_definition_bound_3.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_definition_bound_3.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<E extends dart.core::Object? = dynamic>() → dynamic
-  return dart.core::print(#lib1::debugExpr::E*);
+  return dart.core::print(#lib1::debugExpr::E%);
diff --git a/pkg/front_end/testcases/expression/type_param_bound.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_bound.expression.yaml.expect
index a38c415..888d75f 100644
--- a/pkg/front_end/testcases/expression/type_param_bound.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_bound.expression.yaml.expect
@@ -6,4 +6,4 @@
   ^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>() → dynamic
-  return main::hasBound<#lib1::debugExpr::T*>();
+  return main::hasBound<#lib1::debugExpr::T%>();
diff --git a/pkg/front_end/testcases/expression/type_param_bound_2.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_bound_2.expression.yaml.expect
index a38c415..888d75f 100644
--- a/pkg/front_end/testcases/expression/type_param_bound_2.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_bound_2.expression.yaml.expect
@@ -6,4 +6,4 @@
   ^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>() → dynamic
-  return main::hasBound<#lib1::debugExpr::T*>();
+  return main::hasBound<#lib1::debugExpr::T%>();
diff --git a/pkg/front_end/testcases/expression/type_param_shadow.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow.expression.yaml.expect
index 6cb5b78..be5007c 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>(dynamic x) → dynamic
-  return x is main::A::debugExpr::T*;
+  return x is{ForNonNullableByDefault} main::A::debugExpr::T%;
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml.expect
index 66d7a12..a5a9f41 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>(dynamic x) → dynamic
-  return main::id<main::A::debugExpr::T*>(x as{TypeError,ForDynamic} main::A::debugExpr::T*);
+  return main::id<main::A::debugExpr::T%>(x as{TypeError,ForDynamic,ForNonNullableByDefault} main::A::debugExpr::T%);
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect
index 4b7f9b0..58142c0 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect
@@ -6,5 +6,5 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>() → dynamic
   return () → Null {
-    main::A::debugExpr::T* k = invalid-expression "org-dartlang-debug:synthetic_debug_expression:2:13: Error: A value of type 'A<dynamic>' can't be assigned to a variable of type 'T'.\n - 'A' is from 'pkg/front_end/testcases/expression/main.dart'.\n  T k = new A();\n            ^" in new main::A::•<dynamic>() as{TypeError} Never;
+    main::A::debugExpr::T% k = invalid-expression "org-dartlang-debug:synthetic_debug_expression:2:13: Error: A value of type 'A<dynamic>' can't be assigned to a variable of type 'T'.\n - 'A' is from 'pkg/front_end/testcases/expression/main.dart'.\n  T k = new A();\n            ^" in new main::A::•<dynamic>() as{TypeError,ForNonNullableByDefault} Never;
   };
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml b/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml
index c379cd5..92a1ef1 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml
+++ b/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml
@@ -8,6 +8,6 @@
 position: "main.dart#A"
 expression: |
   () {
-    T k = null;
+    T? k = null;
     k = id(k);
   }
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml.expect
index 4e5bdde..fae9dbf 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml.expect
@@ -2,6 +2,6 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>() → dynamic
   return () → Null {
-    main::A::debugExpr::T* k = null;
-    k = main::id<main::A::debugExpr::T*>(k);
+    main::A::debugExpr::T? k = null;
+    k = main::id<main::A::debugExpr::T?>(k);
   };
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_ctor.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow_ctor.expression.yaml.expect
index 6ae7542..6fae9ff 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_ctor.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow_ctor.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>() → dynamic
-  return new main::A::•<main::A::debugExpr::T*>();
+  return new main::A::•<main::A::debugExpr::T%>();
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml b/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml
index c1c6c10..69e8ede 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml
+++ b/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml
@@ -8,5 +8,5 @@
 position: "main.dart#A"
 expression: |
   () {
-    T x = null;
+    T? x = null;
   }
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml.expect
index a632a3c..4f51517 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml.expect
@@ -2,5 +2,5 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>(dynamic x) → dynamic
   return () → Null {
-    main::A::debugExpr::T* x = null;
+    main::A::debugExpr::T? x = null;
   };
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
diff --git a/pkg/vm/lib/transformations/ffi/common.dart b/pkg/vm/lib/transformations/ffi/common.dart
index 22f2195..3b3a837 100644
--- a/pkg/vm/lib/transformations/ffi/common.dart
+++ b/pkg/vm/lib/transformations/ffi/common.dart
@@ -223,9 +223,9 @@
   final Field arraySizeField;
   final Field arrayNestedDimensionsField;
   final Procedure arrayCheckIndex;
-  final Field arrayNestedDimensionsFlattened;
-  final Field arrayNestedDimensionsFirst;
-  final Field arrayNestedDimensionsRest;
+  final Procedure arrayNestedDimensionsFlattened;
+  final Procedure arrayNestedDimensionsFirst;
+  final Procedure arrayNestedDimensionsRest;
   final Constructor structFromTypedDataBase;
   final Constructor unionFromTypedDataBase;
   final Constructor arrayConstructor;
@@ -364,12 +364,12 @@
             index.getField('dart:ffi', 'Array', '_nestedDimensions'),
         arrayCheckIndex =
             index.getProcedure('dart:ffi', 'Array', '_checkIndex'),
-        arrayNestedDimensionsFlattened =
-            index.getField('dart:ffi', 'Array', '_nestedDimensionsFlattened'),
-        arrayNestedDimensionsFirst =
-            index.getField('dart:ffi', 'Array', '_nestedDimensionsFirst'),
-        arrayNestedDimensionsRest =
-            index.getField('dart:ffi', 'Array', '_nestedDimensionsRest'),
+        arrayNestedDimensionsFlattened = index.getProcedure(
+            'dart:ffi', 'Array', 'get:_nestedDimensionsFlattened'),
+        arrayNestedDimensionsFirst = index.getProcedure(
+            'dart:ffi', 'Array', 'get:_nestedDimensionsFirst'),
+        arrayNestedDimensionsRest = index.getProcedure(
+            'dart:ffi', 'Array', 'get:_nestedDimensionsRest'),
         structFromTypedDataBase =
             index.getConstructor('dart:ffi', 'Struct', '_fromTypedDataBase'),
         unionFromTypedDataBase =
diff --git a/pkg/vm/lib/transformations/ffi/use_sites.dart b/pkg/vm/lib/transformations/ffi/use_sites.dart
index 0a765e3..bdc6fdf 100644
--- a/pkg/vm/lib/transformations/ffi/use_sites.dart
+++ b/pkg/vm/lib/transformations/ffi/use_sites.dart
@@ -689,7 +689,7 @@
             InstanceGet(InstanceAccessKind.Instance, VariableGet(arrayVar),
                 arrayNestedDimensionsFlattened.name,
                 interfaceTarget: arrayNestedDimensionsFlattened,
-                resultType: arrayNestedDimensionsFlattened.type)),
+                resultType: arrayNestedDimensionsFlattened.getterType)),
         type: coreTypes.intNonNullableRawType)
       ..fileOffset = node.fileOffset;
     final offsetVar = VariableDeclaration("#offset",
@@ -729,11 +729,11 @@
                 InstanceGet(InstanceAccessKind.Instance, VariableGet(arrayVar),
                     arrayNestedDimensionsFirst.name,
                     interfaceTarget: arrayNestedDimensionsFirst,
-                    resultType: arrayNestedDimensionsFirst.type),
+                    resultType: arrayNestedDimensionsFirst.getterType),
                 InstanceGet(InstanceAccessKind.Instance, VariableGet(arrayVar),
                     arrayNestedDimensionsRest.name,
                     interfaceTarget: arrayNestedDimensionsRest,
-                    resultType: arrayNestedDimensionsRest.type)
+                    resultType: arrayNestedDimensionsRest.getterType)
               ], types: [
                 dartType
               ])));
diff --git a/runtime/vm/os_fuchsia.cc b/runtime/vm/os_fuchsia.cc
index 448a10b..84bf154 100644
--- a/runtime/vm/os_fuchsia.cc
+++ b/runtime/vm/os_fuchsia.cc
@@ -294,7 +294,7 @@
 };
 
 // The timezone names encountered so far.  The timezone names must live forever.
-std::set<const std::string> timezone_names;
+std::set<std::string> timezone_names;
 
 // Initialized on OS:Init(), deinitialized on OS::Cleanup.
 std::shared_ptr<InspectMetrics> metrics;
@@ -460,9 +460,6 @@
   return -1;
 }
 
-// The timezone names encountered so far.  The timezone names must live forever.
-std::set<const std::string> timezone_names;
-
 // TODO(5411554):  May need to hoist these architecture dependent code
 // into a architecture specific file e.g: os_ia32_fuchsia.cc
 intptr_t OS::ActivationFrameAlignment() {
diff --git a/sdk/lib/_internal/vm/lib/ffi_patch.dart b/sdk/lib/_internal/vm/lib/ffi_patch.dart
index bbf8499..174cc69 100644
--- a/sdk/lib/_internal/vm/lib/ffi_patch.dart
+++ b/sdk/lib/_internal/vm/lib/ffi_patch.dart
@@ -205,15 +205,22 @@
   @pragma("vm:entry-point")
   final List<int> _nestedDimensions;
 
+  int? _nestedDimensionsFlattenedCache;
+  int? _nestedDimensionsFirstCache;
+  List<int>? _nestedDimensionsRestCache;
+
   @pragma("vm:entry-point")
   Array._(this._typedDataBase, this._size, this._nestedDimensions);
 
-  late final int _nestedDimensionsFlattened = _nestedDimensions.fold(
-      1, (accumulator, element) => accumulator * element);
+  int get _nestedDimensionsFlattened =>
+      _nestedDimensionsFlattenedCache ??= _nestedDimensions.fold<int>(
+          1, (accumulator, element) => accumulator * element);
 
-  late final int _nestedDimensionsFirst = _nestedDimensions.first;
+  int get _nestedDimensionsFirst =>
+      _nestedDimensionsFirstCache ??= _nestedDimensions.first;
 
-  late final List<int> _nestedDimensionsRest = _nestedDimensions.sublist(1);
+  List<int> get _nestedDimensionsRest =>
+      _nestedDimensionsRestCache ??= _nestedDimensions.sublist(1);
 
   _checkIndex(int index) {
     if (index < 0 || index >= _size) {
diff --git a/tools/VERSION b/tools/VERSION
index 59c79ec..1c7d543 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 214
+PRERELEASE 215
 PRERELEASE_PATCH 0
\ No newline at end of file