[cfe] Report errors on abstract members and field in extension type

Includes a cleanup of the errors reported for duplicate instance field.
Previously, in addition to reporting the duplicate, we would report that
the field cannot be used because it is a duplicate and that the
duplicate field hasn't been initialized.

Closes #53467
Closes #53320

Change-Id: Ifd94223500809f3be36a1345d9d0c409778eed8a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/336885
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index 21f34d2..4ca832b 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -61,6 +61,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAbstractExtensionField = const MessageCode(
     "AbstractExtensionField",
+    analyzerCodes: <String>["ABSTRACT_EXTENSION_FIELD"],
     problemMessage: r"""Extension fields can't be declared 'abstract'.""",
     correctionMessage: r"""Try removing the 'abstract' keyword.""");
 
@@ -4434,6 +4435,30 @@
         r"""The issue arises via this extension type declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeExtensionTypeDeclaresAbstractMember =
+    messageExtensionTypeDeclaresAbstractMember;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageExtensionTypeDeclaresAbstractMember =
+    const MessageCode("ExtensionTypeDeclaresAbstractMember",
+        analyzerCodes: <String>["EXTENSION_TYPE_WITH_ABSTRACT_MEMBER"],
+        problemMessage: r"""Extension types can't declare abstract members.""",
+        correctionMessage:
+            r"""Try providing an implementation for the member.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeExtensionTypeDeclaresInstanceField =
+    messageExtensionTypeDeclaresInstanceField;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageExtensionTypeDeclaresInstanceField = const MessageCode(
+    "ExtensionTypeDeclaresInstanceField",
+    analyzerCodes: <String>["EXTENSION_TYPE_DECLARES_INSTANCE_FIELD"],
+    problemMessage: r"""Extension types can't declare instance fields""",
+    correctionMessage:
+        r"""Try removing the field declaration or making it a static field""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExtensionTypeExtends = messageExtensionTypeExtends;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
index 456b559..b6938a3 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -3735,6 +3735,10 @@
             token);
         break;
       case DeclarationKind.ExtensionType:
+        if (staticToken == null && externalToken == null) {
+          reportRecoverableError(
+              firstName, codes.messageExtensionTypeDeclaresInstanceField);
+        }
         listener.endExtensionTypeFields(
             abstractToken,
             augmentToken,
@@ -4978,7 +4982,10 @@
               beforeParam.next!, beforeInitializers?.next, token);
           break;
         case DeclarationKind.ExtensionType:
-          // TODO(johnniwinther): Report an error on abstract methods.
+          if (optional(';', bodyStart) && externalToken == null) {
+            reportRecoverableError(isOperator ? name.next! : name,
+                codes.messageExtensionTypeDeclaresAbstractMember);
+          }
           listener.endExtensionTypeMethod(getOrSet, beforeStart.next!,
               beforeParam.next!, beforeInitializers?.next, token);
           break;
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index 24713de..f4ca305 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -333,6 +333,17 @@
       case "NON_SYNC_ABSTRACT_METHOD":
         // Not reported but followed by a MISSING_FUNCTION_BODY error.
         return;
+      case "ABSTRACT_EXTENSION_FIELD":
+        // Not reported but followed by a
+        // ParserErrorCode.EXTENSION_DECLARES_INSTANCE_FIELD.
+        return;
+      case "EXTENSION_TYPE_WITH_ABSTRACT_MEMBER":
+        // Reported by [ErrorVerifier._checkForExtensionTypeWithAbstractMember].
+        return;
+      case "EXTENSION_TYPE_DECLARES_INSTANCE_FIELD":
+        // Reported by
+        // [ErrorVerifier._checkForExtensionTypeDeclaresInstanceField]
+        return;
       case null:
         switch (message.code) {
           case codeAssertAsExpression:
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 9ca4290..a56bd1e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -8953,12 +8953,22 @@
     Builder? builder = _context.lookupLocalMember(name);
     if (builder?.next != null) {
       // Duplicated name, already reported.
+      while (builder != null) {
+        if (builder.next == null && builder is SourceFieldBuilder) {
+          // Assume the first field has been initialized.
+          _context.registerInitializedField(builder);
+        }
+        builder = builder.next;
+      }
       return <Initializer>[
         buildInvalidInitializer(
             buildProblem(
-                fasta.templateDuplicatedDeclarationUse.withArguments(name),
-                fieldNameOffset,
-                name.length),
+              fasta.templateDuplicatedDeclarationUse.withArguments(name),
+              fieldNameOffset,
+              name.length,
+              // Avoid reporting two errors.
+              suppressMessage: true,
+            ),
             fieldNameOffset)
       ];
     } else if (builder is SourceFieldBuilder &&
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 5fdb942..80abdeb 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -7,8 +7,6 @@
 
 AbstractClassConstructorTearOff/analyzerCode: Fail
 AbstractClassInstantiation/example: Fail
-AbstractExtensionField/analyzerCode: Fail
-AbstractExtensionField/example: Fail
 AbstractFieldConstructorInitializer/analyzerCode: Fail
 AbstractFieldInitializer/analyzerCode: Fail
 AbstractNotSync/example: Fail
@@ -320,9 +318,6 @@
 ExtendsNever/example: Fail # Feature not yet enabled by default.
 ExtendsVoid/analyzerCode: Fail # Feature not yet in analyzer.
 ExtendsVoid/example: Fail # Feature not yet enabled by default.
-ExtensionDeclaresAbstractMember/example: Fail
-ExtensionDeclaresConstructor/example: Fail
-ExtensionDeclaresInstanceField/example: Fail
 ExtensionInNullAwareReceiver/analyzerCode: Fail
 ExtensionMemberConflictsWithObjectMember/analyzerCode: Fail
 ExternalConstructorWithBody/part_wrapped_script1: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index d45b34a..e583919 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -1011,10 +1011,10 @@
 AbstractExtensionField:
   problemMessage: "Extension fields can't be declared 'abstract'."
   correctionMessage: "Try removing the 'abstract' keyword."
-# Separate class and extension field handling to support this.
-#  configuration: nnbd-strong
-#  script:
-#    - "extension C on int {abstract static var f;}"
+  analyzerCode: ABSTRACT_EXTENSION_FIELD
+  exampleAllowMoreCodes: true
+  script:
+    - "extension C on int {abstract static var f;}"
 
 AbstractFieldInitializer:
   problemMessage: "Abstract fields cannot have initializers."
@@ -2669,6 +2669,10 @@
   index: 94
   problemMessage: "Extensions can't declare abstract members."
   correctionMessage: "Try providing an implementation for the member."
+  script: |
+    extension E on int {
+      void method();
+    }
   analyzerCode: ParserErrorCode.EXTENSION_DECLARES_ABSTRACT_MEMBER
   comment: No parameters.
   documentation: |-
@@ -2693,10 +2697,24 @@
     Either provide an implementation for the member or remove it.
   hasPublishedDocs: true
 
+ExtensionTypeDeclaresAbstractMember:
+  problemMessage: "Extension types can't declare abstract members."
+  correctionMessage: "Try providing an implementation for the member."
+  analyzerCode: EXTENSION_TYPE_WITH_ABSTRACT_MEMBER
+  experiments: inline-class
+  script: |
+    extension type ET(int id) {
+      void method();
+    }
+
 ExtensionDeclaresConstructor:
   index: 92
   problemMessage: "Extensions can't declare constructors."
   correctionMessage: "Try removing the constructor declaration."
+  script: |
+    extension E on int {
+      E();
+    }
   analyzerCode: ParserErrorCode.EXTENSION_DECLARES_CONSTRUCTOR
   comment: No parameters.
   documentation: |-
@@ -2728,6 +2746,10 @@
   problemMessage: "Extensions can't declare instance fields"
   correctionMessage: "Try removing the field declaration or making it a static field"
   analyzerCode: ParserErrorCode.EXTENSION_DECLARES_INSTANCE_FIELD
+  script: |
+    extension E on int {
+      int? field;
+    }
   comment: No parameters.
   documentation: |-
     #### Description
@@ -2754,6 +2776,16 @@
     setter, or method.
   hasPublishedDocs: true
 
+ExtensionTypeDeclaresInstanceField:
+  problemMessage: "Extension types can't declare instance fields"
+  correctionMessage: "Try removing the field declaration or making it a static field"
+  analyzerCode: EXTENSION_TYPE_DECLARES_INSTANCE_FIELD
+  experiments: inline-class
+  script: |
+    extension type ET(int id) {
+      int? field;
+    }
+
 ConflictsWithConstructor:
   problemMessage: "Conflicts with constructor '#name'."
   analyzerCode: CONFLICTS_WITH_CONSTRUCTOR
diff --git a/pkg/front_end/parser_testcases/inline_class/extension_type.dart.expect b/pkg/front_end/parser_testcases/inline_class/extension_type.dart.expect
index 5fbf931..be6597f 100644
--- a/pkg/front_end/parser_testcases/inline_class/extension_type.dart.expect
+++ b/pkg/front_end/parser_testcases/inline_class/extension_type.dart.expect
@@ -1,3 +1,9 @@
+Problems reported:
+
+parser/inline_class/extension_type:10:7: Extension types can't declare instance fields
+  int field = 42;
+      ^^^^^
+
 beginCompilationUnit(extension)
   beginMetadataStar(extension)
   endMetadataStar(0)
@@ -236,6 +242,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
+            handleRecoverableError(ExtensionTypeDeclaresInstanceField, field, field)
           endExtensionTypeFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
diff --git a/pkg/front_end/parser_testcases/inline_class/extension_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/inline_class/extension_type.dart.intertwined.expect
index d2e2a50..c838b99 100644
--- a/pkg/front_end/parser_testcases/inline_class/extension_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/inline_class/extension_type.dart.intertwined.expect
@@ -428,6 +428,8 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
+                reportRecoverableError(field, ExtensionTypeDeclaresInstanceField)
+                  listener: handleRecoverableError(ExtensionTypeDeclaresInstanceField, field, field)
                 listener: endExtensionTypeFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
diff --git a/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.expect b/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.expect
index 6579481..e0e026f 100644
--- a/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.expect
+++ b/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.expect
@@ -1,3 +1,9 @@
+Problems reported:
+
+parser/inline_class/extension_type_const:10:7: Extension types can't declare instance fields
+  int field = 42;
+      ^^^^^
+
 beginCompilationUnit(extension)
   beginMetadataStar(extension)
   endMetadataStar(0)
@@ -236,6 +242,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
+            handleRecoverableError(ExtensionTypeDeclaresInstanceField, field, field)
           endExtensionTypeFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
diff --git a/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.intertwined.expect b/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.intertwined.expect
index e0a9a82..4b0b4af 100644
--- a/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.intertwined.expect
@@ -432,6 +432,8 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
+                reportRecoverableError(field, ExtensionTypeDeclaresInstanceField)
+                  listener: handleRecoverableError(ExtensionTypeDeclaresInstanceField, field, field)
                 listener: endExtensionTypeFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
diff --git a/pkg/front_end/testcases/extension_types/abstract_members.dart b/pkg/front_end/testcases/extension_types/abstract_members.dart
new file mode 100644
index 0000000..05cb77f
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/abstract_members.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2023, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by b
+// BSD-style license that can be found in the LICENSE file.
+
+extension type ET1(int id) {
+  abstract int m; /* Error */
+}
+
+extension type ET2<T>(T id) {
+  T get getter; /* Error */
+}
+
+extension type ET3(int id) {
+  void setter(int x); /* Error */
+}
+
+extension type ET4<T>(T id) {
+  void method(); /* Error */
+}
+
+extension type ET5(int id) {
+  int operator +(int other); /* Error */
+}
+
+class A {
+  int x();
+  dynamic noSuchMethod(Invocation invocation) => null;
+}
+
+extension type ET6(A id) implements A {
+  int method(); /* Error */
+
+  int get getter; /* Error */
+
+  void set setter(int v); /* Error */
+}
+
+extension E on A {
+  abstract int m; /* Error */
+
+  int method(); /* Error */
+
+  int get getter; /* Error */
+
+  void set setter(int v); /* Error */
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/extension_types/abstract_members.dart.strong.expect b/pkg/front_end/testcases/extension_types/abstract_members.dart.strong.expect
new file mode 100644
index 0000000..ccd3490
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/abstract_members.dart.strong.expect
@@ -0,0 +1,196 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:6:16: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   abstract int m; /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:10:9: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   T get getter; /* Error */
+//         ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:14:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   void setter(int x); /* Error */
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:18:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   void method(); /* Error */
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:22:16: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   int operator +(int other); /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:31:7: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   int method(); /* Error */
+//       ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:33:11: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   int get getter; /* Error */
+//           ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:35:12: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   void set setter(int v); /* Error */
+//            ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extension fields can't be declared 'abstract'.
+// Try removing the 'abstract' keyword.
+//   abstract int m; /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   abstract int m; /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:41:7: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+//   int method(); /* Error */
+//       ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:43:11: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+//   int get getter; /* Error */
+//           ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:45:12: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+//   void set setter(int v); /* Error */
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  no-such-method-forwarder method x() → core::int
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::int;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+}
+extension E on self::A {
+  get m = get self::E|m;
+  set m = set self::E|m;
+  method method = self::E|method;
+  method tearoff method = self::E|get#method;
+  get getter = self::E|get#getter;
+  set setter = self::E|set#setter;
+}
+extension type ET1(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  get m = get self::ET1|m;
+  set m = set self::ET1|m;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2<T extends core::Object? = dynamic>(T% id) {
+  abstract extension-type-member representation-field get id() → T%;
+  get getter = self::ET2|get#getter;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  method setter = self::ET3|setter;
+  method tearoff setter = self::ET3|get#setter;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4<T extends core::Object? = dynamic>(T% id) {
+  abstract extension-type-member representation-field get id() → T%;
+  method method = self::ET4|method;
+  method tearoff method = self::ET4|get#method;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  operator + = self::ET5|+;
+  constructor • = self::ET5|constructor#;
+  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+extension type ET6(self::A id) implements self::A {
+  abstract extension-type-member representation-field get id() → self::A;
+  method method = self::ET6|method;
+  method tearoff method = self::ET6|get#method;
+  get getter = self::ET6|get#getter;
+  set setter = self::ET6|set#setter;
+  constructor • = self::ET6|constructor#;
+  constructor tearoff • = self::ET6|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|constructor#(id);
+static abstract extension-type-member get ET1|m() → core::int;
+static abstract extension-type-member set ET1|m(core::int #externalFieldValue) → void;
+static extension-type-member method ET2|constructor#<T extends core::Object? = dynamic>(self::ET2|constructor#::T% id) → self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ {
+  lowered final self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET2|constructor#_#new#tearOff::T% id) → self::ET2<self::ET2|constructor#_#new#tearOff::T%>% /* = self::ET2|constructor#_#new#tearOff::T% */
+  return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET2|get#getter<T extends core::Object? = dynamic>(lowered final self::ET2<self::ET2|get#getter::T%> /* = self::ET2|get#getter::T% */ #this) → self::ET2|get#getter::T%;
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|constructor#(id);
+static abstract extension-type-member method ET3|setter(lowered final self::ET3 /* = core::int */ #this, core::int x) → void;
+static extension-type-member method ET3|get#setter(lowered final self::ET3 /* = core::int */ #this) → (core::int) → void
+  return (core::int x) → void => self::ET3|setter(#this, x);
+static extension-type-member method ET4|constructor#<T extends core::Object? = dynamic>(self::ET4|constructor#::T% id) → self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ {
+  lowered final self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ #this = id;
+  return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET4|constructor#_#new#tearOff::T% id) → self::ET4<self::ET4|constructor#_#new#tearOff::T%>% /* = self::ET4|constructor#_#new#tearOff::T% */
+  return self::ET4|constructor#<self::ET4|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET4|method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|method::T%> /* = self::ET4|method::T% */ #this) → void;
+static extension-type-member method ET4|get#method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|get#method::T%>% /* = self::ET4|get#method::T% */ #this) → () → void
+  return () → void => self::ET4|method<self::ET4|get#method::T%>(#this);
+static extension-type-member method ET5|constructor#(core::int id) → self::ET5 /* = core::int */ {
+  lowered final self::ET5 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET5|constructor#_#new#tearOff(core::int id) → self::ET5 /* = core::int */
+  return self::ET5|constructor#(id);
+static abstract extension-type-member method ET5|+(lowered final self::ET5 /* = core::int */ #this, core::int other) → core::int;
+static extension-type-member method ET6|constructor#(self::A id) → self::ET6 /* = self::A */ {
+  lowered final self::ET6 /* = self::A */ #this = id;
+  return #this;
+}
+static extension-type-member method ET6|constructor#_#new#tearOff(self::A id) → self::ET6 /* = self::A */
+  return self::ET6|constructor#(id);
+static abstract extension-type-member method ET6|method(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static extension-type-member method ET6|get#method(lowered final self::ET6 /* = self::A */ #this) → () → core::int
+  return () → core::int => self::ET6|method(#this);
+static abstract extension-type-member method ET6|get#getter(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static abstract extension-type-member method ET6|set#setter(lowered final self::ET6 /* = self::A */ #this, core::int v) → void;
+static abstract extension-member get E|m() → core::int;
+static abstract extension-member set E|m(core::int #externalFieldValue) → void;
+static abstract extension-member method E|method(lowered final self::A #this) → core::int;
+static extension-member method E|get#method(lowered final self::A #this) → () → core::int
+  return () → core::int => self::E|method(#this);
+static abstract extension-member method E|get#getter(lowered final self::A #this) → core::int;
+static abstract extension-member method E|set#setter(lowered final self::A #this, core::int v) → void;
+
+constants  {
+  #C1 = #x
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{}
+}
diff --git a/pkg/front_end/testcases/extension_types/abstract_members.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/abstract_members.dart.strong.transformed.expect
new file mode 100644
index 0000000..ccd3490
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/abstract_members.dart.strong.transformed.expect
@@ -0,0 +1,196 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:6:16: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   abstract int m; /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:10:9: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   T get getter; /* Error */
+//         ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:14:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   void setter(int x); /* Error */
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:18:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   void method(); /* Error */
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:22:16: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   int operator +(int other); /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:31:7: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   int method(); /* Error */
+//       ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:33:11: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   int get getter; /* Error */
+//           ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:35:12: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   void set setter(int v); /* Error */
+//            ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extension fields can't be declared 'abstract'.
+// Try removing the 'abstract' keyword.
+//   abstract int m; /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   abstract int m; /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:41:7: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+//   int method(); /* Error */
+//       ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:43:11: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+//   int get getter; /* Error */
+//           ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:45:12: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+//   void set setter(int v); /* Error */
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  no-such-method-forwarder method x() → core::int
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::int;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+}
+extension E on self::A {
+  get m = get self::E|m;
+  set m = set self::E|m;
+  method method = self::E|method;
+  method tearoff method = self::E|get#method;
+  get getter = self::E|get#getter;
+  set setter = self::E|set#setter;
+}
+extension type ET1(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  get m = get self::ET1|m;
+  set m = set self::ET1|m;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2<T extends core::Object? = dynamic>(T% id) {
+  abstract extension-type-member representation-field get id() → T%;
+  get getter = self::ET2|get#getter;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  method setter = self::ET3|setter;
+  method tearoff setter = self::ET3|get#setter;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4<T extends core::Object? = dynamic>(T% id) {
+  abstract extension-type-member representation-field get id() → T%;
+  method method = self::ET4|method;
+  method tearoff method = self::ET4|get#method;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  operator + = self::ET5|+;
+  constructor • = self::ET5|constructor#;
+  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+extension type ET6(self::A id) implements self::A {
+  abstract extension-type-member representation-field get id() → self::A;
+  method method = self::ET6|method;
+  method tearoff method = self::ET6|get#method;
+  get getter = self::ET6|get#getter;
+  set setter = self::ET6|set#setter;
+  constructor • = self::ET6|constructor#;
+  constructor tearoff • = self::ET6|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|constructor#(id);
+static abstract extension-type-member get ET1|m() → core::int;
+static abstract extension-type-member set ET1|m(core::int #externalFieldValue) → void;
+static extension-type-member method ET2|constructor#<T extends core::Object? = dynamic>(self::ET2|constructor#::T% id) → self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ {
+  lowered final self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET2|constructor#_#new#tearOff::T% id) → self::ET2<self::ET2|constructor#_#new#tearOff::T%>% /* = self::ET2|constructor#_#new#tearOff::T% */
+  return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET2|get#getter<T extends core::Object? = dynamic>(lowered final self::ET2<self::ET2|get#getter::T%> /* = self::ET2|get#getter::T% */ #this) → self::ET2|get#getter::T%;
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|constructor#(id);
+static abstract extension-type-member method ET3|setter(lowered final self::ET3 /* = core::int */ #this, core::int x) → void;
+static extension-type-member method ET3|get#setter(lowered final self::ET3 /* = core::int */ #this) → (core::int) → void
+  return (core::int x) → void => self::ET3|setter(#this, x);
+static extension-type-member method ET4|constructor#<T extends core::Object? = dynamic>(self::ET4|constructor#::T% id) → self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ {
+  lowered final self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ #this = id;
+  return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET4|constructor#_#new#tearOff::T% id) → self::ET4<self::ET4|constructor#_#new#tearOff::T%>% /* = self::ET4|constructor#_#new#tearOff::T% */
+  return self::ET4|constructor#<self::ET4|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET4|method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|method::T%> /* = self::ET4|method::T% */ #this) → void;
+static extension-type-member method ET4|get#method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|get#method::T%>% /* = self::ET4|get#method::T% */ #this) → () → void
+  return () → void => self::ET4|method<self::ET4|get#method::T%>(#this);
+static extension-type-member method ET5|constructor#(core::int id) → self::ET5 /* = core::int */ {
+  lowered final self::ET5 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET5|constructor#_#new#tearOff(core::int id) → self::ET5 /* = core::int */
+  return self::ET5|constructor#(id);
+static abstract extension-type-member method ET5|+(lowered final self::ET5 /* = core::int */ #this, core::int other) → core::int;
+static extension-type-member method ET6|constructor#(self::A id) → self::ET6 /* = self::A */ {
+  lowered final self::ET6 /* = self::A */ #this = id;
+  return #this;
+}
+static extension-type-member method ET6|constructor#_#new#tearOff(self::A id) → self::ET6 /* = self::A */
+  return self::ET6|constructor#(id);
+static abstract extension-type-member method ET6|method(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static extension-type-member method ET6|get#method(lowered final self::ET6 /* = self::A */ #this) → () → core::int
+  return () → core::int => self::ET6|method(#this);
+static abstract extension-type-member method ET6|get#getter(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static abstract extension-type-member method ET6|set#setter(lowered final self::ET6 /* = self::A */ #this, core::int v) → void;
+static abstract extension-member get E|m() → core::int;
+static abstract extension-member set E|m(core::int #externalFieldValue) → void;
+static abstract extension-member method E|method(lowered final self::A #this) → core::int;
+static extension-member method E|get#method(lowered final self::A #this) → () → core::int
+  return () → core::int => self::E|method(#this);
+static abstract extension-member method E|get#getter(lowered final self::A #this) → core::int;
+static abstract extension-member method E|set#setter(lowered final self::A #this, core::int v) → void;
+
+constants  {
+  #C1 = #x
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{}
+}
diff --git a/pkg/front_end/testcases/extension_types/abstract_members.dart.textual_outline.expect b/pkg/front_end/testcases/extension_types/abstract_members.dart.textual_outline.expect
new file mode 100644
index 0000000..944d869
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/abstract_members.dart.textual_outline.expect
@@ -0,0 +1,30 @@
+extension type ET1(int id) {
+  abstract int m;
+}
+extension type ET2<T>(T id) {
+  T get getter;
+}
+extension type ET3(int id) {
+  void setter(int x);
+}
+extension type ET4<T>(T id) {
+  void method();
+}
+extension type ET5(int id) {
+  int operator +(int other);
+}
+class A {
+  int x();
+  dynamic noSuchMethod(Invocation invocation) => null;
+}
+extension type ET6(A id) implements A {
+  int method();
+  int get getter;
+  void set setter(int v);
+}
+extension E on A {
+  abstract int m;
+  int method();
+  int get getter;
+  void set setter(int v);
+}
diff --git a/pkg/front_end/testcases/extension_types/abstract_members.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extension_types/abstract_members.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..2b55e2d
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/abstract_members.dart.textual_outline_modelled.expect
@@ -0,0 +1,30 @@
+class A {
+  dynamic noSuchMethod(Invocation invocation) => null;
+  int x();
+}
+extension E on A {
+  abstract int m;
+  int get getter;
+  int method();
+  void set setter(int v);
+}
+extension type ET1(int id) {
+  abstract int m;
+}
+extension type ET2<T>(T id) {
+  T get getter;
+}
+extension type ET3(int id) {
+  void setter(int x);
+}
+extension type ET4<T>(T id) {
+  void method();
+}
+extension type ET5(int id) {
+  int operator +(int other);
+}
+extension type ET6(A id) implements A {
+  int get getter;
+  int method();
+  void set setter(int v);
+}
diff --git a/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.expect b/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.expect
new file mode 100644
index 0000000..ccd3490
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.expect
@@ -0,0 +1,196 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:6:16: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   abstract int m; /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:10:9: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   T get getter; /* Error */
+//         ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:14:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   void setter(int x); /* Error */
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:18:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   void method(); /* Error */
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:22:16: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   int operator +(int other); /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:31:7: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   int method(); /* Error */
+//       ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:33:11: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   int get getter; /* Error */
+//           ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:35:12: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   void set setter(int v); /* Error */
+//            ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extension fields can't be declared 'abstract'.
+// Try removing the 'abstract' keyword.
+//   abstract int m; /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   abstract int m; /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:41:7: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+//   int method(); /* Error */
+//       ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:43:11: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+//   int get getter; /* Error */
+//           ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:45:12: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+//   void set setter(int v); /* Error */
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  no-such-method-forwarder method x() → core::int
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::int;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+}
+extension E on self::A {
+  get m = get self::E|m;
+  set m = set self::E|m;
+  method method = self::E|method;
+  method tearoff method = self::E|get#method;
+  get getter = self::E|get#getter;
+  set setter = self::E|set#setter;
+}
+extension type ET1(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  get m = get self::ET1|m;
+  set m = set self::ET1|m;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2<T extends core::Object? = dynamic>(T% id) {
+  abstract extension-type-member representation-field get id() → T%;
+  get getter = self::ET2|get#getter;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  method setter = self::ET3|setter;
+  method tearoff setter = self::ET3|get#setter;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4<T extends core::Object? = dynamic>(T% id) {
+  abstract extension-type-member representation-field get id() → T%;
+  method method = self::ET4|method;
+  method tearoff method = self::ET4|get#method;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  operator + = self::ET5|+;
+  constructor • = self::ET5|constructor#;
+  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+extension type ET6(self::A id) implements self::A {
+  abstract extension-type-member representation-field get id() → self::A;
+  method method = self::ET6|method;
+  method tearoff method = self::ET6|get#method;
+  get getter = self::ET6|get#getter;
+  set setter = self::ET6|set#setter;
+  constructor • = self::ET6|constructor#;
+  constructor tearoff • = self::ET6|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|constructor#(id);
+static abstract extension-type-member get ET1|m() → core::int;
+static abstract extension-type-member set ET1|m(core::int #externalFieldValue) → void;
+static extension-type-member method ET2|constructor#<T extends core::Object? = dynamic>(self::ET2|constructor#::T% id) → self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ {
+  lowered final self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET2|constructor#_#new#tearOff::T% id) → self::ET2<self::ET2|constructor#_#new#tearOff::T%>% /* = self::ET2|constructor#_#new#tearOff::T% */
+  return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET2|get#getter<T extends core::Object? = dynamic>(lowered final self::ET2<self::ET2|get#getter::T%> /* = self::ET2|get#getter::T% */ #this) → self::ET2|get#getter::T%;
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|constructor#(id);
+static abstract extension-type-member method ET3|setter(lowered final self::ET3 /* = core::int */ #this, core::int x) → void;
+static extension-type-member method ET3|get#setter(lowered final self::ET3 /* = core::int */ #this) → (core::int) → void
+  return (core::int x) → void => self::ET3|setter(#this, x);
+static extension-type-member method ET4|constructor#<T extends core::Object? = dynamic>(self::ET4|constructor#::T% id) → self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ {
+  lowered final self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ #this = id;
+  return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET4|constructor#_#new#tearOff::T% id) → self::ET4<self::ET4|constructor#_#new#tearOff::T%>% /* = self::ET4|constructor#_#new#tearOff::T% */
+  return self::ET4|constructor#<self::ET4|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET4|method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|method::T%> /* = self::ET4|method::T% */ #this) → void;
+static extension-type-member method ET4|get#method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|get#method::T%>% /* = self::ET4|get#method::T% */ #this) → () → void
+  return () → void => self::ET4|method<self::ET4|get#method::T%>(#this);
+static extension-type-member method ET5|constructor#(core::int id) → self::ET5 /* = core::int */ {
+  lowered final self::ET5 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET5|constructor#_#new#tearOff(core::int id) → self::ET5 /* = core::int */
+  return self::ET5|constructor#(id);
+static abstract extension-type-member method ET5|+(lowered final self::ET5 /* = core::int */ #this, core::int other) → core::int;
+static extension-type-member method ET6|constructor#(self::A id) → self::ET6 /* = self::A */ {
+  lowered final self::ET6 /* = self::A */ #this = id;
+  return #this;
+}
+static extension-type-member method ET6|constructor#_#new#tearOff(self::A id) → self::ET6 /* = self::A */
+  return self::ET6|constructor#(id);
+static abstract extension-type-member method ET6|method(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static extension-type-member method ET6|get#method(lowered final self::ET6 /* = self::A */ #this) → () → core::int
+  return () → core::int => self::ET6|method(#this);
+static abstract extension-type-member method ET6|get#getter(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static abstract extension-type-member method ET6|set#setter(lowered final self::ET6 /* = self::A */ #this, core::int v) → void;
+static abstract extension-member get E|m() → core::int;
+static abstract extension-member set E|m(core::int #externalFieldValue) → void;
+static abstract extension-member method E|method(lowered final self::A #this) → core::int;
+static extension-member method E|get#method(lowered final self::A #this) → () → core::int
+  return () → core::int => self::E|method(#this);
+static abstract extension-member method E|get#getter(lowered final self::A #this) → core::int;
+static abstract extension-member method E|set#setter(lowered final self::A #this, core::int v) → void;
+
+constants  {
+  #C1 = #x
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{}
+}
diff --git a/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.modular.expect
new file mode 100644
index 0000000..ccd3490
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.modular.expect
@@ -0,0 +1,196 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:6:16: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   abstract int m; /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:10:9: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   T get getter; /* Error */
+//         ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:14:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   void setter(int x); /* Error */
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:18:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   void method(); /* Error */
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:22:16: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   int operator +(int other); /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:31:7: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   int method(); /* Error */
+//       ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:33:11: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   int get getter; /* Error */
+//           ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:35:12: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   void set setter(int v); /* Error */
+//            ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extension fields can't be declared 'abstract'.
+// Try removing the 'abstract' keyword.
+//   abstract int m; /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   abstract int m; /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:41:7: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+//   int method(); /* Error */
+//       ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:43:11: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+//   int get getter; /* Error */
+//           ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:45:12: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+//   void set setter(int v); /* Error */
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  no-such-method-forwarder method x() → core::int
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::int;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+}
+extension E on self::A {
+  get m = get self::E|m;
+  set m = set self::E|m;
+  method method = self::E|method;
+  method tearoff method = self::E|get#method;
+  get getter = self::E|get#getter;
+  set setter = self::E|set#setter;
+}
+extension type ET1(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  get m = get self::ET1|m;
+  set m = set self::ET1|m;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2<T extends core::Object? = dynamic>(T% id) {
+  abstract extension-type-member representation-field get id() → T%;
+  get getter = self::ET2|get#getter;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  method setter = self::ET3|setter;
+  method tearoff setter = self::ET3|get#setter;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4<T extends core::Object? = dynamic>(T% id) {
+  abstract extension-type-member representation-field get id() → T%;
+  method method = self::ET4|method;
+  method tearoff method = self::ET4|get#method;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  operator + = self::ET5|+;
+  constructor • = self::ET5|constructor#;
+  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+extension type ET6(self::A id) implements self::A {
+  abstract extension-type-member representation-field get id() → self::A;
+  method method = self::ET6|method;
+  method tearoff method = self::ET6|get#method;
+  get getter = self::ET6|get#getter;
+  set setter = self::ET6|set#setter;
+  constructor • = self::ET6|constructor#;
+  constructor tearoff • = self::ET6|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|constructor#(id);
+static abstract extension-type-member get ET1|m() → core::int;
+static abstract extension-type-member set ET1|m(core::int #externalFieldValue) → void;
+static extension-type-member method ET2|constructor#<T extends core::Object? = dynamic>(self::ET2|constructor#::T% id) → self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ {
+  lowered final self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET2|constructor#_#new#tearOff::T% id) → self::ET2<self::ET2|constructor#_#new#tearOff::T%>% /* = self::ET2|constructor#_#new#tearOff::T% */
+  return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET2|get#getter<T extends core::Object? = dynamic>(lowered final self::ET2<self::ET2|get#getter::T%> /* = self::ET2|get#getter::T% */ #this) → self::ET2|get#getter::T%;
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|constructor#(id);
+static abstract extension-type-member method ET3|setter(lowered final self::ET3 /* = core::int */ #this, core::int x) → void;
+static extension-type-member method ET3|get#setter(lowered final self::ET3 /* = core::int */ #this) → (core::int) → void
+  return (core::int x) → void => self::ET3|setter(#this, x);
+static extension-type-member method ET4|constructor#<T extends core::Object? = dynamic>(self::ET4|constructor#::T% id) → self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ {
+  lowered final self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ #this = id;
+  return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET4|constructor#_#new#tearOff::T% id) → self::ET4<self::ET4|constructor#_#new#tearOff::T%>% /* = self::ET4|constructor#_#new#tearOff::T% */
+  return self::ET4|constructor#<self::ET4|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET4|method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|method::T%> /* = self::ET4|method::T% */ #this) → void;
+static extension-type-member method ET4|get#method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|get#method::T%>% /* = self::ET4|get#method::T% */ #this) → () → void
+  return () → void => self::ET4|method<self::ET4|get#method::T%>(#this);
+static extension-type-member method ET5|constructor#(core::int id) → self::ET5 /* = core::int */ {
+  lowered final self::ET5 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET5|constructor#_#new#tearOff(core::int id) → self::ET5 /* = core::int */
+  return self::ET5|constructor#(id);
+static abstract extension-type-member method ET5|+(lowered final self::ET5 /* = core::int */ #this, core::int other) → core::int;
+static extension-type-member method ET6|constructor#(self::A id) → self::ET6 /* = self::A */ {
+  lowered final self::ET6 /* = self::A */ #this = id;
+  return #this;
+}
+static extension-type-member method ET6|constructor#_#new#tearOff(self::A id) → self::ET6 /* = self::A */
+  return self::ET6|constructor#(id);
+static abstract extension-type-member method ET6|method(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static extension-type-member method ET6|get#method(lowered final self::ET6 /* = self::A */ #this) → () → core::int
+  return () → core::int => self::ET6|method(#this);
+static abstract extension-type-member method ET6|get#getter(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static abstract extension-type-member method ET6|set#setter(lowered final self::ET6 /* = self::A */ #this, core::int v) → void;
+static abstract extension-member get E|m() → core::int;
+static abstract extension-member set E|m(core::int #externalFieldValue) → void;
+static abstract extension-member method E|method(lowered final self::A #this) → core::int;
+static extension-member method E|get#method(lowered final self::A #this) → () → core::int
+  return () → core::int => self::E|method(#this);
+static abstract extension-member method E|get#getter(lowered final self::A #this) → core::int;
+static abstract extension-member method E|set#setter(lowered final self::A #this, core::int v) → void;
+
+constants  {
+  #C1 = #x
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{}
+}
diff --git a/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.outline.expect
new file mode 100644
index 0000000..ec6f334
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.outline.expect
@@ -0,0 +1,184 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:6:16: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   abstract int m; /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:10:9: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   T get getter; /* Error */
+//         ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:14:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   void setter(int x); /* Error */
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:18:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   void method(); /* Error */
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:22:16: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   int operator +(int other); /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:31:7: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   int method(); /* Error */
+//       ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:33:11: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   int get getter; /* Error */
+//           ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:35:12: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   void set setter(int v); /* Error */
+//            ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extension fields can't be declared 'abstract'.
+// Try removing the 'abstract' keyword.
+//   abstract int m; /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   abstract int m; /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:41:7: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+//   int method(); /* Error */
+//       ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:43:11: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+//   int get getter; /* Error */
+//           ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:45:12: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+//   void set setter(int v); /* Error */
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+  no-such-method-forwarder method x() → core::int
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#x, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::int;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    ;
+}
+extension E on self::A {
+  get m = get self::E|m;
+  set m = set self::E|m;
+  method method = self::E|method;
+  method tearoff method = self::E|get#method;
+  get getter = self::E|get#getter;
+  set setter = self::E|set#setter;
+}
+extension type ET1(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  get m = get self::ET1|m;
+  set m = set self::ET1|m;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2<T extends core::Object? = dynamic>(T% id) {
+  abstract extension-type-member representation-field get id() → T%;
+  get getter = self::ET2|get#getter;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  method setter = self::ET3|setter;
+  method tearoff setter = self::ET3|get#setter;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4<T extends core::Object? = dynamic>(T% id) {
+  abstract extension-type-member representation-field get id() → T%;
+  method method = self::ET4|method;
+  method tearoff method = self::ET4|get#method;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  operator + = self::ET5|+;
+  constructor • = self::ET5|constructor#;
+  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+extension type ET6(self::A id) implements self::A {
+  abstract extension-type-member representation-field get id() → self::A;
+  method method = self::ET6|method;
+  method tearoff method = self::ET6|get#method;
+  get getter = self::ET6|get#getter;
+  set setter = self::ET6|set#setter;
+  constructor • = self::ET6|constructor#;
+  constructor tearoff • = self::ET6|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */
+  ;
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|constructor#(id);
+static abstract extension-type-member get ET1|m() → core::int;
+static abstract extension-type-member set ET1|m(core::int #externalFieldValue) → void;
+static extension-type-member method ET2|constructor#<T extends core::Object? = dynamic>(self::ET2|constructor#::T% id) → self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */
+  ;
+static extension-type-member method ET2|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET2|constructor#_#new#tearOff::T% id) → self::ET2<self::ET2|constructor#_#new#tearOff::T%>% /* = self::ET2|constructor#_#new#tearOff::T% */
+  return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET2|get#getter<T extends core::Object? = dynamic>(lowered final self::ET2<self::ET2|get#getter::T%> /* = self::ET2|get#getter::T% */ #this) → self::ET2|get#getter::T%;
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */
+  ;
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|constructor#(id);
+static abstract extension-type-member method ET3|setter(lowered final self::ET3 /* = core::int */ #this, core::int x) → void;
+static extension-type-member method ET3|get#setter(lowered final self::ET3 /* = core::int */ #this) → (core::int) → void
+  return (core::int x) → void => self::ET3|setter(#this, x);
+static extension-type-member method ET4|constructor#<T extends core::Object? = dynamic>(self::ET4|constructor#::T% id) → self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */
+  ;
+static extension-type-member method ET4|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET4|constructor#_#new#tearOff::T% id) → self::ET4<self::ET4|constructor#_#new#tearOff::T%>% /* = self::ET4|constructor#_#new#tearOff::T% */
+  return self::ET4|constructor#<self::ET4|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET4|method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|method::T%> /* = self::ET4|method::T% */ #this) → void;
+static extension-type-member method ET4|get#method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|get#method::T%>% /* = self::ET4|get#method::T% */ #this) → () → void
+  return () → void => self::ET4|method<self::ET4|get#method::T%>(#this);
+static extension-type-member method ET5|constructor#(core::int id) → self::ET5 /* = core::int */
+  ;
+static extension-type-member method ET5|constructor#_#new#tearOff(core::int id) → self::ET5 /* = core::int */
+  return self::ET5|constructor#(id);
+static abstract extension-type-member method ET5|+(lowered final self::ET5 /* = core::int */ #this, core::int other) → core::int;
+static extension-type-member method ET6|constructor#(self::A id) → self::ET6 /* = self::A */
+  ;
+static extension-type-member method ET6|constructor#_#new#tearOff(self::A id) → self::ET6 /* = self::A */
+  return self::ET6|constructor#(id);
+static abstract extension-type-member method ET6|method(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static extension-type-member method ET6|get#method(lowered final self::ET6 /* = self::A */ #this) → () → core::int
+  return () → core::int => self::ET6|method(#this);
+static abstract extension-type-member method ET6|get#getter(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static abstract extension-type-member method ET6|set#setter(lowered final self::ET6 /* = self::A */ #this, core::int v) → void;
+static abstract extension-member get E|m() → core::int;
+static abstract extension-member set E|m(core::int #externalFieldValue) → void;
+static abstract extension-member method E|method(lowered final self::A #this) → core::int;
+static extension-member method E|get#method(lowered final self::A #this) → () → core::int
+  return () → core::int => self::E|method(#this);
+static abstract extension-member method E|get#getter(lowered final self::A #this) → core::int;
+static abstract extension-member method E|set#setter(lowered final self::A #this, core::int v) → void;
+
+
+Extra constant evaluation status:
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:26:7 -> SymbolConstant(#x)
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:26:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:26:7 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:26:7 -> MapConstant(const <Symbol*, dynamic>{})
+Extra constant evaluation: evaluated: 34, effectively constant: 4
diff --git a/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.transformed.expect
new file mode 100644
index 0000000..ccd3490
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.transformed.expect
@@ -0,0 +1,196 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:6:16: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   abstract int m; /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:10:9: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   T get getter; /* Error */
+//         ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:14:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   void setter(int x); /* Error */
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:18:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   void method(); /* Error */
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:22:16: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   int operator +(int other); /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:31:7: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   int method(); /* Error */
+//       ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:33:11: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   int get getter; /* Error */
+//           ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:35:12: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+//   void set setter(int v); /* Error */
+//            ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extension fields can't be declared 'abstract'.
+// Try removing the 'abstract' keyword.
+//   abstract int m; /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   abstract int m; /* Error */
+//                ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:41:7: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+//   int method(); /* Error */
+//       ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:43:11: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+//   int get getter; /* Error */
+//           ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:45:12: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+//   void set setter(int v); /* Error */
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  no-such-method-forwarder method x() → core::int
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::int;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+}
+extension E on self::A {
+  get m = get self::E|m;
+  set m = set self::E|m;
+  method method = self::E|method;
+  method tearoff method = self::E|get#method;
+  get getter = self::E|get#getter;
+  set setter = self::E|set#setter;
+}
+extension type ET1(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  get m = get self::ET1|m;
+  set m = set self::ET1|m;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2<T extends core::Object? = dynamic>(T% id) {
+  abstract extension-type-member representation-field get id() → T%;
+  get getter = self::ET2|get#getter;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  method setter = self::ET3|setter;
+  method tearoff setter = self::ET3|get#setter;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4<T extends core::Object? = dynamic>(T% id) {
+  abstract extension-type-member representation-field get id() → T%;
+  method method = self::ET4|method;
+  method tearoff method = self::ET4|get#method;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  operator + = self::ET5|+;
+  constructor • = self::ET5|constructor#;
+  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+extension type ET6(self::A id) implements self::A {
+  abstract extension-type-member representation-field get id() → self::A;
+  method method = self::ET6|method;
+  method tearoff method = self::ET6|get#method;
+  get getter = self::ET6|get#getter;
+  set setter = self::ET6|set#setter;
+  constructor • = self::ET6|constructor#;
+  constructor tearoff • = self::ET6|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|constructor#(id);
+static abstract extension-type-member get ET1|m() → core::int;
+static abstract extension-type-member set ET1|m(core::int #externalFieldValue) → void;
+static extension-type-member method ET2|constructor#<T extends core::Object? = dynamic>(self::ET2|constructor#::T% id) → self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ {
+  lowered final self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET2|constructor#_#new#tearOff::T% id) → self::ET2<self::ET2|constructor#_#new#tearOff::T%>% /* = self::ET2|constructor#_#new#tearOff::T% */
+  return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET2|get#getter<T extends core::Object? = dynamic>(lowered final self::ET2<self::ET2|get#getter::T%> /* = self::ET2|get#getter::T% */ #this) → self::ET2|get#getter::T%;
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|constructor#(id);
+static abstract extension-type-member method ET3|setter(lowered final self::ET3 /* = core::int */ #this, core::int x) → void;
+static extension-type-member method ET3|get#setter(lowered final self::ET3 /* = core::int */ #this) → (core::int) → void
+  return (core::int x) → void => self::ET3|setter(#this, x);
+static extension-type-member method ET4|constructor#<T extends core::Object? = dynamic>(self::ET4|constructor#::T% id) → self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ {
+  lowered final self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ #this = id;
+  return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET4|constructor#_#new#tearOff::T% id) → self::ET4<self::ET4|constructor#_#new#tearOff::T%>% /* = self::ET4|constructor#_#new#tearOff::T% */
+  return self::ET4|constructor#<self::ET4|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET4|method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|method::T%> /* = self::ET4|method::T% */ #this) → void;
+static extension-type-member method ET4|get#method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|get#method::T%>% /* = self::ET4|get#method::T% */ #this) → () → void
+  return () → void => self::ET4|method<self::ET4|get#method::T%>(#this);
+static extension-type-member method ET5|constructor#(core::int id) → self::ET5 /* = core::int */ {
+  lowered final self::ET5 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET5|constructor#_#new#tearOff(core::int id) → self::ET5 /* = core::int */
+  return self::ET5|constructor#(id);
+static abstract extension-type-member method ET5|+(lowered final self::ET5 /* = core::int */ #this, core::int other) → core::int;
+static extension-type-member method ET6|constructor#(self::A id) → self::ET6 /* = self::A */ {
+  lowered final self::ET6 /* = self::A */ #this = id;
+  return #this;
+}
+static extension-type-member method ET6|constructor#_#new#tearOff(self::A id) → self::ET6 /* = self::A */
+  return self::ET6|constructor#(id);
+static abstract extension-type-member method ET6|method(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static extension-type-member method ET6|get#method(lowered final self::ET6 /* = self::A */ #this) → () → core::int
+  return () → core::int => self::ET6|method(#this);
+static abstract extension-type-member method ET6|get#getter(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static abstract extension-type-member method ET6|set#setter(lowered final self::ET6 /* = self::A */ #this, core::int v) → void;
+static abstract extension-member get E|m() → core::int;
+static abstract extension-member set E|m(core::int #externalFieldValue) → void;
+static abstract extension-member method E|method(lowered final self::A #this) → core::int;
+static extension-member method E|get#method(lowered final self::A #this) → () → core::int
+  return () → core::int => self::E|method(#this);
+static abstract extension-member method E|get#getter(lowered final self::A #this) → core::int;
+static abstract extension-member method E|set#setter(lowered final self::A #this, core::int v) → void;
+
+constants  {
+  #C1 = #x
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{}
+}
diff --git a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.expect b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.expect
index 6f10dd4..3988d23 100644
--- a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.expect
@@ -1,4 +1,12 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/extension_type_declarations.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int field = 42;
+//             ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.transformed.expect
index 6f10dd4..3988d23 100644
--- a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.transformed.expect
@@ -1,4 +1,12 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/extension_type_declarations.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int field = 42;
+//             ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.expect b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.expect
index 6f10dd4..3988d23 100644
--- a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.expect
@@ -1,4 +1,12 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/extension_type_declarations.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int field = 42;
+//             ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.modular.expect
index 6f10dd4..3988d23 100644
--- a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.modular.expect
@@ -1,4 +1,12 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/extension_type_declarations.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int field = 42;
+//             ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.outline.expect
index 19cc803..0342e27 100644
--- a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.outline.expect
@@ -1,4 +1,12 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/extension_type_declarations.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int field = 42;
+//             ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.transformed.expect
index 6f10dd4..3988d23 100644
--- a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.transformed.expect
@@ -1,4 +1,12 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/extension_type_declarations.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int field = 42;
+//             ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart b/pkg/front_end/testcases/extension_types/field_initializer.dart
new file mode 100644
index 0000000..5f5db01
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2023, 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.
+
+extension type ET1(int id) {
+  int id = 0;
+}
+
+extension type ET2(int id) {
+  int x = 0;
+}
+
+extension type ET3(int id) {
+  final int x = 0;
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.expect
new file mode 100644
index 0000000..da888e9
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.expect
@@ -0,0 +1,67 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int id = 0;
+//       ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: 'id' is already declared in this scope.
+//   int id = 0;
+//       ^^
+// pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+//                        ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:10:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int x = 0;
+//       ^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int x = 0;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+                       ^^";
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+  lowered final self::ET2 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+  return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|constructor#(id);
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.transformed.expect
new file mode 100644
index 0000000..da888e9
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.transformed.expect
@@ -0,0 +1,67 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int id = 0;
+//       ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: 'id' is already declared in this scope.
+//   int id = 0;
+//       ^^
+// pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+//                        ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:10:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int x = 0;
+//       ^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int x = 0;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+                       ^^";
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+  lowered final self::ET2 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+  return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|constructor#(id);
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.textual_outline.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.textual_outline.expect
new file mode 100644
index 0000000..7b06f7e
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+extension type ET1(int id) {
+  int id = 0;
+}
+extension type ET2(int id) {
+  int x = 0;
+}
+extension type ET3(int id) {
+  final int x = 0;
+}
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..7b06f7e
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+extension type ET1(int id) {
+  int id = 0;
+}
+extension type ET2(int id) {
+  int x = 0;
+}
+extension type ET3(int id) {
+  final int x = 0;
+}
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.expect
new file mode 100644
index 0000000..da888e9
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.expect
@@ -0,0 +1,67 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int id = 0;
+//       ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: 'id' is already declared in this scope.
+//   int id = 0;
+//       ^^
+// pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+//                        ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:10:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int x = 0;
+//       ^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int x = 0;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+                       ^^";
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+  lowered final self::ET2 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+  return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|constructor#(id);
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..da888e9
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.modular.expect
@@ -0,0 +1,67 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int id = 0;
+//       ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: 'id' is already declared in this scope.
+//   int id = 0;
+//       ^^
+// pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+//                        ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:10:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int x = 0;
+//       ^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int x = 0;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+                       ^^";
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+  lowered final self::ET2 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+  return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|constructor#(id);
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.outline.expect
new file mode 100644
index 0000000..c1bb886
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.outline.expect
@@ -0,0 +1,58 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int id = 0;
+//       ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: 'id' is already declared in this scope.
+//   int id = 0;
+//       ^^
+// pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+//                        ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:10:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int x = 0;
+//       ^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int x = 0;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */
+  ;
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */
+  ;
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+  return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */
+  ;
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|constructor#(id);
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.transformed.expect
new file mode 100644
index 0000000..da888e9
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.transformed.expect
@@ -0,0 +1,67 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int id = 0;
+//       ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: 'id' is already declared in this scope.
+//   int id = 0;
+//       ^^
+// pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+//                        ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:10:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int x = 0;
+//       ^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int x = 0;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+                       ^^";
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+  lowered final self::ET2 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+  return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|constructor#(id);
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart b/pkg/front_end/testcases/extension_types/late_fields.dart
new file mode 100644
index 0000000..58acc2e
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2023, 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.
+
+extension type ET1(int id) {
+  late int id = 0;
+}
+
+extension type ET2(int id) {
+  late int x = 0;
+}
+
+extension type ET3(int id) {
+  late final x = 0;
+}
+
+extension type ET4(int id) {
+  late final int x;
+}
+
+main() {
+  print(ET1);
+  print(ET2);
+  print(ET3);
+  print(ET4);
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.strong.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.strong.expect
new file mode 100644
index 0000000..7546355
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.strong.expect
@@ -0,0 +1,94 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late int id = 0;
+//            ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: 'id' is already declared in this scope.
+//   late int id = 0;
+//            ^^
+// pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+//                        ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:10:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late int x = 0;
+//            ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:14:14: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late final x = 0;
+//              ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:18:18: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late final int x;
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+                       ^^";
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+  lowered final self::ET2 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+  return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|constructor#(id);
+static extension-type-member method ET4|constructor#(core::int id) → self::ET4 /* = core::int */ {
+  lowered final self::ET4 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff(core::int id) → self::ET4 /* = core::int */
+  return self::ET4|constructor#(id);
+static method main() → dynamic {
+  core::print(#C1);
+  core::print(#C1);
+  core::print(#C1);
+  core::print(#C1);
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(core::int)
+}
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.strong.transformed.expect
new file mode 100644
index 0000000..7546355
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.strong.transformed.expect
@@ -0,0 +1,94 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late int id = 0;
+//            ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: 'id' is already declared in this scope.
+//   late int id = 0;
+//            ^^
+// pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+//                        ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:10:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late int x = 0;
+//            ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:14:14: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late final x = 0;
+//              ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:18:18: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late final int x;
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+                       ^^";
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+  lowered final self::ET2 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+  return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|constructor#(id);
+static extension-type-member method ET4|constructor#(core::int id) → self::ET4 /* = core::int */ {
+  lowered final self::ET4 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff(core::int id) → self::ET4 /* = core::int */
+  return self::ET4|constructor#(id);
+static method main() → dynamic {
+  core::print(#C1);
+  core::print(#C1);
+  core::print(#C1);
+  core::print(#C1);
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(core::int)
+}
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.textual_outline.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.textual_outline.expect
new file mode 100644
index 0000000..9d432aa
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+extension type ET1(int id) {
+  late int id = 0;
+}
+extension type ET2(int id) {
+  late int x = 0;
+}
+extension type ET3(int id) {
+  late final x = 0;
+}
+extension type ET4(int id) {
+  late final int x;
+}
+main() {}
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9d432aa
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+extension type ET1(int id) {
+  late int id = 0;
+}
+extension type ET2(int id) {
+  late int x = 0;
+}
+extension type ET3(int id) {
+  late final x = 0;
+}
+extension type ET4(int id) {
+  late final int x;
+}
+main() {}
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.weak.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.weak.expect
new file mode 100644
index 0000000..f1376e6
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.weak.expect
@@ -0,0 +1,94 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late int id = 0;
+//            ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: 'id' is already declared in this scope.
+//   late int id = 0;
+//            ^^
+// pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+//                        ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:10:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late int x = 0;
+//            ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:14:14: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late final x = 0;
+//              ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:18:18: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late final int x;
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+                       ^^";
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+  lowered final self::ET2 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+  return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|constructor#(id);
+static extension-type-member method ET4|constructor#(core::int id) → self::ET4 /* = core::int */ {
+  lowered final self::ET4 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff(core::int id) → self::ET4 /* = core::int */
+  return self::ET4|constructor#(id);
+static method main() → dynamic {
+  core::print(#C1);
+  core::print(#C1);
+  core::print(#C1);
+  core::print(#C1);
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(core::int*)
+}
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.weak.modular.expect
new file mode 100644
index 0000000..f1376e6
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.weak.modular.expect
@@ -0,0 +1,94 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late int id = 0;
+//            ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: 'id' is already declared in this scope.
+//   late int id = 0;
+//            ^^
+// pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+//                        ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:10:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late int x = 0;
+//            ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:14:14: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late final x = 0;
+//              ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:18:18: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late final int x;
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+                       ^^";
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+  lowered final self::ET2 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+  return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|constructor#(id);
+static extension-type-member method ET4|constructor#(core::int id) → self::ET4 /* = core::int */ {
+  lowered final self::ET4 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff(core::int id) → self::ET4 /* = core::int */
+  return self::ET4|constructor#(id);
+static method main() → dynamic {
+  core::print(#C1);
+  core::print(#C1);
+  core::print(#C1);
+  core::print(#C1);
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(core::int*)
+}
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.weak.outline.expect
new file mode 100644
index 0000000..084eccc
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.weak.outline.expect
@@ -0,0 +1,75 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late int id = 0;
+//            ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: 'id' is already declared in this scope.
+//   late int id = 0;
+//            ^^
+// pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+//                        ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:10:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late int x = 0;
+//            ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:14:14: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late final x = 0;
+//              ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:18:18: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late final int x;
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */
+  ;
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */
+  ;
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+  return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */
+  ;
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|constructor#(id);
+static extension-type-member method ET4|constructor#(core::int id) → self::ET4 /* = core::int */
+  ;
+static extension-type-member method ET4|constructor#_#new#tearOff(core::int id) → self::ET4 /* = core::int */
+  return self::ET4|constructor#(id);
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.weak.transformed.expect
new file mode 100644
index 0000000..f1376e6
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.weak.transformed.expect
@@ -0,0 +1,94 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late int id = 0;
+//            ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: 'id' is already declared in this scope.
+//   late int id = 0;
+//            ^^
+// pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+//                        ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:10:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late int x = 0;
+//            ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:14:14: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late final x = 0;
+//              ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:18:18: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late final int x;
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(core::int id) {
+  abstract extension-type-member representation-field get id() → core::int;
+  abstract extension-type-member representation-field get x() → core::int;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+                       ^^";
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+  lowered final self::ET2 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+  return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|constructor#(id);
+static extension-type-member method ET4|constructor#(core::int id) → self::ET4 /* = core::int */ {
+  lowered final self::ET4 /* = core::int */ #this = id;
+  return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff(core::int id) → self::ET4 /* = core::int */
+  return self::ET4|constructor#(id);
+static method main() → dynamic {
+  core::print(#C1);
+  core::print(#C1);
+  core::print(#C1);
+  core::print(#C1);
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(core::int*)
+}
diff --git a/pkg/front_end/testcases/extension_types/representation.dart.strong.expect b/pkg/front_end/testcases/extension_types/representation.dart.strong.expect
index fd1ad75..4cc2320 100644
--- a/pkg/front_end/testcases/extension_types/representation.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/representation.dart.strong.expect
@@ -28,19 +28,6 @@
 // extension type Duplicate(bool instanceField, int instanceField) {} // Error
 //                         ^
 //
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-//                               ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-//                                                  ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Final field 'instanceField' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-//                               ^^^^^^^^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/extension_types/representation.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/representation.dart.strong.transformed.expect
index fd1ad75..4cc2320 100644
--- a/pkg/front_end/testcases/extension_types/representation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/representation.dart.strong.transformed.expect
@@ -28,19 +28,6 @@
 // extension type Duplicate(bool instanceField, int instanceField) {} // Error
 //                         ^
 //
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-//                               ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-//                                                  ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Final field 'instanceField' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-//                               ^^^^^^^^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/extension_types/representation.dart.weak.expect b/pkg/front_end/testcases/extension_types/representation.dart.weak.expect
index fd1ad75..4cc2320 100644
--- a/pkg/front_end/testcases/extension_types/representation.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/representation.dart.weak.expect
@@ -28,19 +28,6 @@
 // extension type Duplicate(bool instanceField, int instanceField) {} // Error
 //                         ^
 //
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-//                               ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-//                                                  ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Final field 'instanceField' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-//                               ^^^^^^^^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/extension_types/representation.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/representation.dart.weak.modular.expect
index fd1ad75..4cc2320 100644
--- a/pkg/front_end/testcases/extension_types/representation.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extension_types/representation.dart.weak.modular.expect
@@ -28,19 +28,6 @@
 // extension type Duplicate(bool instanceField, int instanceField) {} // Error
 //                         ^
 //
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-//                               ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-//                                                  ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Final field 'instanceField' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-//                               ^^^^^^^^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/extension_types/representation.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/representation.dart.weak.transformed.expect
index fd1ad75..4cc2320 100644
--- a/pkg/front_end/testcases/extension_types/representation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/representation.dart.weak.transformed.expect
@@ -28,19 +28,6 @@
 // extension type Duplicate(bool instanceField, int instanceField) {} // Error
 //                         ^
 //
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-//                               ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-//                                                  ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Final field 'instanceField' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-//                               ^^^^^^^^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.expect
index 985132d..2163b60 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.expect
@@ -9,19 +9,11 @@
 //   int a;
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
-//   A(this.a);
-//          ^
-//
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:6:7: Error: Field 'a' should be initialized because its type 'int' doesn't allow null.
-//   int a;
-//       ^
-//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int a = null;
+  field core::int a;
   constructor •(core::int a) → self::A
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
   A(this.a);
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.transformed.expect
index 985132d..2163b60 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.transformed.expect
@@ -9,19 +9,11 @@
 //   int a;
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
-//   A(this.a);
-//          ^
-//
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:6:7: Error: Field 'a' should be initialized because its type 'int' doesn't allow null.
-//   int a;
-//       ^
-//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int a = null;
+  field core::int a;
   constructor •(core::int a) → self::A
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
   A(this.a);
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.expect
index 985132d..2163b60 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.expect
@@ -9,19 +9,11 @@
 //   int a;
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
-//   A(this.a);
-//          ^
-//
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:6:7: Error: Field 'a' should be initialized because its type 'int' doesn't allow null.
-//   int a;
-//       ^
-//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int a = null;
+  field core::int a;
   constructor •(core::int a) → self::A
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
   A(this.a);
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.modular.expect
index 985132d..2163b60 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.modular.expect
@@ -9,19 +9,11 @@
 //   int a;
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
-//   A(this.a);
-//          ^
-//
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:6:7: Error: Field 'a' should be initialized because its type 'int' doesn't allow null.
-//   int a;
-//       ^
-//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int a = null;
+  field core::int a;
   constructor •(core::int a) → self::A
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
   A(this.a);
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.transformed.expect
index 985132d..2163b60 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.transformed.expect
@@ -9,19 +9,11 @@
 //   int a;
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
-//   A(this.a);
-//          ^
-//
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:6:7: Error: Field 'a' should be initialized because its type 'int' doesn't allow null.
-//   int a;
-//       ^
-//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int a = null;
+  field core::int a;
   constructor •(core::int a) → self::A
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
   A(this.a);
diff --git a/pkg/front_end/testcases/general/issue38938.dart.strong.expect b/pkg/front_end/testcases/general/issue38938.dart.strong.expect
index 210be7b..dd56910 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.strong.expect
@@ -9,21 +9,17 @@
 //   int? v;
 //        ^
 //
-// pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
-//   A(this.v);
-//          ^
-//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int? v = null;
+  field core::int? v;
   constructor •(core::int? v) → self::A
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
   A(this.v);
          ^"
     ;
   constructor second() → self::A
-    : super core::Object::•()
+    : self::A::v = null, super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue38938.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue38938.dart.strong.transformed.expect
index 210be7b..dd56910 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.strong.transformed.expect
@@ -9,21 +9,17 @@
 //   int? v;
 //        ^
 //
-// pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
-//   A(this.v);
-//          ^
-//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int? v = null;
+  field core::int? v;
   constructor •(core::int? v) → self::A
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
   A(this.v);
          ^"
     ;
   constructor second() → self::A
-    : super core::Object::•()
+    : self::A::v = null, super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue38938.dart.weak.expect b/pkg/front_end/testcases/general/issue38938.dart.weak.expect
index 210be7b..dd56910 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.weak.expect
@@ -9,21 +9,17 @@
 //   int? v;
 //        ^
 //
-// pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
-//   A(this.v);
-//          ^
-//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int? v = null;
+  field core::int? v;
   constructor •(core::int? v) → self::A
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
   A(this.v);
          ^"
     ;
   constructor second() → self::A
-    : super core::Object::•()
+    : self::A::v = null, super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue38938.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue38938.dart.weak.modular.expect
index 210be7b..dd56910 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.weak.modular.expect
@@ -9,21 +9,17 @@
 //   int? v;
 //        ^
 //
-// pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
-//   A(this.v);
-//          ^
-//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int? v = null;
+  field core::int? v;
   constructor •(core::int? v) → self::A
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
   A(this.v);
          ^"
     ;
   constructor second() → self::A
-    : super core::Object::•()
+    : self::A::v = null, super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue38938.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue38938.dart.weak.transformed.expect
index 210be7b..dd56910 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.weak.transformed.expect
@@ -9,21 +9,17 @@
 //   int? v;
 //        ^
 //
-// pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
-//   A(this.v);
-//          ^
-//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int? v = null;
+  field core::int? v;
   constructor •(core::int? v) → self::A
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
   A(this.v);
          ^"
     ;
   constructor second() → self::A
-    : super core::Object::•()
+    : self::A::v = null, super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue43363.dart.strong.expect b/pkg/front_end/testcases/general/issue43363.dart.strong.expect
index 839de1f7..084810f 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.strong.expect
@@ -26,21 +26,12 @@
 //         this.x = 1;
 //                ^
 //
-// pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
-//               this.y = 6;
-//                    ^
-//
-// pkg/front_end/testcases/general/issue43363.dart:7:13: Error: Final field 'y' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int y;
-//             ^
-//
 import self as self;
 import "dart:core" as core;
 
 class E extends core::Object {
   final field core::int x;
-  final field core::int y = null;
+  final field core::int y;
   constructor •() → self::E
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
         this.x = 1;
diff --git a/pkg/front_end/testcases/general/issue43363.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue43363.dart.strong.transformed.expect
index 839de1f7..084810f 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.strong.transformed.expect
@@ -26,21 +26,12 @@
 //         this.x = 1;
 //                ^
 //
-// pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
-//               this.y = 6;
-//                    ^
-//
-// pkg/front_end/testcases/general/issue43363.dart:7:13: Error: Final field 'y' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int y;
-//             ^
-//
 import self as self;
 import "dart:core" as core;
 
 class E extends core::Object {
   final field core::int x;
-  final field core::int y = null;
+  final field core::int y;
   constructor •() → self::E
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
         this.x = 1;
diff --git a/pkg/front_end/testcases/general/issue43363.dart.weak.expect b/pkg/front_end/testcases/general/issue43363.dart.weak.expect
index 839de1f7..084810f 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.weak.expect
@@ -26,21 +26,12 @@
 //         this.x = 1;
 //                ^
 //
-// pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
-//               this.y = 6;
-//                    ^
-//
-// pkg/front_end/testcases/general/issue43363.dart:7:13: Error: Final field 'y' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int y;
-//             ^
-//
 import self as self;
 import "dart:core" as core;
 
 class E extends core::Object {
   final field core::int x;
-  final field core::int y = null;
+  final field core::int y;
   constructor •() → self::E
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
         this.x = 1;
diff --git a/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect
index 839de1f7..084810f 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect
@@ -26,21 +26,12 @@
 //         this.x = 1;
 //                ^
 //
-// pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
-//               this.y = 6;
-//                    ^
-//
-// pkg/front_end/testcases/general/issue43363.dart:7:13: Error: Final field 'y' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int y;
-//             ^
-//
 import self as self;
 import "dart:core" as core;
 
 class E extends core::Object {
   final field core::int x;
-  final field core::int y = null;
+  final field core::int y;
   constructor •() → self::E
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
         this.x = 1;
diff --git a/pkg/front_end/testcases/general/issue43363.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue43363.dart.weak.transformed.expect
index 839de1f7..084810f 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.weak.transformed.expect
@@ -26,21 +26,12 @@
 //         this.x = 1;
 //                ^
 //
-// pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
-//               this.y = 6;
-//                    ^
-//
-// pkg/front_end/testcases/general/issue43363.dart:7:13: Error: Final field 'y' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int y;
-//             ^
-//
 import self as self;
 import "dart:core" as core;
 
 class E extends core::Object {
   final field core::int x;
-  final field core::int y = null;
+  final field core::int y;
   constructor •() → self::E
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
         this.x = 1;