diff --git a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
index de9e6cc..03877e4 100644
--- a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
@@ -2938,7 +2938,7 @@
         _assignedVariables._getInfoForNode(node);
     ++_functionNestingLevel;
     _current = _current.conservativeJoin(const [], info._written);
-    _stack.add(new _SimpleContext(_current));
+    _stack.add(new _FunctionExpressionContext(_current));
     _current = _current.conservativeJoin(_assignedVariables._anywhere._written,
         _assignedVariables._anywhere._captured);
   }
@@ -2948,7 +2948,7 @@
     --_functionNestingLevel;
     assert(_functionNestingLevel >= 0);
     _SimpleContext<Variable, Type> context =
-        _stack.removeLast() as _SimpleContext<Variable, Type>;
+        _stack.removeLast() as _FunctionExpressionContext<Variable, Type>;
     _current = context._previous;
   }
 
@@ -2979,6 +2979,9 @@
 
   @override
   void ifNullExpression_end() {
+    // TODO(paulberry): CFE sometimes calls ifNullExpression_end and
+    // nullAwareAccess_end out of order, so as a workaround we cast to the
+    // common base class.  See https://github.com/dart-lang/sdk/issues/43725.
     _SimpleContext<Variable, Type> context =
         _stack.removeLast() as _SimpleContext<Variable, Type>;
     _current = _join(_current, context._previous);
@@ -2997,7 +3000,7 @@
     } else {
       promoted = _current;
     }
-    _stack.add(new _SimpleContext<Variable, Type>(promoted));
+    _stack.add(new _IfNullExpressionContext<Variable, Type>(promoted));
     return true;
   }
 
@@ -3148,6 +3151,9 @@
 
   @override
   void nullAwareAccess_end() {
+    // TODO(paulberry): CFE sometimes calls ifNullExpression_end and
+    // nullAwareAccess_end out of order, so as a workaround we cast to the
+    // common base class.  See https://github.com/dart-lang/sdk/issues/43725.
     _SimpleContext<Variable, Type> context =
         _stack.removeLast() as _SimpleContext<Variable, Type>;
     _current = _join(_current, context._previous);
@@ -3156,7 +3162,7 @@
   @override
   bool nullAwareAccess_rightBegin(Expression target, Type targetType) {
     assert(targetType != null);
-    _stack.add(new _SimpleContext<Variable, Type>(_current));
+    _stack.add(new _NullAwareAccessContext<Variable, Type>(_current));
     if (target != null) {
       ExpressionInfo<Variable, Type> targetInfo = _getExpressionInfo(target);
       if (targetInfo is _VariableReadInfo<Variable, Type>) {
@@ -3406,6 +3412,16 @@
 /// language for which flow analysis information needs to be tracked.
 abstract class _FlowContext {}
 
+/// [_FlowContext] representing a function expression.
+class _FunctionExpressionContext<Variable, Type>
+    extends _SimpleContext<Variable, Type> {
+  _FunctionExpressionContext(FlowModel<Variable, Type> previous)
+      : super(previous);
+
+  @override
+  String toString() => '_FunctionExpressionContext(previous: $_previous)';
+}
+
 /// [_FlowContext] representing an `if` statement.
 class _IfContext<Variable, Type> extends _BranchContext<Variable, Type> {
   /// Flow model associated with the state of program execution after the `if`
@@ -3420,6 +3436,25 @@
       '_IfContext(conditionInfo: $_conditionInfo, afterThen: $_afterThen)';
 }
 
+/// [_FlowContext] representing an "if-null" (`??`) expression.
+class _IfNullExpressionContext<Variable, Type>
+    extends _SimpleContext<Variable, Type> {
+  _IfNullExpressionContext(FlowModel<Variable, Type> previous)
+      : super(previous);
+
+  @override
+  String toString() => '_IfNullExpressionContext(previous: $_previous)';
+}
+
+/// [_FlowContext] representing a null aware access (`?.`).
+class _NullAwareAccessContext<Variable, Type>
+    extends _SimpleContext<Variable, Type> {
+  _NullAwareAccessContext(FlowModel<Variable, Type> previous) : super(previous);
+
+  @override
+  String toString() => '_NullAwareAccessContext(previous: $_previous)';
+}
+
 /// [ExpressionInfo] representing a `null` literal.
 class _NullInfo<Variable, Type> implements ExpressionInfo<Variable, Type> {
   @override
@@ -3437,7 +3472,7 @@
 /// [_FlowContext] representing a language construct for which flow analysis
 /// must store a flow model state to be retrieved later, such as a `try`
 /// statement, function expression, or "if-null" (`??`) expression.
-class _SimpleContext<Variable, Type> extends _FlowContext {
+abstract class _SimpleContext<Variable, Type> extends _FlowContext {
   /// The stored state.  For a `try` statement, this is the state from the
   /// beginning of the `try` block.  For a function expression, this is the
   /// state at the point the function expression was created.  For an "if-null"
@@ -3446,9 +3481,6 @@
   final FlowModel<Variable, Type> _previous;
 
   _SimpleContext(this._previous);
-
-  @override
-  String toString() => '_SimpleContext(previous: $_previous)';
 }
 
 /// [_FlowContext] representing a language construct that can be targeted by
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 df9fd1e..a7d67b8 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -687,7 +687,7 @@
     templateCantInferReturnTypeDueToInconsistentOverrides =
     const Template<Message Function(String name)>(
         messageTemplate:
-            r"""Can't infer a return type for '#name' as some of the inherited members have different types.""",
+            r"""Can't infer a return type for '#name' as some of the overridden members have different types.""",
         tipTemplate: r"""Try adding an explicit type.""",
         withArguments:
             _withArgumentsCantInferReturnTypeDueToInconsistentOverrides);
@@ -707,7 +707,38 @@
   name = demangleMixinApplicationName(name);
   return new Message(codeCantInferReturnTypeDueToInconsistentOverrides,
       message:
-          """Can't infer a return type for '${name}' as some of the inherited members have different types.""",
+          """Can't infer a return type for '${name}' as some of the overridden members have different types.""",
+      tip: """Try adding an explicit type.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)>
+    templateCantInferReturnTypeDueToNoCombinedSignature =
+    const Template<Message Function(String name)>(
+        messageTemplate:
+            r"""Can't infer a return type for '#name' as the overridden members don't have a combined signature.""",
+        tipTemplate: r"""Try adding an explicit type.""",
+        withArguments:
+            _withArgumentsCantInferReturnTypeDueToNoCombinedSignature);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)>
+    codeCantInferReturnTypeDueToNoCombinedSignature =
+    const Code<Message Function(String name)>(
+        "CantInferReturnTypeDueToNoCombinedSignature",
+        templateCantInferReturnTypeDueToNoCombinedSignature,
+        analyzerCodes: <String>[
+      "COMPILE_TIME_ERROR.NO_COMBINED_SUPER_SIGNATURE"
+    ]);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsCantInferReturnTypeDueToNoCombinedSignature(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeCantInferReturnTypeDueToNoCombinedSignature,
+      message:
+          """Can't infer a return type for '${name}' as the overridden members don't have a combined signature.""",
       tip: """Try adding an explicit type.""",
       arguments: {'name': name});
 }
@@ -744,7 +775,7 @@
     templateCantInferTypeDueToInconsistentOverrides =
     const Template<Message Function(String name)>(
         messageTemplate:
-            r"""Can't infer a type for '#name' as some of the inherited members have different types.""",
+            r"""Can't infer a type for '#name' as some of the overridden members have different types.""",
         tipTemplate: r"""Try adding an explicit type.""",
         withArguments: _withArgumentsCantInferTypeDueToInconsistentOverrides);
 
@@ -762,7 +793,39 @@
   name = demangleMixinApplicationName(name);
   return new Message(codeCantInferTypeDueToInconsistentOverrides,
       message:
-          """Can't infer a type for '${name}' as some of the inherited members have different types.""",
+          """Can't infer a type for '${name}' as some of the overridden members have different types.""",
+      tip: """Try adding an explicit type.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String
+            name)> templateCantInferTypeDueToNoCombinedSignature = const Template<
+        Message Function(String name)>(
+    messageTemplate:
+        r"""Can't infer a type for '#name' as the overridden members don't have a combined signature.""",
+    tipTemplate: r"""Try adding an explicit type.""",
+    withArguments: _withArgumentsCantInferTypeDueToNoCombinedSignature);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)>
+    codeCantInferTypeDueToNoCombinedSignature =
+    const Code<Message Function(String name)>(
+        "CantInferTypeDueToNoCombinedSignature",
+        templateCantInferTypeDueToNoCombinedSignature,
+        analyzerCodes: <String>[
+      "COMPILE_TIME_ERROR.NO_COMBINED_SUPER_SIGNATURE"
+    ]);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsCantInferTypeDueToNoCombinedSignature(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeCantInferTypeDueToNoCombinedSignature,
+      message:
+          """Can't infer a type for '${name}' as the overridden members don't have a combined signature.""",
       tip: """Try adding an explicit type.""",
       arguments: {'name': name});
 }
@@ -1909,14 +1972,14 @@
         message: r"""This is the inherited member.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeDeclaredMemberConflictsWithInheritedMembersCause =
-    messageDeclaredMemberConflictsWithInheritedMembersCause;
+const Code<Null> codeDeclaredMemberConflictsWithOverriddenMembersCause =
+    messageDeclaredMemberConflictsWithOverriddenMembersCause;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageDeclaredMemberConflictsWithInheritedMembersCause =
-    const MessageCode("DeclaredMemberConflictsWithInheritedMembersCause",
+const MessageCode messageDeclaredMemberConflictsWithOverriddenMembersCause =
+    const MessageCode("DeclaredMemberConflictsWithOverriddenMembersCause",
         severity: Severity.context,
-        message: r"""This is one of the inherited members.""");
+        message: r"""This is one of the overridden members.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeDefaultListConstructorError =
diff --git a/pkg/_fe_analyzer_shared/test/flow_analysis/type_promotion/data/mixed_if_null_and_null_aware.dart b/pkg/_fe_analyzer_shared/test/flow_analysis/type_promotion/data/mixed_if_null_and_null_aware.dart
new file mode 100644
index 0000000..31091b0
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/flow_analysis/type_promotion/data/mixed_if_null_and_null_aware.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2020, 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.
+
+// This test verifies that we don't crash when trying to analyze an expression
+// that combines if-null with null-aware access.
+
+f(int? i, List? l) => i ?? l?.length;
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index 81255f6..858f235 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -462,11 +462,11 @@
         element.isFinal = node.isFinal;
         element.parameterKind = node.kind;
         _setCodeRange(element, node);
-        element.metadata = _createElementAnnotations(node.metadata);
       }
       nameNode.staticElement = element;
     }
 
+    element.metadata = _createElementAnnotations(node.metadata);
     node.metadata.accept(this);
     _setElementAnnotations(node.metadata, element.metadata);
 
diff --git a/pkg/analyzer/test/generated/invalid_code_test.dart b/pkg/analyzer/test/generated/invalid_code_test.dart
index 5f397fd..a116216 100644
--- a/pkg/analyzer/test/generated/invalid_code_test.dart
+++ b/pkg/analyzer/test/generated/invalid_code_test.dart
@@ -326,6 +326,17 @@
 ''');
   }
 
+  test_localFunction_defaultFieldFormalParameter_metadata() async {
+    await _assertCanBeAnalyzed(r'''
+const my = 0;
+
+void foo() {
+  // ignore:unused_element
+  void bar({@my this.x}) {}
+}
+''');
+  }
+
   test_typeBeforeAnnotation() async {
     await _assertCanBeAnalyzed('''
 class A {
diff --git a/pkg/front_end/lib/src/fasta/builder/field_builder.dart b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
index 429d5f1..9fa3c80 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -232,6 +232,8 @@
   Set<ClassMember> _overrideDependencies;
 
   void registerOverrideDependency(ClassMember overriddenMember) {
+    assert(overriddenMember.classBuilder != classBuilder,
+        "Unexpected override dependency for $this: $overriddenMember");
     _overrideDependencies ??= {};
     _overrideDependencies.add(overriddenMember);
   }
diff --git a/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart
index d91935f..f8700b1 100644
--- a/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart
@@ -4,28 +4,47 @@
 
 library fasta.never_type_builder;
 
-import 'package:kernel/ast.dart' show DartType, Nullability;
+import 'package:kernel/ast.dart' show DartType, InterfaceType, Nullability;
 
 import 'builtin_type_declaration_builder.dart';
+import 'class_builder.dart';
 import 'library_builder.dart';
 import 'nullability_builder.dart';
 import 'type_builder.dart';
 
 class NeverTypeDeclarationBuilder extends BuiltinTypeDeclarationBuilder {
-  NeverTypeDeclarationBuilder(
-      DartType type, LibraryBuilder compilationUnit, int charOffset)
-      : super("Never", type, compilationUnit, charOffset);
+  final LibraryBuilder coreLibrary;
+  DartType _nullType;
+
+  NeverTypeDeclarationBuilder(DartType type, this.coreLibrary, int charOffset)
+      : super("Never", type, coreLibrary, charOffset) {
+    assert(coreLibrary.importUri == Uri.parse('dart:core'));
+  }
 
   String get debugName => "NeverTypeDeclarationBuilder";
 
+  DartType get nullType {
+    if (_nullType == null) {
+      ClassBuilder nullClass = coreLibrary.lookupLocalMember('Null');
+      _nullType = new InterfaceType(nullClass.cls, Nullability.nullable, []);
+    }
+    return _nullType;
+  }
+
   DartType buildType(LibraryBuilder library,
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder> arguments,
       [bool notInstanceContext]) {
+    if (!library.isNonNullableByDefault) {
+      return nullType;
+    }
     return type.withDeclaredNullability(nullabilityBuilder.build(library));
   }
 
   DartType buildTypesWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType> arguments) {
+    if (!library.isNonNullableByDefault) {
+      return nullType;
+    }
     return type.withDeclaredNullability(nullability);
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
index b42e61e..0fd06ec 100644
--- a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
@@ -250,6 +250,8 @@
   Set<ClassMember> _overrideDependencies;
 
   void registerOverrideDependency(ClassMember overriddenMember) {
+    assert(overriddenMember.classBuilder != classBuilder,
+        "Unexpected override dependency for $this: $overriddenMember");
     _overrideDependencies ??= {};
     _overrideDependencies.add(overriddenMember);
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
index 43778fe..a4af6df 100644
--- a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
@@ -43,14 +43,16 @@
         Message,
         messageDeclaredMemberConflictsWithInheritedMember,
         messageDeclaredMemberConflictsWithInheritedMemberCause,
-        messageDeclaredMemberConflictsWithInheritedMembersCause,
+        messageDeclaredMemberConflictsWithOverriddenMembersCause,
         messageInheritedMembersConflict,
         messageInheritedMembersConflictCause1,
         messageInheritedMembersConflictCause2,
         messageStaticAndInstanceConflict,
         messageStaticAndInstanceConflictCause,
         templateCantInferReturnTypeDueToInconsistentOverrides,
+        templateCantInferReturnTypeDueToNoCombinedSignature,
         templateCantInferTypeDueToInconsistentOverrides,
+        templateCantInferTypeDueToNoCombinedSignature,
         templateCombinedMemberSignatureFailed,
         templateDuplicatedDeclaration,
         templateDuplicatedDeclarationCause,
@@ -680,165 +682,163 @@
       DartType inferredReturnType;
       Map<FormalParameterBuilder, DartType> inferredParameterTypes = {};
 
-      for (ClassMember classMember
-          in toSet(declaredMember.classBuilder, overriddenMembers)) {
-        Member overriddenMember = classMember.getMember(hierarchy);
-        Substitution classSubstitution;
-        if (classBuilder.cls != overriddenMember.enclosingClass) {
-          assert(
-              substitutions.containsKey(overriddenMember.enclosingClass),
-              "No substitution found for '${classBuilder.fullNameForErrors}' "
-              "as instance of '${overriddenMember.enclosingClass.name}'. "
-              "Substitutions available for: ${substitutions.keys}");
-          classSubstitution = substitutions[overriddenMember.enclosingClass];
-          debug?.log("${classBuilder.fullNameForErrors} -> "
-              "${overriddenMember.enclosingClass.name} $classSubstitution");
-        }
-        if (overriddenMember is! Procedure) {
-          debug?.log("Giving up 1");
-          continue;
-        }
-        Procedure overriddenProcedure = overriddenMember;
-        FunctionNode overriddenFunction = overriddenProcedure.function;
-
-        List<TypeParameter> overriddenTypeParameters =
-            overriddenFunction.typeParameters;
-        int typeParameterCount = declaredTypeParameters.length;
-        if (typeParameterCount != overriddenTypeParameters.length) {
-          debug?.log("Giving up 2");
-          continue;
-        }
-        Substitution methodSubstitution;
-        if (typeParameterCount != 0) {
-          List<DartType> types = new List<DartType>(typeParameterCount);
-          for (int i = 0; i < typeParameterCount; i++) {
-            types[i] = new TypeParameterType.forAlphaRenaming(
-                overriddenTypeParameters[i], declaredTypeParameters[i]);
-          }
-          methodSubstitution =
-              Substitution.fromPairs(overriddenTypeParameters, types);
-          for (int i = 0; i < typeParameterCount; i++) {
-            DartType declaredBound = declaredTypeParameters[i].bound;
-            DartType overriddenBound = methodSubstitution
-                .substituteType(overriddenTypeParameters[i].bound);
-            if (!hierarchy.types
-                .performNullabilityAwareMutualSubtypesCheck(
-                    declaredBound, overriddenBound)
-                .isSubtypeWhenUsingNullabilities()) {
-              debug?.log("Giving up 3");
-              continue;
-            }
-          }
-        }
-
-        DartType inheritedReturnType = overriddenFunction.returnType;
-        if (classSubstitution != null) {
-          inheritedReturnType =
-              classSubstitution.substituteType(inheritedReturnType);
-        }
-        if (methodSubstitution != null) {
-          inheritedReturnType =
-              methodSubstitution.substituteType(inheritedReturnType);
-        }
-        if (declaredMember.returnType == null &&
-            inferredReturnType is! InvalidType) {
-          inferredReturnType = mergeTypeInLibrary(
-              hierarchy, classBuilder, inferredReturnType, inheritedReturnType);
-          if (inferredReturnType == null) {
-            // A different type has already been inferred.
+      Set<ClassMember> overriddenMemberSet =
+          toSet(declaredMember.classBuilder, overriddenMembers);
+      if (classBuilder.library.isNonNullableByDefault) {
+        CombinedMemberSignature combinedMemberSignature =
+            new CombinedMemberSignature(
+                hierarchy, classBuilder, overriddenMemberSet.toList(),
+                forSetter: false);
+        FunctionType combinedMemberSignatureType = combinedMemberSignature
+            .getCombinedSignatureTypeInContext(declaredTypeParameters);
+        if (declaredMember.returnType == null) {
+          if (combinedMemberSignatureType == null) {
             inferredReturnType = const InvalidType();
             reportCantInferReturnType(
                 classBuilder, declaredMember, hierarchy, overriddenMembers);
+          } else {
+            inferredReturnType = combinedMemberSignatureType.returnType;
           }
         }
-        if (declaredFunction.requiredParameterCount >
-            overriddenFunction.requiredParameterCount) {
-          debug?.log("Giving up 4");
-          continue;
-        }
-        List<VariableDeclaration> overriddenPositional =
-            overriddenFunction.positionalParameters;
-        if (declaredPositional.length < overriddenPositional.length) {
-          debug?.log("Giving up 5");
-          continue;
-        }
-
-        for (int i = 0; i < overriddenPositional.length; i++) {
-          FormalParameterBuilder declaredParameter = declaredMember.formals[i];
-          if (declaredParameter.type != null) continue;
-
-          VariableDeclaration overriddenParameter = overriddenPositional[i];
-          DartType inheritedParameterType = overriddenParameter.type;
-          if (classSubstitution != null) {
-            inheritedParameterType =
-                classSubstitution.substituteType(inheritedParameterType);
-          }
-          if (methodSubstitution != null) {
-            inheritedParameterType =
-                methodSubstitution.substituteType(inheritedParameterType);
-          }
-          if (hierarchy.coreTypes.objectClass.enclosingLibrary
-                  .isNonNullableByDefault &&
-              !declaredMember.classBuilder.library.isNonNullableByDefault &&
-              overriddenProcedure == hierarchy.coreTypes.objectEquals) {
-            // In legacy code we special case `Object.==` to infer `dynamic`
-            // instead `Object!`.
-            inheritedParameterType = const DynamicType();
-          }
-          DartType inferredParameterType =
-              inferredParameterTypes[declaredParameter];
-          inferredParameterType = mergeTypeInLibrary(hierarchy, classBuilder,
-              inferredParameterType, inheritedParameterType);
-          if (inferredParameterType == null) {
-            // A different type has already been inferred.
-            inferredParameterType = const InvalidType();
-            reportCantInferParameterType(
-                classBuilder, declaredParameter, hierarchy, overriddenMembers);
-          }
-          inferredParameterTypes[declaredParameter] = inferredParameterType;
-        }
-
-        List<VariableDeclaration> overriddenNamed =
-            overriddenFunction.namedParameters;
-        named:
-        if (declaredNamed.isNotEmpty || overriddenNamed.isNotEmpty) {
-          if (declaredPositional.length != overriddenPositional.length) {
-            debug?.log("Giving up 9");
-            break named;
-          }
-          if (declaredFunction.requiredParameterCount !=
-              overriddenFunction.requiredParameterCount) {
-            debug?.log("Giving up 10");
-            break named;
-          }
-
-          overriddenNamed = overriddenNamed.toList()
-            ..sort(compareNamedParameters);
-          int declaredIndex = 0;
-          for (int overriddenIndex = 0;
-              overriddenIndex < overriddenNamed.length;
-              overriddenIndex++) {
-            String name = overriddenNamed[overriddenIndex].name;
-            for (; declaredIndex < declaredNamed.length; declaredIndex++) {
-              if (declaredNamed[declaredIndex].name == name) break;
+        if (declaredMember.formals != null) {
+          for (int i = 0; i < declaredPositional.length; i++) {
+            FormalParameterBuilder declaredParameter =
+                declaredMember.formals[i];
+            if (declaredParameter.type != null) {
+              continue;
             }
-            if (declaredIndex == declaredNamed.length) {
-              debug?.log("Giving up 11");
-              break named;
+
+            DartType inferredParameterType;
+            if (combinedMemberSignatureType == null) {
+              inferredParameterType = const InvalidType();
+              reportCantInferParameterType(classBuilder, declaredParameter,
+                  hierarchy, overriddenMembers);
+            } else if (i <
+                combinedMemberSignatureType.positionalParameters.length) {
+              inferredParameterType =
+                  combinedMemberSignatureType.positionalParameters[i];
             }
-            FormalParameterBuilder declaredParameter;
-            for (int i = declaredPositional.length;
-                i < declaredMember.formals.length;
-                ++i) {
-              if (declaredMember.formals[i].name == name) {
-                declaredParameter = declaredMember.formals[i];
-                break;
+            inferredParameterTypes[declaredParameter] = inferredParameterType;
+          }
+
+          Map<String, DartType> namedParameterTypes;
+          for (int i = declaredPositional.length;
+              i < declaredMember.formals.length;
+              i++) {
+            FormalParameterBuilder declaredParameter =
+                declaredMember.formals[i];
+            if (declaredParameter.type != null) {
+              continue;
+            }
+
+            DartType inferredParameterType;
+            if (combinedMemberSignatureType == null) {
+              inferredParameterType = const InvalidType();
+              reportCantInferParameterType(classBuilder, declaredParameter,
+                  hierarchy, overriddenMembers);
+            } else {
+              if (namedParameterTypes == null) {
+                namedParameterTypes = {};
+                for (NamedType namedType
+                    in combinedMemberSignatureType.namedParameters) {
+                  namedParameterTypes[namedType.name] = namedType.type;
+                }
+              }
+              inferredParameterType =
+                  namedParameterTypes[declaredParameter.name];
+            }
+            inferredParameterTypes[declaredParameter] = inferredParameterType;
+          }
+        }
+      } else {
+        for (ClassMember classMember in overriddenMemberSet) {
+          Member overriddenMember = classMember.getMember(hierarchy);
+          Substitution classSubstitution;
+          if (classBuilder.cls != overriddenMember.enclosingClass) {
+            assert(
+                substitutions.containsKey(overriddenMember.enclosingClass),
+                "No substitution found for '${classBuilder.fullNameForErrors}' "
+                "as instance of '${overriddenMember.enclosingClass.name}'. "
+                "Substitutions available for: ${substitutions.keys}");
+            classSubstitution = substitutions[overriddenMember.enclosingClass];
+            debug?.log("${classBuilder.fullNameForErrors} -> "
+                "${overriddenMember.enclosingClass.name} $classSubstitution");
+          }
+          if (overriddenMember is! Procedure) {
+            debug?.log("Giving up 1");
+            continue;
+          }
+          Procedure overriddenProcedure = overriddenMember;
+          FunctionNode overriddenFunction = overriddenProcedure.function;
+
+          List<TypeParameter> overriddenTypeParameters =
+              overriddenFunction.typeParameters;
+          int typeParameterCount = declaredTypeParameters.length;
+          if (typeParameterCount != overriddenTypeParameters.length) {
+            debug?.log("Giving up 2");
+            continue;
+          }
+          Substitution methodSubstitution;
+          if (typeParameterCount != 0) {
+            List<DartType> types = new List<DartType>(typeParameterCount);
+            for (int i = 0; i < typeParameterCount; i++) {
+              types[i] = new TypeParameterType.forAlphaRenaming(
+                  overriddenTypeParameters[i], declaredTypeParameters[i]);
+            }
+            methodSubstitution =
+                Substitution.fromPairs(overriddenTypeParameters, types);
+            for (int i = 0; i < typeParameterCount; i++) {
+              DartType declaredBound = declaredTypeParameters[i].bound;
+              DartType overriddenBound = methodSubstitution
+                  .substituteType(overriddenTypeParameters[i].bound);
+              if (!hierarchy.types
+                  .performNullabilityAwareMutualSubtypesCheck(
+                      declaredBound, overriddenBound)
+                  .isSubtypeWhenUsingNullabilities()) {
+                debug?.log("Giving up 3");
+                continue;
               }
             }
-            if (declaredParameter.type != null) continue;
-            VariableDeclaration overriddenParameter =
-                overriddenNamed[overriddenIndex];
+          }
 
+          DartType inheritedReturnType = overriddenFunction.returnType;
+          if (classSubstitution != null) {
+            inheritedReturnType =
+                classSubstitution.substituteType(inheritedReturnType);
+          }
+          if (methodSubstitution != null) {
+            inheritedReturnType =
+                methodSubstitution.substituteType(inheritedReturnType);
+          }
+          if (declaredMember.returnType == null &&
+              inferredReturnType is! InvalidType) {
+            inferredReturnType = mergeTypeInLibrary(hierarchy, classBuilder,
+                inferredReturnType, inheritedReturnType);
+            if (inferredReturnType == null) {
+              // A different type has already been inferred.
+              inferredReturnType = const InvalidType();
+              reportCantInferReturnType(
+                  classBuilder, declaredMember, hierarchy, overriddenMembers);
+            }
+          }
+          if (declaredFunction.requiredParameterCount >
+              overriddenFunction.requiredParameterCount) {
+            debug?.log("Giving up 4");
+            continue;
+          }
+          List<VariableDeclaration> overriddenPositional =
+              overriddenFunction.positionalParameters;
+          if (declaredPositional.length < overriddenPositional.length) {
+            debug?.log("Giving up 5");
+            continue;
+          }
+
+          for (int i = 0; i < overriddenPositional.length; i++) {
+            FormalParameterBuilder declaredParameter =
+                declaredMember.formals[i];
+            if (declaredParameter.type != null) continue;
+
+            VariableDeclaration overriddenParameter = overriddenPositional[i];
             DartType inheritedParameterType = overriddenParameter.type;
             if (classSubstitution != null) {
               inheritedParameterType =
@@ -848,6 +848,14 @@
               inheritedParameterType =
                   methodSubstitution.substituteType(inheritedParameterType);
             }
+            if (hierarchy.coreTypes.objectClass.enclosingLibrary
+                    .isNonNullableByDefault &&
+                !declaredMember.classBuilder.library.isNonNullableByDefault &&
+                overriddenProcedure == hierarchy.coreTypes.objectEquals) {
+              // In legacy code we special case `Object.==` to infer `dynamic`
+              // instead `Object!`.
+              inheritedParameterType = const DynamicType();
+            }
             DartType inferredParameterType =
                 inferredParameterTypes[declaredParameter];
             inferredParameterType = mergeTypeInLibrary(hierarchy, classBuilder,
@@ -860,6 +868,70 @@
             }
             inferredParameterTypes[declaredParameter] = inferredParameterType;
           }
+
+          List<VariableDeclaration> overriddenNamed =
+              overriddenFunction.namedParameters;
+          named:
+          if (declaredNamed.isNotEmpty || overriddenNamed.isNotEmpty) {
+            if (declaredPositional.length != overriddenPositional.length) {
+              debug?.log("Giving up 9");
+              break named;
+            }
+            if (declaredFunction.requiredParameterCount !=
+                overriddenFunction.requiredParameterCount) {
+              debug?.log("Giving up 10");
+              break named;
+            }
+
+            overriddenNamed = overriddenNamed.toList()
+              ..sort(compareNamedParameters);
+            int declaredIndex = 0;
+            for (int overriddenIndex = 0;
+                overriddenIndex < overriddenNamed.length;
+                overriddenIndex++) {
+              String name = overriddenNamed[overriddenIndex].name;
+              for (; declaredIndex < declaredNamed.length; declaredIndex++) {
+                if (declaredNamed[declaredIndex].name == name) break;
+              }
+              if (declaredIndex == declaredNamed.length) {
+                debug?.log("Giving up 11");
+                break named;
+              }
+              FormalParameterBuilder declaredParameter;
+              for (int i = declaredPositional.length;
+                  i < declaredMember.formals.length;
+                  ++i) {
+                if (declaredMember.formals[i].name == name) {
+                  declaredParameter = declaredMember.formals[i];
+                  break;
+                }
+              }
+              if (declaredParameter.type != null) continue;
+              VariableDeclaration overriddenParameter =
+                  overriddenNamed[overriddenIndex];
+
+              DartType inheritedParameterType = overriddenParameter.type;
+              if (classSubstitution != null) {
+                inheritedParameterType =
+                    classSubstitution.substituteType(inheritedParameterType);
+              }
+              if (methodSubstitution != null) {
+                inheritedParameterType =
+                    methodSubstitution.substituteType(inheritedParameterType);
+              }
+              DartType inferredParameterType =
+                  inferredParameterTypes[declaredParameter];
+              inferredParameterType = mergeTypeInLibrary(hierarchy,
+                  classBuilder, inferredParameterType, inheritedParameterType);
+              if (inferredParameterType == null) {
+                // A different type has already been inferred.
+                inferredParameterType = const InvalidType();
+                reportCantInferParameterType(classBuilder, declaredParameter,
+                    hierarchy, overriddenMembers);
+              }
+              inferredParameterTypes[declaredParameter] = inferredParameterType;
+            }
+          }
         }
       }
       if (declaredMember.returnType == null) {
@@ -1016,69 +1088,115 @@
     if (declaredMember.classBuilder == classBuilder &&
         declaredMember.returnType == null) {
       DartType inferredType;
-
-      void inferFrom(ClassMember classMember) {
-        if (inferredType is InvalidType) return;
-
-        Member overriddenMember = classMember.getMember(hierarchy);
-        Substitution substitution;
-        if (classBuilder.cls != overriddenMember.enclosingClass) {
-          assert(
-              substitutions.containsKey(overriddenMember.enclosingClass),
-              "No substitution found for '${classBuilder.fullNameForErrors}' "
-              "as instance of '${overriddenMember.enclosingClass.name}'. "
-              "Substitutions available for: ${substitutions.keys}");
-          substitution = substitutions[overriddenMember.enclosingClass];
-        }
-        DartType inheritedType;
-        if (overriddenMember is Field) {
-          inheritedType = overriddenMember.type;
-          assert(inheritedType is! ImplicitFieldType);
-        } else if (overriddenMember is Procedure) {
-          if (overriddenMember.kind == ProcedureKind.Setter) {
-            VariableDeclaration bParameter =
-                overriddenMember.function.positionalParameters.single;
-            inheritedType = bParameter.type;
-          } else if (overriddenMember.kind == ProcedureKind.Getter) {
-            inheritedType = overriddenMember.function.returnType;
-          } else {
-            debug?.log("Giving up (not accessor: ${overriddenMember.kind})");
-            return;
-          }
-        } else {
-          debug?.log(
-              "Giving up (not field/procedure: ${overriddenMember.runtimeType})");
-          return;
-        }
-        if (substitution != null) {
-          inheritedType = substitution.substituteType(inheritedType);
-        }
-        inferredType = mergeTypeInLibrary(
-            hierarchy, classBuilder, inferredType, inheritedType);
-
-        if (inferredType == null) {
-          // A different type has already been inferred.
-          inferredType = const InvalidType();
-          reportCantInferReturnType(
-              classBuilder, declaredMember, hierarchy, overriddenMembers);
-        }
-      }
-
       overriddenMembers = toSet(classBuilder, overriddenMembers);
-      // The getter type must be inferred from getters first.
-      for (ClassMember overriddenMember in overriddenMembers) {
-        if (!overriddenMember.forSetter) {
-          inferFrom(overriddenMember);
-        }
-      }
-      if (inferredType == null) {
-        // The getter type must be inferred from setters if no type was
-        // inferred from getters.
+      if (classBuilder.library.isNonNullableByDefault) {
+        List<ClassMember> overriddenGetters = [];
+        List<ClassMember> overriddenSetters = [];
         for (ClassMember overriddenMember in overriddenMembers) {
           if (overriddenMember.forSetter) {
+            overriddenSetters.add(overriddenMember);
+          } else {
+            overriddenGetters.add(overriddenMember);
+          }
+        }
+
+        void inferFrom(List<ClassMember> members, {bool forSetter}) {
+          assert(forSetter != null);
+          CombinedMemberSignature combinedMemberSignature =
+              new CombinedMemberSignature(hierarchy, classBuilder, members,
+                  forSetter: forSetter);
+          DartType combinedMemberSignatureType =
+              combinedMemberSignature.combinedMemberSignatureType;
+          if (combinedMemberSignatureType == null) {
+            inferredType = const InvalidType();
+            reportCantInferReturnType(
+                classBuilder, declaredMember, hierarchy, members);
+          } else {
+            inferredType = combinedMemberSignatureType;
+          }
+        }
+
+        if (overriddenGetters.isNotEmpty) {
+          // 1) The return type of a getter, parameter type of a setter or type
+          // of a field which overrides/implements only one or more getters is
+          // inferred to be the return type of the combined member signature of
+          // said getter in the direct superinterfaces.
+
+          // 2) The return type of a getter which overrides/implements both a
+          // setter and a getter is inferred to be the return type of the
+          // combined member signature of said getter in the direct
+          // superinterfaces.
+          inferFrom(overriddenGetters, forSetter: false);
+        } else {
+          // The return type of a getter, parameter type of a setter or type of
+          // a field which overrides/implements only one or more setters is
+          // inferred to be the parameter type of the combined member signature
+          // of said setter in the direct superinterfaces.
+          inferFrom(overriddenSetters, forSetter: true);
+        }
+      } else {
+        void inferFrom(ClassMember classMember) {
+          if (inferredType is InvalidType) return;
+
+          Member overriddenMember = classMember.getMember(hierarchy);
+          Substitution substitution;
+          if (classBuilder.cls != overriddenMember.enclosingClass) {
+            assert(
+                substitutions.containsKey(overriddenMember.enclosingClass),
+                "No substitution found for '${classBuilder.fullNameForErrors}' "
+                "as instance of '${overriddenMember.enclosingClass.name}'. "
+                "Substitutions available for: ${substitutions.keys}");
+            substitution = substitutions[overriddenMember.enclosingClass];
+          }
+          DartType inheritedType;
+          if (overriddenMember is Field) {
+            inheritedType = overriddenMember.type;
+            assert(inheritedType is! ImplicitFieldType);
+          } else if (overriddenMember is Procedure) {
+            if (overriddenMember.kind == ProcedureKind.Setter) {
+              VariableDeclaration bParameter =
+                  overriddenMember.function.positionalParameters.single;
+              inheritedType = bParameter.type;
+            } else if (overriddenMember.kind == ProcedureKind.Getter) {
+              inheritedType = overriddenMember.function.returnType;
+            } else {
+              debug?.log("Giving up (not accessor: ${overriddenMember.kind})");
+              return;
+            }
+          } else {
+            debug?.log("Giving up (not field/procedure: "
+                "${overriddenMember.runtimeType})");
+            return;
+          }
+          if (substitution != null) {
+            inheritedType = substitution.substituteType(inheritedType);
+          }
+          inferredType = mergeTypeInLibrary(
+              hierarchy, classBuilder, inferredType, inheritedType);
+
+          if (inferredType == null) {
+            // A different type has already been inferred.
+            inferredType = const InvalidType();
+            reportCantInferReturnType(
+                classBuilder, declaredMember, hierarchy, overriddenMembers);
+          }
+        }
+
+        // The getter type must be inferred from getters first.
+        for (ClassMember overriddenMember in overriddenMembers) {
+          if (!overriddenMember.forSetter) {
             inferFrom(overriddenMember);
           }
         }
+        if (inferredType == null) {
+          // The getter type must be inferred from setters if no type was
+          // inferred from getters.
+          for (ClassMember overriddenMember in overriddenMembers) {
+            if (overriddenMember.forSetter) {
+              inferFrom(overriddenMember);
+            }
+          }
+        }
       }
 
       inferredType ??= const DynamicType();
@@ -1097,67 +1215,114 @@
     if (declaredMember.classBuilder == classBuilder && parameter.type == null) {
       DartType inferredType;
 
-      void inferFrom(ClassMember classMember) {
-        if (inferredType is InvalidType) return;
-
-        Member overriddenMember = classMember.getMember(hierarchy);
-        Substitution substitution;
-        if (classBuilder.cls != overriddenMember.enclosingClass) {
-          assert(
-              substitutions.containsKey(overriddenMember.enclosingClass),
-              "No substitution found for '${classBuilder.fullNameForErrors}' "
-              "as instance of '${overriddenMember.enclosingClass.name}'. "
-              "Substitutions available for: ${substitutions.keys}");
-          substitution = substitutions[overriddenMember.enclosingClass];
-        }
-        DartType inheritedType;
-        if (overriddenMember is Field) {
-          inheritedType = overriddenMember.type;
-          assert(inheritedType is! ImplicitFieldType);
-        } else if (overriddenMember is Procedure) {
-          if (classMember.isSetter) {
-            VariableDeclaration bParameter =
-                overriddenMember.function.positionalParameters.single;
-            inheritedType = bParameter.type;
-          } else if (classMember.isGetter) {
-            inheritedType = overriddenMember.function.returnType;
+      overriddenMembers = toSet(classBuilder, overriddenMembers);
+      if (classBuilder.library.isNonNullableByDefault) {
+        List<ClassMember> overriddenGetters = [];
+        List<ClassMember> overriddenSetters = [];
+        for (ClassMember overriddenMember in overriddenMembers) {
+          if (overriddenMember.forSetter) {
+            overriddenSetters.add(overriddenMember);
           } else {
-            debug?.log("Giving up (not accessor: ${overriddenMember.kind})");
+            overriddenGetters.add(overriddenMember);
+          }
+        }
+
+        void inferFrom(List<ClassMember> members, {bool forSetter}) {
+          assert(forSetter != null);
+          CombinedMemberSignature combinedMemberSignature =
+              new CombinedMemberSignature(hierarchy, classBuilder, members,
+                  forSetter: forSetter);
+          DartType combinedMemberSignatureType =
+              combinedMemberSignature.combinedMemberSignatureType;
+          if (combinedMemberSignatureType == null) {
+            inferredType = const InvalidType();
+            reportCantInferReturnType(
+                classBuilder, declaredMember, hierarchy, members);
+          } else {
+            inferredType = combinedMemberSignatureType;
+          }
+        }
+
+        if (overriddenSetters.isNotEmpty) {
+          // 1) The return type of a getter, parameter type of a setter or type
+          // of a field which overrides/implements only one or more setters is
+          // inferred to be the parameter type of the combined member signature
+          // of said setter in the direct superinterfaces.
+          //
+          // 2) The parameter type of a setter which overrides/implements both a
+          // setter and a getter is inferred to be the parameter type of the
+          // combined member signature of said setter in the direct
+          // superinterfaces.
+          inferFrom(overriddenSetters, forSetter: true);
+        } else {
+          // The return type of a getter, parameter type of a setter or type of
+          // a field which overrides/implements only one or more getters is
+          // inferred to be the return type of the combined member signature of
+          // said getter in the direct superinterfaces.
+          inferFrom(overriddenGetters, forSetter: false);
+        }
+      } else {
+        void inferFrom(ClassMember classMember) {
+          if (inferredType is InvalidType) return;
+
+          Member overriddenMember = classMember.getMember(hierarchy);
+          Substitution substitution;
+          if (classBuilder.cls != overriddenMember.enclosingClass) {
+            assert(
+                substitutions.containsKey(overriddenMember.enclosingClass),
+                "No substitution found for '${classBuilder.fullNameForErrors}' "
+                "as instance of '${overriddenMember.enclosingClass.name}'. "
+                "Substitutions available for: ${substitutions.keys}");
+            substitution = substitutions[overriddenMember.enclosingClass];
+          }
+          DartType inheritedType;
+          if (overriddenMember is Field) {
+            inheritedType = overriddenMember.type;
+            assert(inheritedType is! ImplicitFieldType);
+          } else if (overriddenMember is Procedure) {
+            if (classMember.isSetter) {
+              VariableDeclaration bParameter =
+                  overriddenMember.function.positionalParameters.single;
+              inheritedType = bParameter.type;
+            } else if (classMember.isGetter) {
+              inheritedType = overriddenMember.function.returnType;
+            } else {
+              debug?.log("Giving up (not accessor: ${overriddenMember.kind})");
+              return;
+            }
+          } else {
+            debug?.log("Giving up (not field/procedure: "
+                "${overriddenMember.runtimeType})");
             return;
           }
-        } else {
-          debug?.log(
-              "Giving up (not field/procedure: ${overriddenMember.runtimeType})");
-          return;
+          if (substitution != null) {
+            inheritedType = substitution.substituteType(inheritedType);
+          }
+          inferredType = mergeTypeInLibrary(
+              hierarchy, classBuilder, inferredType, inheritedType);
+          if (inferredType == null) {
+            // A different type has already been inferred.
+            inferredType = const InvalidType();
+            reportCantInferParameterType(
+                classBuilder, parameter, hierarchy, overriddenMembers);
+          }
         }
-        if (substitution != null) {
-          inheritedType = substitution.substituteType(inheritedType);
-        }
-        inferredType = mergeTypeInLibrary(
-            hierarchy, classBuilder, inferredType, inheritedType);
-        if (inferredType == null) {
-          // A different type has already been inferred.
-          inferredType = const InvalidType();
-          reportCantInferParameterType(
-              classBuilder, parameter, hierarchy, overriddenMembers);
-        }
-      }
 
-      overriddenMembers = toSet(classBuilder, overriddenMembers);
-      // The setter type must be inferred from setters first.
-      for (ClassMember overriddenMember in overriddenMembers) {
-        if (overriddenMember.forSetter) {
-          inferFrom(overriddenMember);
-        }
-      }
-      if (inferredType == null) {
-        // The setter type must be inferred from getters if no type was
-        // inferred from setters.
+        // The setter type must be inferred from setters first.
         for (ClassMember overriddenMember in overriddenMembers) {
-          if (!overriddenMember.forSetter) {
+          if (overriddenMember.forSetter) {
             inferFrom(overriddenMember);
           }
         }
+        if (inferredType == null) {
+          // The setter type must be inferred from getters if no type was
+          // inferred from setters.
+          for (ClassMember overriddenMember in overriddenMembers) {
+            if (!overriddenMember.forSetter) {
+              inferFrom(overriddenMember);
+            }
+          }
+        }
       }
 
       inferredType ??= const DynamicType();
@@ -1214,72 +1379,137 @@
         fieldBuilder.type == null) {
       DartType inferredType;
 
-      void inferFrom(ClassMember classMember) {
-        if (inferredType is InvalidType) return;
-
-        Member overriddenMember = classMember.getMember(hierarchy);
-        DartType inheritedType;
-        if (overriddenMember is Procedure) {
-          if (overriddenMember.isSetter) {
-            VariableDeclaration parameter =
-                overriddenMember.function.positionalParameters.single;
-            inheritedType = parameter.type;
-          } else if (overriddenMember.isGetter) {
-            inheritedType = overriddenMember.function.returnType;
+      overriddenMembers = toSet(classBuilder, overriddenMembers);
+      if (classBuilder.library.isNonNullableByDefault) {
+        List<ClassMember> overriddenGetters = [];
+        List<ClassMember> overriddenSetters = [];
+        for (ClassMember overriddenMember in overriddenMembers) {
+          if (overriddenMember.forSetter) {
+            overriddenSetters.add(overriddenMember);
+          } else {
+            overriddenGetters.add(overriddenMember);
           }
-        } else if (overriddenMember is Field) {
-          inheritedType = overriddenMember.type;
         }
-        if (inheritedType == null) {
-          debug
-              ?.log("Giving up (inheritedType == null)\n${StackTrace.current}");
-          return;
+
+        DartType inferFrom(List<ClassMember> members, {bool forSetter}) {
+          assert(forSetter != null);
+          CombinedMemberSignature combinedMemberSignature =
+              new CombinedMemberSignature(hierarchy, classBuilder, members,
+                  forSetter: forSetter);
+          return combinedMemberSignature.combinedMemberSignatureType;
         }
-        Substitution substitution;
-        if (classBuilder.cls != overriddenMember.enclosingClass) {
-          assert(
-              substitutions.containsKey(overriddenMember.enclosingClass),
-              "${classBuilder.fullNameForErrors} "
-              "${overriddenMember.enclosingClass.name}");
-          substitution = substitutions[overriddenMember.enclosingClass];
-          debug?.log("${classBuilder.fullNameForErrors} -> "
-              "${overriddenMember.enclosingClass.name} $substitution");
+
+        DartType combinedMemberSignatureType;
+        if (fieldBuilder.isAssignable &&
+            overriddenGetters.isNotEmpty &&
+            overriddenSetters.isNotEmpty) {
+          // The type of a non-final field which overrides/implements both a
+          // setter and a getter is inferred to be the parameter type of the
+          // combined member signature of said setter in the direct
+          // superinterfaces, if this type is the same as the return type of the
+          // combined member signature of said getter in the direct
+          // superinterfaces. If the types are not the same then inference fails
+          // with an error.
+          DartType getterType = inferFrom(overriddenGetters, forSetter: false);
+          DartType setterType = inferFrom(overriddenSetters, forSetter: true);
+          if (getterType == setterType) {
+            combinedMemberSignatureType = getterType;
+          }
+        } else if (overriddenGetters.isNotEmpty) {
+          // 1) The return type of a getter, parameter type of a setter or type
+          // of a field which overrides/implements only one or more getters is
+          // inferred to be the return type of the combined member signature of
+          // said getter in the direct superinterfaces.
+          //
+          // 2) The type of a final field which overrides/implements both a
+          // setter and a getter is inferred to be the return type of the
+          // combined member signature of said getter in the direct
+          // superinterfaces.
+          combinedMemberSignatureType =
+              inferFrom(overriddenGetters, forSetter: false);
+        } else {
+          // The return type of a getter, parameter type of a setter or type of
+          // a field which overrides/implements only one or more setters is
+          // inferred to be the parameter type of the combined member signature
+          // of said setter in the direct superinterfaces.
+          combinedMemberSignatureType =
+              inferFrom(overriddenSetters, forSetter: true);
         }
-        assert(inheritedType is! ImplicitFieldType);
-        if (substitution != null) {
-          inheritedType = substitution.substituteType(inheritedType);
-        }
-        inferredType = mergeTypeInLibrary(
-            hierarchy, classBuilder, inferredType, inheritedType);
-        if (inferredType == null) {
-          // A different type has already been inferred.
+
+        if (combinedMemberSignatureType == null) {
           inferredType = const InvalidType();
           reportCantInferFieldType(
               classBuilder, fieldBuilder, overriddenMembers);
-        }
-      }
-
-      overriddenMembers = toSet(classBuilder, overriddenMembers);
-      if (fieldBuilder.isAssignable) {
-        // The field type must be inferred from both getters and setters.
-        for (ClassMember overriddenMember in overriddenMembers) {
-          inferFrom(overriddenMember);
+        } else {
+          inferredType = combinedMemberSignatureType;
         }
       } else {
-        // The field type must be inferred from getters first.
-        for (ClassMember overriddenMember in overriddenMembers) {
-          if (!overriddenMember.forSetter) {
-            inferFrom(overriddenMember);
+        void inferFrom(ClassMember classMember) {
+          if (inferredType is InvalidType) return;
+
+          Member overriddenMember = classMember.getMember(hierarchy);
+          DartType inheritedType;
+          if (overriddenMember is Procedure) {
+            if (overriddenMember.isSetter) {
+              VariableDeclaration parameter =
+                  overriddenMember.function.positionalParameters.single;
+              inheritedType = parameter.type;
+            } else if (overriddenMember.isGetter) {
+              inheritedType = overriddenMember.function.returnType;
+            }
+          } else if (overriddenMember is Field) {
+            inheritedType = overriddenMember.type;
+          }
+          if (inheritedType == null) {
+            debug?.log(
+                "Giving up (inheritedType == null)\n${StackTrace.current}");
+            return;
+          }
+          Substitution substitution;
+          if (classBuilder.cls != overriddenMember.enclosingClass) {
+            assert(
+                substitutions.containsKey(overriddenMember.enclosingClass),
+                "${classBuilder.fullNameForErrors} "
+                "${overriddenMember.enclosingClass.name}");
+            substitution = substitutions[overriddenMember.enclosingClass];
+            debug?.log("${classBuilder.fullNameForErrors} -> "
+                "${overriddenMember.enclosingClass.name} $substitution");
+          }
+          assert(inheritedType is! ImplicitFieldType);
+          if (substitution != null) {
+            inheritedType = substitution.substituteType(inheritedType);
+          }
+          inferredType = mergeTypeInLibrary(
+              hierarchy, classBuilder, inferredType, inheritedType);
+          if (inferredType == null) {
+            // A different type has already been inferred.
+            inferredType = const InvalidType();
+            reportCantInferFieldType(
+                classBuilder, fieldBuilder, overriddenMembers);
           }
         }
-        if (inferredType == null) {
-          // The field type must be inferred from setters if no type was
-          // inferred from getters.
+
+        if (fieldBuilder.isAssignable) {
+          // The field type must be inferred from both getters and setters.
           for (ClassMember overriddenMember in overriddenMembers) {
-            if (overriddenMember.forSetter) {
+            inferFrom(overriddenMember);
+          }
+        } else {
+          // The field type must be inferred from getters first.
+          for (ClassMember overriddenMember in overriddenMembers) {
+            if (!overriddenMember.forSetter) {
               inferFrom(overriddenMember);
             }
           }
+          if (inferredType == null) {
+            // The field type must be inferred from setters if no type was
+            // inferred from getters.
+            for (ClassMember overriddenMember in overriddenMembers) {
+              if (overriddenMember.forSetter) {
+                inferFrom(overriddenMember);
+              }
+            }
+          }
         }
       }
 
@@ -1720,10 +1950,18 @@
     void registerOverrideDependency(
         ClassMember member, ClassMember overriddenMember) {
       if (classBuilder == member.classBuilder && member.isSourceDeclaration) {
-        Set<ClassMember> dependencies =
-            overrideDependencies[member] ??= <ClassMember>{};
-        dependencies.add(overriddenMember);
-        member.registerOverrideDependency(overriddenMember);
+        if (overriddenMember.hasDeclarations &&
+            classBuilder == overriddenMember.classBuilder) {
+          for (int i = 0; i < overriddenMember.declarations.length; i++) {
+            registerOverrideDependency(
+                member, overriddenMember.declarations[i]);
+          }
+        } else {
+          Set<ClassMember> dependencies =
+              overrideDependencies[member] ??= <ClassMember>{};
+          dependencies.add(overriddenMember);
+          member.registerOverrideDependency(overriddenMember);
+        }
       }
     }
 
@@ -1973,6 +2211,14 @@
 
       void checkMemberVsSetter(
           ClassMember member, ClassMember overriddenMember) {
+        if (overriddenMember.classBuilder == classBuilder &&
+            overriddenMember.hasDeclarations) {
+          for (ClassMember declaration in overriddenMember.declarations) {
+            checkMemberVsSetter(member, declaration);
+          }
+          return;
+        }
+
         if (classBuilder is! SourceClassBuilder) return;
         if (overriddenMember.isStatic) return;
         if (member == overriddenMember) return;
@@ -2961,46 +3207,6 @@
         isImplicitlyAbstract == other.isImplicitlyAbstract;
   }
 
-  DartType computeMemberType(
-      ClassHierarchyBuilder hierarchy, DartType thisType, Member member) {
-    DartType type;
-    if (member is Procedure) {
-      if (member.isGetter) {
-        type = member.getterType;
-      } else if (member.isSetter) {
-        type = member.setterType;
-      } else {
-        type = member.function
-            .computeFunctionType(member.enclosingLibrary.nonNullable);
-      }
-    } else if (member is Field) {
-      type = member.type;
-    } else {
-      unhandled("${member.runtimeType}", "$member", classBuilder.charOffset,
-          classBuilder.fileUri);
-    }
-    InterfaceType instance = hierarchy.getTypeAsInstanceOf(
-        thisType,
-        member.enclosingClass,
-        classBuilder.library.library,
-        hierarchy.coreTypes);
-    assert(
-        instance != null,
-        "No instance of $thisType as ${member.enclosingClass} found for "
-        "$member.");
-    return Substitution.fromInterfaceType(instance).substituteType(type);
-  }
-
-  bool isMoreSpecific(ClassHierarchyBuilder hierarchy, DartType a, DartType b) {
-    if (isSetter) {
-      return hierarchy.types
-          .isSubtypeOf(b, a, SubtypeCheckMode.withNullabilities);
-    } else {
-      return hierarchy.types
-          .isSubtypeOf(a, b, SubtypeCheckMode.withNullabilities);
-    }
-  }
-
   @override
   Member getMember(ClassHierarchyBuilder hierarchy) {
     if (combinedMemberSignatureResult != null) {
@@ -3010,89 +3216,16 @@
       return combinedMemberSignatureResult =
           declarations.first.getMember(hierarchy);
     }
-    ClassMember bestSoFar;
-    int bestSoFarIndex;
-    Map<DartType, int> mutualSubtypes;
-    if (declarations.length == 1) {
-      bestSoFar = declarations[0];
-      bestSoFarIndex = 0;
-    } else {
-      DartType thisType = hierarchy.coreTypes.thisInterfaceType(
-          classBuilder.cls, classBuilder.library.nonNullable);
-      bool isNonNullableByDefault = classBuilder.library.isNonNullableByDefault;
 
-      DartType bestTypeSoFar;
-      List<DartType> candidateTypes = new List<DartType>(declarations.length);
-      for (int candidateIndex = declarations.length - 1;
-          candidateIndex >= 0;
-          candidateIndex--) {
-        ClassMember candidate = declarations[candidateIndex];
-        Member target = candidate.getMember(hierarchy);
-        assert(target != null,
-            "No member computed for ${candidate} (${candidate.runtimeType})");
-        DartType candidateType = computeMemberType(hierarchy, thisType, target);
-        if (!isNonNullableByDefault) {
-          candidateType = legacyErasure(hierarchy.coreTypes, candidateType);
-        }
-        candidateTypes[candidateIndex] = candidateType;
-        if (bestSoFar == null) {
-          bestSoFar = candidate;
-          bestTypeSoFar = candidateType;
-          bestSoFarIndex = candidateIndex;
-        } else {
-          if (isMoreSpecific(hierarchy, candidateType, bestTypeSoFar)) {
-            debug?.log("Combined Member Signature: ${candidate.fullName} "
-                "${candidateType} <: ${bestSoFar.fullName} ${bestTypeSoFar}");
-            if (isNonNullableByDefault &&
-                isMoreSpecific(hierarchy, bestTypeSoFar, candidateType)) {
-              if (mutualSubtypes == null) {
-                mutualSubtypes = {
-                  bestTypeSoFar: bestSoFarIndex,
-                  candidateType: candidateIndex
-                };
-              } else {
-                mutualSubtypes[candidateType] = candidateIndex;
-              }
-            } else {
-              mutualSubtypes = null;
-            }
-            bestSoFarIndex = candidateIndex;
-            bestSoFar = candidate;
-            bestTypeSoFar = candidateType;
-          } else {
-            debug?.log("Combined Member Signature: "
-                "${candidate.fullName} !<: ${bestSoFar.fullName}");
-          }
-        }
-      }
-      if (bestSoFar != null) {
-        debug?.log("Combined Member Signature bestSoFar: "
-            "${bestSoFar.fullName}");
-        for (int candidateIndex = 0;
-            candidateIndex < declarations.length;
-            candidateIndex++) {
-          ClassMember candidate = declarations[candidateIndex];
-          DartType candidateType = candidateTypes[candidateIndex];
-          if (!isMoreSpecific(hierarchy, bestTypeSoFar, candidateType)) {
-            debug?.log("Combined Member Signature: "
-                "${bestSoFar.fullName} !<: ${candidate.fullName}");
+    CombinedMemberSignature combinedMemberSignature =
+        new CombinedMemberSignature(hierarchy, classBuilder, declarations,
+            forSetter: isSetter);
 
-            if (!shouldOverrideProblemBeOverlooked(classBuilder)) {
-              bestSoFar = null;
-              bestTypeSoFar = null;
-              mutualSubtypes = null;
-            }
-            break;
-          }
-        }
-      }
-    }
-
-    if (bestSoFar == null) {
+    if (combinedMemberSignature.canonicalClassMember == null) {
       String name = classBuilder.fullNameForErrors;
       int length = classBuilder.isAnonymousMixinApplication ? 1 : name.length;
       List<LocatedMessage> context = declarations.map((ClassMember d) {
-        return messageDeclaredMemberConflictsWithInheritedMembersCause
+        return messageDeclaredMemberConflictsWithOverriddenMembersCause
             .withLocation(d.fileUri, d.charOffset, d.fullNameForErrors.length);
       }).toList();
 
@@ -3109,12 +3242,13 @@
           declarations.first.getMember(hierarchy);
     }
     debug?.log("Combined Member Signature of ${fullNameForErrors}: "
-        "${bestSoFar.fullName}");
+        "${combinedMemberSignature.canonicalClassMember.fullName}");
 
     if (modifyKernel) {
       ProcedureKind kind = ProcedureKind.Method;
-      Member bestMemberSoFar = bestSoFar.getMember(hierarchy);
-      if (bestSoFar.isProperty) {
+      Member bestMemberSoFar =
+          combinedMemberSignature.canonicalClassMember.getMember(hierarchy);
+      if (combinedMemberSignature.canonicalClassMember.isProperty) {
         kind = isSetter ? ProcedureKind.Setter : ProcedureKind.Getter;
       } else if (bestMemberSoFar is Procedure &&
           bestMemberSoFar.kind == ProcedureKind.Operator) {
@@ -3122,20 +3256,16 @@
       }
 
       debug?.log("Combined Member Signature of ${fullNameForErrors}: new "
-          "ForwardingNode($classBuilder, $bestSoFar, $declarations, $kind)");
-      Member stub = new ForwardingNode(
-              hierarchy,
-              classBuilder,
-              bestSoFar,
-              bestSoFarIndex,
-              declarations,
-              kind,
-              mutualSubtypes?.values?.toSet())
-          .finalize();
+          "ForwardingNode($classBuilder, "
+          "${combinedMemberSignature.canonicalClassMember}, "
+          "$declarations, $kind)");
+      Member stub =
+          new ForwardingNode(combinedMemberSignature, kind).finalize();
       if (classBuilder.cls == stub.enclosingClass) {
         classBuilder.cls.addMember(stub);
         SourceLibraryBuilder library = classBuilder.library;
-        Member bestMemberSoFar = bestSoFar.getMember(hierarchy);
+        Member bestMemberSoFar =
+            combinedMemberSignature.canonicalClassMember.getMember(hierarchy);
         if (bestMemberSoFar is Procedure) {
           library.forwardersOrigins..add(stub)..add(bestMemberSoFar);
         }
@@ -3147,7 +3277,8 @@
 
     debug?.log(
         "Combined Member Signature of ${fullNameForErrors}: picked bestSoFar");
-    return combinedMemberSignatureResult = bestSoFar.getMember(hierarchy);
+    return combinedMemberSignatureResult =
+        combinedMemberSignature.canonicalClassMember.getMember(hierarchy);
   }
 
   @override
@@ -3246,8 +3377,10 @@
       if (modifyKernel) {
         // This call will add a body to the abstract method if needed for
         // isGenericCovariantImpl checks.
-        new ForwardingNode(hierarchy, classBuilder, abstractMember, 1,
-                declarations, kind, null)
+        new ForwardingNode(
+                new CombinedMemberSignature.internal(
+                    hierarchy, classBuilder, 1, declarations),
+                kind)
             .finalize();
       }
     }
@@ -3326,7 +3459,7 @@
   String name = parameter.name;
   List<LocatedMessage> context = overriddenMembers
       .map((ClassMember overriddenMember) {
-        return messageDeclaredMemberConflictsWithInheritedMembersCause
+        return messageDeclaredMemberConflictsWithOverriddenMembersCause
             .withLocation(overriddenMember.fileUri, overriddenMember.charOffset,
                 overriddenMember.fullNameForErrors.length);
       })
@@ -3335,7 +3468,9 @@
       .toSet()
       .toList();
   cls.addProblem(
-      templateCantInferTypeDueToInconsistentOverrides.withArguments(name),
+      cls.library.isNonNullableByDefault
+          ? templateCantInferTypeDueToNoCombinedSignature.withArguments(name)
+          : templateCantInferTypeDueToInconsistentOverrides.withArguments(name),
       parameter.charOffset,
       name.length,
       wasHandled: true,
@@ -3347,7 +3482,7 @@
   String name = member.fullNameForErrors;
   List<LocatedMessage> context = overriddenMembers
       .map((ClassMember overriddenMember) {
-        return messageDeclaredMemberConflictsWithInheritedMembersCause
+        return messageDeclaredMemberConflictsWithOverriddenMembersCause
             .withLocation(overriddenMember.fileUri, overriddenMember.charOffset,
                 overriddenMember.fullNameForErrors.length);
       })
@@ -3403,7 +3538,11 @@
   //   }
   // }
   cls.addProblem(
-      templateCantInferReturnTypeDueToInconsistentOverrides.withArguments(name),
+      cls.library.isNonNullableByDefault
+          ? templateCantInferReturnTypeDueToNoCombinedSignature
+              .withArguments(name)
+          : templateCantInferReturnTypeDueToInconsistentOverrides
+              .withArguments(name),
       member.charOffset,
       name.length,
       wasHandled: true,
@@ -3414,7 +3553,7 @@
     Iterable<ClassMember> overriddenMembers) {
   List<LocatedMessage> context = overriddenMembers
       .map((ClassMember overriddenMember) {
-        return messageDeclaredMemberConflictsWithInheritedMembersCause
+        return messageDeclaredMemberConflictsWithOverriddenMembersCause
             .withLocation(overriddenMember.fileUri, overriddenMember.charOffset,
                 overriddenMember.fullNameForErrors.length);
       })
@@ -3424,7 +3563,9 @@
       .toList();
   String name = member.fullNameForErrors;
   cls.addProblem(
-      templateCantInferTypeDueToInconsistentOverrides.withArguments(name),
+      cls.library.isNonNullableByDefault
+          ? templateCantInferTypeDueToNoCombinedSignature.withArguments(name)
+          : templateCantInferTypeDueToInconsistentOverrides.withArguments(name),
       member.charOffset,
       name.length,
       wasHandled: true,
@@ -3469,3 +3610,300 @@
     }
   }
 }
+
+/// Class used for computing and inspecting the combined member signature for
+/// a set of overridden/inherited members.
+class CombinedMemberSignature {
+  /// The class hierarchy builder used for building this class.
+  final ClassHierarchyBuilder hierarchy;
+
+  /// The target class for the combined member signature.
+  ///
+  /// The [_memberTypes] are computed in terms of each member is inherited into
+  /// [classBuilder].
+  ///
+  /// [classBuilder] is also used for determining whether the combined member
+  /// signature should be computed using nnbd or legacy semantics.
+  final SourceClassBuilder classBuilder;
+
+  /// The list of the members inherited into or overridden in [classBuilder].
+  final List<ClassMember> members;
+
+  /// The index within [members] for the member whose type is the most specific
+  /// among [members]. If `null`, the combined member signature is not defined
+  /// for [members] in [classBuilder].
+  ///
+  /// For the legacy computation, the type of this member defines the combined
+  /// member signature.
+  ///
+  /// For the nnbd computation, this is one of the members whose type define
+  /// the combined member signature, and the indices of the remaining members
+  /// are stored in [_mutualSubtypes].
+  int _canonicalMemberIndex;
+
+  /// For the nnbd computation, this maps each distinct but most specific member
+  /// type to the index of one of the [members] with that type.
+  ///
+  /// If there is only one most specific member type, this is `null`.
+  Map<DartType, int> _mutualSubtypes;
+
+  /// Cache for the types of [members] as inherited into [classBuilder].
+  List<DartType> _memberTypes;
+
+  /// Cache for the this type of [classBuilder].
+  DartType _thisType;
+
+  /// If `true` the combined member signature type has been computed.
+  ///
+  /// Note that the combined member signature type might be undefined in which
+  /// case [_combinedMemberSignatureType] is `null`.
+  bool _isCombinedMemberSignatureTypeComputed = false;
+
+  /// Cache the computed combined member signature type.
+  ///
+  /// If the combined member signature type is undefined this is set to `null`.
+  DartType _combinedMemberSignatureType;
+
+  /// Creates a [CombinedMemberSignature] whose canonical member is already
+  /// defined.
+  CombinedMemberSignature.internal(this.hierarchy, this.classBuilder,
+      this._canonicalMemberIndex, this.members);
+
+  /// Creates a [CombinedMemberSignature] for [members] inherited into
+  /// [classBuilder].
+  ///
+  /// If [forSetter] is `true`, contravariance of the setter types is used to
+  /// compute the most specific member type. Otherwise covariance of the getter
+  /// types or function types is used.
+  CombinedMemberSignature(this.hierarchy, this.classBuilder, this.members,
+      {bool forSetter}) {
+    assert(forSetter != null);
+    ClassMember bestSoFar;
+    int bestSoFarIndex;
+    if (members.length == 1) {
+      bestSoFar = members.first;
+      bestSoFarIndex = 0;
+    } else {
+      bool isNonNullableByDefault = classBuilder.library.isNonNullableByDefault;
+
+      DartType bestTypeSoFar;
+      for (int candidateIndex = members.length - 1;
+          candidateIndex >= 0;
+          candidateIndex--) {
+        ClassMember candidate = members[candidateIndex];
+        DartType candidateType = getMemberType(candidateIndex);
+        if (bestSoFar == null) {
+          bestSoFar = candidate;
+          bestTypeSoFar = candidateType;
+          bestSoFarIndex = candidateIndex;
+        } else {
+          if (_isMoreSpecific(candidateType, bestTypeSoFar, forSetter)) {
+            if (isNonNullableByDefault &&
+                _isMoreSpecific(bestTypeSoFar, candidateType, forSetter)) {
+              if (_mutualSubtypes == null) {
+                _mutualSubtypes = {
+                  bestTypeSoFar: bestSoFarIndex,
+                  candidateType: candidateIndex
+                };
+              } else {
+                _mutualSubtypes[candidateType] = candidateIndex;
+              }
+            } else {
+              _mutualSubtypes = null;
+            }
+            bestSoFarIndex = candidateIndex;
+            bestSoFar = candidate;
+            bestTypeSoFar = candidateType;
+          }
+        }
+      }
+      if (bestSoFar != null) {
+        for (int candidateIndex = 0;
+            candidateIndex < members.length;
+            candidateIndex++) {
+          DartType candidateType = getMemberType(candidateIndex);
+          if (!_isMoreSpecific(bestTypeSoFar, candidateType, forSetter)) {
+            if (!shouldOverrideProblemBeOverlooked(classBuilder)) {
+              bestSoFar = null;
+              bestSoFarIndex = null;
+              bestTypeSoFar = null;
+              _mutualSubtypes = null;
+            }
+            break;
+          }
+        }
+      }
+    }
+
+    _canonicalMemberIndex = bestSoFarIndex;
+  }
+
+  /// The member within [members] type is the most specific among [members].
+  /// If `null`, the combined member signature is not defined for [members] in
+  /// [classBuilder].
+  ///
+  /// For the legacy computation, the type of this member defines the combined
+  /// member signature.
+  ///
+  /// For the nnbd computation, this is one of the members whose type define
+  /// the combined member signature, and the indices of the all members whose
+  /// type define the combined member signature are in [mutualSubtypeIndices].
+  ClassMember get canonicalClassMember =>
+      _canonicalMemberIndex != null ? members[_canonicalMemberIndex] : null;
+
+  /// The index within [members] for the member whose type is the most specific
+  /// among [members]. If `null`, the combined member signature is not defined
+  /// for [members] in [classBuilder].
+  ///
+  /// For the legacy computation, the type of this member defines the combined
+  /// member signature.
+  ///
+  /// For the nnbd computation, this is one of the members whose type define
+  /// the combined member signature, and the indices of the all members whose
+  /// type define the combined member signature are in [mutualSubtypeIndices].
+  int get classMemberIndex => _canonicalMemberIndex;
+
+  /// For the nnbd computation, the indices of the [members] with most specific
+  /// member type.
+  ///
+  /// If there is only one most specific member type, this is `null`.
+  Set<int> get mutualSubtypeIndices => _mutualSubtypes?.values?.toSet();
+
+  /// The this type of [classBuilder].
+  DartType get thisType {
+    return _thisType ??= hierarchy.coreTypes
+        .thisInterfaceType(classBuilder.cls, classBuilder.library.nonNullable);
+  }
+
+  /// Returns type of the [index]th member in [members] as inherited in
+  /// [classBuilder].
+  DartType getMemberType(int index) {
+    _memberTypes ??= new List<DartType>(members.length);
+    DartType candidateType = _memberTypes[index];
+    if (candidateType == null) {
+      ClassMember candidate = members[index];
+      Member target = candidate.getMember(hierarchy);
+      assert(target != null,
+          "No member computed for ${candidate} (${candidate.runtimeType})");
+      candidateType = _computeMemberType(thisType, target);
+      if (!classBuilder.library.isNonNullableByDefault) {
+        candidateType = legacyErasure(hierarchy.coreTypes, candidateType);
+      }
+      _memberTypes[index] = candidateType;
+    }
+    return candidateType;
+  }
+
+  /// Returns the type of the combined member signature, if defined.
+  DartType get combinedMemberSignatureType {
+    if (!_isCombinedMemberSignatureTypeComputed) {
+      _isCombinedMemberSignatureTypeComputed = true;
+      if (_canonicalMemberIndex == null) {
+        return null;
+      }
+      if (classBuilder.library.isNonNullableByDefault) {
+        _combinedMemberSignatureType = getMemberType(_canonicalMemberIndex);
+        if (_mutualSubtypes != null) {
+          _combinedMemberSignatureType =
+              norm(hierarchy.coreTypes, _combinedMemberSignatureType);
+          for (int index in _mutualSubtypes.values) {
+            if (_canonicalMemberIndex != index) {
+              _combinedMemberSignatureType = nnbdTopMerge(
+                  hierarchy.coreTypes,
+                  _combinedMemberSignatureType,
+                  norm(hierarchy.coreTypes, getMemberType(index)));
+            }
+          }
+        }
+      } else {
+        _combinedMemberSignatureType = legacyErasure(
+            hierarchy.coreTypes, getMemberType(_canonicalMemberIndex));
+      }
+    }
+    return _combinedMemberSignatureType;
+  }
+
+  /// Returns the type of the combined member signature, if defined, with
+  /// all method type parameters substituted with [typeParameters].
+  ///
+  /// This is used for inferring types on a declared member from the type of the
+  /// combined member signature.
+  DartType getCombinedSignatureTypeInContext(
+      List<TypeParameter> typeParameters) {
+    DartType type = combinedMemberSignatureType;
+    if (type == null) {
+      return null;
+    }
+    int typeParameterCount = typeParameters.length;
+    if (type is FunctionType) {
+      List<TypeParameter> signatureTypeParameters = type.typeParameters;
+      if (typeParameterCount != signatureTypeParameters.length) {
+        return null;
+      }
+      if (typeParameterCount == 0) {
+        return type;
+      }
+      List<DartType> types = new List<DartType>(typeParameterCount);
+      for (int i = 0; i < typeParameterCount; i++) {
+        types[i] = new TypeParameterType.forAlphaRenaming(
+            signatureTypeParameters[i], typeParameters[i]);
+      }
+      Substitution substitution =
+          Substitution.fromPairs(signatureTypeParameters, types);
+      for (int i = 0; i < typeParameterCount; i++) {
+        DartType typeParameterBound = typeParameters[i].bound;
+        DartType signatureTypeParameterBound =
+            substitution.substituteType(signatureTypeParameters[i].bound);
+        if (!hierarchy.types
+            .performNullabilityAwareMutualSubtypesCheck(
+                typeParameterBound, signatureTypeParameterBound)
+            .isSubtypeWhenUsingNullabilities()) {
+          return null;
+        }
+      }
+      return substitution.substituteType(type.withoutTypeParameters);
+    } else if (typeParameterCount != 0) {
+      return null;
+    }
+    return type;
+  }
+
+  DartType _computeMemberType(DartType thisType, Member member) {
+    DartType type;
+    if (member is Procedure) {
+      if (member.isGetter) {
+        type = member.getterType;
+      } else if (member.isSetter) {
+        type = member.setterType;
+      } else {
+        type = member.function
+            .computeFunctionType(member.enclosingLibrary.nonNullable);
+      }
+    } else if (member is Field) {
+      type = member.type;
+    } else {
+      unhandled("${member.runtimeType}", "$member", classBuilder.charOffset,
+          classBuilder.fileUri);
+    }
+    InterfaceType instance = hierarchy.getTypeAsInstanceOf(
+        thisType,
+        member.enclosingClass,
+        classBuilder.library.library,
+        hierarchy.coreTypes);
+    assert(
+        instance != null,
+        "No instance of $thisType as ${member.enclosingClass} found for "
+        "$member.");
+    return Substitution.fromInterfaceType(instance).substituteType(type);
+  }
+
+  bool _isMoreSpecific(DartType a, DartType b, bool forSetter) {
+    if (forSetter) {
+      return hierarchy.types
+          .isSubtypeOf(b, a, SubtypeCheckMode.withNullabilities);
+    } else {
+      return hierarchy.types
+          .isSubtypeOf(a, b, SubtypeCheckMode.withNullabilities);
+    }
+  }
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
index 9daa3e6..08a6f34 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
@@ -50,33 +50,31 @@
 import 'class_hierarchy_builder.dart';
 
 class ForwardingNode {
-  final ClassHierarchyBuilder hierarchy;
+  ClassHierarchyBuilder get hierarchy => _combinedMemberSignature.hierarchy;
 
-  final SourceClassBuilder classBuilder;
+  SourceClassBuilder get classBuilder => _combinedMemberSignature.classBuilder;
 
-  final ClassMember combinedMemberSignatureResult;
+  // TODO(johnniwinther): Use [_combinedMemberSignature] more directly in
+  // the forwarding node computation.
+  final CombinedMemberSignature _combinedMemberSignature;
+
+  ClassMember get combinedMemberSignatureResult =>
+      _combinedMemberSignature.canonicalClassMember;
 
   /// The index of [combinedMemberSignatureResult] in [_candidates].
-  final int _combinedMemberIndex;
+  int get _combinedMemberIndex => _combinedMemberSignature.classMemberIndex;
 
   final ProcedureKind kind;
 
   /// A list containing the directly implemented and directly inherited
   /// procedures of the class in question.
-  final List<ClassMember> _candidates;
+  List<ClassMember> get _candidates => _combinedMemberSignature.members;
 
   /// The indices of the [_candidates] whose types need to be merged to compute
   /// the resulting member type.
-  final Set<int> _mergeIndices;
+  Set<int> get _mergeIndices => _combinedMemberSignature.mutualSubtypeIndices;
 
-  ForwardingNode(
-      this.hierarchy,
-      this.classBuilder,
-      this.combinedMemberSignatureResult,
-      this._combinedMemberIndex,
-      this._candidates,
-      this.kind,
-      this._mergeIndices);
+  ForwardingNode(this._combinedMemberSignature, this.kind);
 
   Name get name => combinedMemberSignatureResult.name;
 
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index c58a522..0899ab4 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -492,61 +492,8 @@
   }
 
   void checkTypesInOutline(TypeEnvironment typeEnvironment) {
-    SourceLibraryBuilder libraryBuilder = this.library;
-    Library library = libraryBuilder.library;
-    final DartType bottomType = library.isNonNullableByDefault
-        ? const NeverType(Nullability.nonNullable)
-        : typeEnvironment.nullType;
-
-    // Check in bounds of own type variables.
-    for (TypeParameter parameter in cls.typeParameters) {
-      Set<TypeArgumentIssue> issues = {};
-      issues.addAll(findTypeArgumentIssues(
-              library,
-              parameter.bound,
-              typeEnvironment,
-              SubtypeCheckMode.ignoringNullabilities,
-              bottomType,
-              allowSuperBounded: true) ??
-          const []);
-      if (library.isNonNullableByDefault) {
-        issues.addAll(findTypeArgumentIssues(library, parameter.bound,
-                typeEnvironment, SubtypeCheckMode.withNullabilities, bottomType,
-                allowSuperBounded: true) ??
-            const []);
-      }
-      for (TypeArgumentIssue issue in issues) {
-        DartType argument = issue.argument;
-        TypeParameter typeParameter = issue.typeParameter;
-        if (libraryBuilder.inferredTypes.contains(argument)) {
-          // Inference in type expressions in the supertypes boils down to
-          // instantiate-to-bound which shouldn't produce anything that breaks
-          // the bounds after the non-simplicity checks are done.  So, any
-          // violation here is the result of non-simple bounds, and the error
-          // is reported elsewhere.
-          continue;
-        }
-
-        if (argument is FunctionType && argument.typeParameters.length > 0) {
-          libraryBuilder.reportTypeArgumentIssue(
-              messageGenericFunctionTypeUsedAsActualTypeArgument,
-              fileUri,
-              parameter.fileOffset,
-              null);
-        } else {
-          libraryBuilder.reportTypeArgumentIssue(
-              templateIncorrectTypeArgument.withArguments(
-                  argument,
-                  typeParameter.bound,
-                  typeParameter.name,
-                  getGenericTypeName(issue.enclosingType),
-                  library.isNonNullableByDefault),
-              fileUri,
-              parameter.fileOffset,
-              typeParameter);
-        }
-      }
-    }
+    library.checkBoundsInTypeParameters(
+        typeEnvironment, cls.typeParameters, fileUri);
 
     // Check in supers.
     if (cls.supertype != null) {
@@ -561,62 +508,37 @@
       }
     }
 
-    // Check in members.
-    for (Procedure procedure in cls.procedures) {
-      checkVarianceInFunction(procedure, typeEnvironment, cls.typeParameters);
-      libraryBuilder.checkBoundsInFunctionNode(
-          procedure.function, typeEnvironment, fileUri);
-    }
-    for (Constructor constructor in cls.constructors) {
-      libraryBuilder.checkBoundsInFunctionNode(
-          constructor.function, typeEnvironment, fileUri);
-    }
-    for (RedirectingFactoryConstructor redirecting
-        in cls.redirectingFactoryConstructors) {
-      libraryBuilder.checkBoundsInFunctionNodeParts(
-          typeEnvironment, fileUri, redirecting.fileOffset,
-          typeParameters: redirecting.typeParameters,
-          positionalParameters: redirecting.positionalParameters,
-          namedParameters: redirecting.namedParameters);
-    }
-
     forEach((String name, Builder builder) {
-      // Check fields.
       if (builder is SourceFieldBuilder) {
+        // Check fields.
         checkVarianceInField(builder, typeEnvironment, cls.typeParameters);
-        libraryBuilder.checkTypesInField(builder, typeEnvironment);
-      }
-
-      // Check initializers.
-      if (builder is FunctionBuilder &&
-          !(builder.isAbstract || builder.isExternal) &&
-          builder.formals != null) {
-        libraryBuilder.checkInitializersInFormals(
-            builder.formals, typeEnvironment);
+        library.checkTypesInField(builder, typeEnvironment);
+      } else if (builder is ProcedureBuilder) {
+        // Check procedures
+        checkVarianceInFunction(
+            builder.procedure, typeEnvironment, cls.typeParameters);
+        library.checkTypesInProcedureBuilder(builder, typeEnvironment);
+      } else {
+        assert(builder is DillMemberBuilder && builder.name == redirectingName,
+            "Unexpected member: $builder.");
       }
     });
 
-    constructors.local.forEach((String name, MemberBuilder builder) {
+    forEachConstructor((String name, MemberBuilder builder) {
       if (builder is ConstructorBuilder) {
-        if (!builder.isExternal && builder.formals != null) {
-          libraryBuilder.checkInitializersInFormals(
-              builder.formals, typeEnvironment);
-        }
+        library.checkTypesInConstructorBuilder(builder, typeEnvironment);
       } else if (builder is RedirectingFactoryBuilder) {
-        // Default values are not required on redirecting factory constructors.
+        library.checkTypesInRedirectingFactoryBuilder(builder, typeEnvironment);
       } else if (builder is ProcedureBuilder) {
         assert(builder.isFactory, "Unexpected constructor $builder.");
-        if (!builder.isExternal && builder.formals != null) {
-          libraryBuilder.checkInitializersInFormals(
-              builder.formals, typeEnvironment);
-        }
+        library.checkTypesInProcedureBuilder(builder, typeEnvironment);
       } else {
         assert(
             // This is a synthesized constructor.
             builder is DillMemberBuilder && builder.member is Constructor,
-            "Unexpected constructor $builder.");
+            "Unexpected constructor: $builder.");
       }
-    });
+    }, includeInjectedConstructors: true);
   }
 
   void addSyntheticConstructor(SyntheticConstructorBuilder constructorBuilder) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
index 6792c0d..b8d7b3d 100644
--- a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
@@ -5,15 +5,18 @@
 import 'dart:core' hide MapEntry;
 
 import 'package:kernel/ast.dart';
+import 'package:kernel/type_environment.dart';
 
 import '../../base/common.dart';
 
 import '../builder/builder.dart';
 import '../builder/class_builder.dart';
 import '../builder/extension_builder.dart';
+import '../builder/field_builder.dart';
 import '../builder/library_builder.dart';
 import '../builder/member_builder.dart';
 import '../builder/metadata_builder.dart';
+import '../builder/procedure_builder.dart';
 import '../builder/type_builder.dart';
 import '../builder/type_variable_builder.dart';
 
@@ -61,6 +64,9 @@
             typeParameters, onType);
 
   @override
+  SourceLibraryBuilder get library => super.library;
+
+  @override
   SourceExtensionBuilder get origin => _origin ?? this;
 
   Extension get extension => isPatch ? origin._extension : _extension;
@@ -231,4 +237,27 @@
     });
     return count;
   }
+
+  void checkTypesInOutline(TypeEnvironment typeEnvironment) {
+    library.checkBoundsInTypeParameters(
+        typeEnvironment, extension.typeParameters, fileUri);
+
+    // Check on clause.
+    if (_extension.onType != null) {
+      library.checkBoundsInType(_extension.onType, typeEnvironment,
+          onType.fileUri, onType.charOffset);
+    }
+
+    forEach((String name, Builder builder) {
+      if (builder is SourceFieldBuilder) {
+        // Check fields.
+        library.checkTypesInField(builder, typeEnvironment);
+      } else if (builder is ProcedureBuilder) {
+        // Check procedures
+        library.checkTypesInProcedureBuilder(builder, typeEnvironment);
+      } else {
+        assert(false, "Unexpected member: $builder.");
+      }
+    });
+  }
 }
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index f7492b8..d142b10 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -3191,6 +3191,63 @@
     }
   }
 
+  void checkBoundsInTypeParameters(TypeEnvironment typeEnvironment,
+      List<TypeParameter> typeParameters, Uri fileUri) {
+    final DartType bottomType = library.isNonNullableByDefault
+        ? const NeverType(Nullability.nonNullable)
+        : typeEnvironment.nullType;
+
+    // Check in bounds of own type variables.
+    for (TypeParameter parameter in typeParameters) {
+      Set<TypeArgumentIssue> issues = {};
+      issues.addAll(findTypeArgumentIssues(
+              library,
+              parameter.bound,
+              typeEnvironment,
+              SubtypeCheckMode.ignoringNullabilities,
+              bottomType,
+              allowSuperBounded: true) ??
+          const []);
+      if (library.isNonNullableByDefault) {
+        issues.addAll(findTypeArgumentIssues(library, parameter.bound,
+                typeEnvironment, SubtypeCheckMode.withNullabilities, bottomType,
+                allowSuperBounded: true) ??
+            const []);
+      }
+      for (TypeArgumentIssue issue in issues) {
+        DartType argument = issue.argument;
+        TypeParameter typeParameter = issue.typeParameter;
+        if (inferredTypes.contains(argument)) {
+          // Inference in type expressions in the supertypes boils down to
+          // instantiate-to-bound which shouldn't produce anything that breaks
+          // the bounds after the non-simplicity checks are done.  So, any
+          // violation here is the result of non-simple bounds, and the error
+          // is reported elsewhere.
+          continue;
+        }
+
+        if (argument is FunctionType && argument.typeParameters.length > 0) {
+          reportTypeArgumentIssue(
+              messageGenericFunctionTypeUsedAsActualTypeArgument,
+              fileUri,
+              parameter.fileOffset,
+              null);
+        } else {
+          reportTypeArgumentIssue(
+              templateIncorrectTypeArgument.withArguments(
+                  argument,
+                  typeParameter.bound,
+                  typeParameter.name,
+                  getGenericTypeName(issue.enclosingType),
+                  library.isNonNullableByDefault),
+              fileUri,
+              parameter.fileOffset,
+              typeParameter);
+        }
+      }
+    }
+  }
+
   void checkBoundsInFunctionNodeParts(
       TypeEnvironment typeEnvironment, Uri fileUri, int fileOffset,
       {List<TypeParameter> typeParameters,
@@ -3265,6 +3322,34 @@
     }
   }
 
+  void checkTypesInProcedureBuilder(
+      ProcedureBuilder procedureBuilder, TypeEnvironment typeEnvironment) {
+    checkBoundsInFunctionNode(procedureBuilder.procedure.function,
+        typeEnvironment, procedureBuilder.fileUri);
+    if (procedureBuilder.formals != null &&
+        !(procedureBuilder.isAbstract || procedureBuilder.isExternal)) {
+      checkInitializersInFormals(procedureBuilder.formals, typeEnvironment);
+    }
+  }
+
+  void checkTypesInConstructorBuilder(
+      ConstructorBuilder constructorBuilder, TypeEnvironment typeEnvironment) {
+    checkBoundsInFunctionNode(
+        constructorBuilder.constructor.function, typeEnvironment, fileUri);
+    if (!constructorBuilder.isExternal && constructorBuilder.formals != null) {
+      checkInitializersInFormals(constructorBuilder.formals, typeEnvironment);
+    }
+  }
+
+  void checkTypesInRedirectingFactoryBuilder(
+      RedirectingFactoryBuilder redirectingFactoryBuilder,
+      TypeEnvironment typeEnvironment) {
+    checkBoundsInFunctionNode(redirectingFactoryBuilder.procedure.function,
+        typeEnvironment, redirectingFactoryBuilder.fileUri);
+    // Default values are not required on redirecting factory constructors so
+    // we don't call [checkInitializersInFormals].
+  }
+
   void checkBoundsInFunctionNode(
       FunctionNode function, TypeEnvironment typeEnvironment, Uri fileUri) {
     checkBoundsInFunctionNodeParts(
@@ -3493,13 +3578,13 @@
       if (declaration is FieldBuilder) {
         checkTypesInField(declaration, typeEnvironment);
       } else if (declaration is ProcedureBuilder) {
-        checkBoundsInFunctionNode(declaration.procedure.function,
-            typeEnvironment, declaration.fileUri);
-        if (declaration.formals != null) {
-          checkInitializersInFormals(declaration.formals, typeEnvironment);
-        }
+        checkTypesInProcedureBuilder(declaration, typeEnvironment);
       } else if (declaration is SourceClassBuilder) {
         declaration.checkTypesInOutline(typeEnvironment);
+      } else if (declaration is SourceExtensionBuilder) {
+        declaration.checkTypesInOutline(typeEnvironment);
+      } else {
+        //assert(false, "Unexpected declaration ${declaration.runtimeType}");
       }
     }
     inferredTypes.clear();
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 7412866..df50caa 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -2139,8 +2139,8 @@
   template: "This is the inherited member."
   severity: CONTEXT
 
-DeclaredMemberConflictsWithInheritedMembersCause:
-  template: "This is one of the inherited members."
+DeclaredMemberConflictsWithOverriddenMembersCause:
+  template: "This is one of the overridden members."
   severity: CONTEXT
 
 InheritedMembersConflict:
@@ -3446,14 +3446,46 @@
     #num2%12.3 bytes/ms, and
     #num3%12.3 ms/libraries.
 
+CantInferTypeDueToNoCombinedSignature:
+  template: "Can't infer a type for '#name' as the overridden members don't have a combined signature."
+  tip: "Try adding an explicit type."
+  analyzerCode: COMPILE_TIME_ERROR.NO_COMBINED_SUPER_SIGNATURE
+  configuration: nnbd-strong
+  script: |
+    class A {
+      void method(int a) {}
+    }
+    class B {
+      void method(String a) {}
+    }
+    class C implements A, B {
+      void method(a) {}
+    }
+
+CantInferReturnTypeDueToNoCombinedSignature:
+  template: "Can't infer a return type for '#name' as the overridden members don't have a combined signature."
+  tip: "Try adding an explicit type."
+  analyzerCode: COMPILE_TIME_ERROR.NO_COMBINED_SUPER_SIGNATURE
+  configuration: nnbd-strong
+  script: |
+    abstract class A {
+      int get getter;
+    }
+    abstract class B {
+      String get getter;
+    }
+    abstract class C implements A, B {
+      get getter;
+    }
+
 CantInferTypeDueToInconsistentOverrides:
-  template: "Can't infer a type for '#name' as some of the inherited members have different types."
+  template: "Can't infer a type for '#name' as some of the overridden members have different types."
   tip: "Try adding an explicit type."
   analyzerCode: INVALID_METHOD_OVERRIDE
   external: testcases/inference/inconsistent_overrides.dart
 
 CantInferReturnTypeDueToInconsistentOverrides:
-  template: "Can't infer a return type for '#name' as some of the inherited members have different types."
+  template: "Can't infer a return type for '#name' as some of the overridden members have different types."
   tip: "Try adding an explicit type."
   analyzerCode: INVALID_METHOD_OVERRIDE
   external: testcases/inference/inconsistent_overrides.dart
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 1f0ca3c..4a2893b 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -529,6 +529,7 @@
 initializer's
 insertion
 inspect
+inspecting
 inspection
 inspector
 inspired
diff --git a/pkg/front_end/test/spell_checking_list_common.txt b/pkg/front_end/test/spell_checking_list_common.txt
index 47cfd38..62f6492 100644
--- a/pkg/front_end/test/spell_checking_list_common.txt
+++ b/pkg/front_end/test/spell_checking_list_common.txt
@@ -273,6 +273,7 @@
 behaved
 behaves
 behavior
+behavioral
 behaviors
 behind
 being
@@ -844,6 +845,7 @@
 diet
 differ
 difference
+differences
 different
 differently
 dig
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index bef5e7f..b3c7774 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -71,6 +71,11 @@
 brand
 brave
 brown
+bt
+bt3a
+bt3b
+bt4a
+bt4b
 btw
 builddir
 bulk2
@@ -137,6 +142,10 @@
 coverages
 cp
 csi
+ct3a
+ct3b
+ct4a
+ct4b
 ctrl
 cumulative
 cursor
@@ -239,6 +248,15 @@
 favors
 fi
 fibonacci
+field1c
+field2a
+field2b
+field2c
+field3a
+field3b
+field3c
+field4a
+field4b
 filesystem
 filler
 fisk
@@ -280,6 +298,9 @@
 gave
 gc
 gcd
+getter1c
+getter1d
+getter1e
 goo
 google
 graphic
@@ -411,6 +432,7 @@
 matters
 mds
 measured
+method1d
 metric
 metrics
 mf
@@ -549,6 +571,11 @@
 selection
 sensitive
 services
+setter1a
+setter1b
+setter1c
+setter1d
+setter1e
 setups
 severe
 sheets
@@ -604,6 +631,10 @@
 supplement
 suspension
 symbolic
+t3a
+t3b
+t4a
+t4b
 t\b\f\u
 t\u0008\f\u
 tails
diff --git a/pkg/front_end/test/text_representation/data/types_opt_out.dart b/pkg/front_end/test/text_representation/data/types_opt_out.dart
index 5db349b..b302015 100644
--- a/pkg/front_end/test/text_representation/data/types_opt_out.dart
+++ b/pkg/front_end/test/text_representation/data/types_opt_out.dart
@@ -24,7 +24,7 @@
     String /*normal|limited.String**/ /*verbose.dart.core::String**/ o) {}
 voidType(void /*void*/ o) {}
 dynamicType(dynamic /*dynamic*/ o) {}
-neverType(Never /*Never**/ o) {}
+neverType(Never /*normal|limited.Null?*/ /*verbose.dart.core::Null?*/ o) {}
 objectType(
     Object /*normal|limited.Object**/ /*verbose.dart.core::Object**/ o) {}
 genericType1(
diff --git a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.outline.expect b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.outline.expect
index 2bbb7e2..8c879e7 100644
--- a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.outline.expect
+++ b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.outline.expect
@@ -2,146 +2,146 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:49:7: Error: Can't infer a type for 'field2' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:49:7: Error: Can't infer a type for 'field2' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field2; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the overridden members.
 //   var field2 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the overridden members.
 //   var field2 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:51:7: Error: Can't infer a type for 'field4' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:51:7: Error: Can't infer a type for 'field4' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field4 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the overridden members.
 //   var field4 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the overridden members.
 //   var field4 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:53:7: Error: Can't infer a type for 'field6' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:53:7: Error: Can't infer a type for 'field6' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field6; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the overridden members.
 //   int field6;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the overridden members.
 //   String field6;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:55:7: Error: Can't infer a type for 'field8' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:55:7: Error: Can't infer a type for 'field8' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field8 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the overridden members.
 //   int field8;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the overridden members.
 //   String field8;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:58:7: Error: Can't infer a type for 'field11' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:58:7: Error: Can't infer a type for 'field11' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field11; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:16:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:16:5: Context: This is one of the overridden members.
 //   T field11;
 //     ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:37:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:37:5: Context: This is one of the overridden members.
 //   S field11;
 //     ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:64:7: Error: Can't infer a type for 'field17' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:64:7: Error: Can't infer a type for 'field17' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field17; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the overridden members.
 //   var field17 = 0;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the overridden members.
 //   String field17;
 //          ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:65:7: Error: Can't infer a type for 'field18' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:65:7: Error: Can't infer a type for 'field18' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field18; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the overridden members.
 //   int field18;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the overridden members.
 //   var field18 = '';
 //       ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:90:7: Error: Can't infer a type for 'field2' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:90:7: Error: Can't infer a type for 'field2' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field2; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the overridden members.
 //   var field2 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the overridden members.
 //   var field2 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:92:7: Error: Can't infer a type for 'field4' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:92:7: Error: Can't infer a type for 'field4' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field4 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the overridden members.
 //   var field4 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the overridden members.
 //   var field4 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:94:7: Error: Can't infer a type for 'field6' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:94:7: Error: Can't infer a type for 'field6' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field6; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the overridden members.
 //   int field6;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the overridden members.
 //   String field6;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:96:7: Error: Can't infer a type for 'field8' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:96:7: Error: Can't infer a type for 'field8' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field8 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the overridden members.
 //   int field8;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the overridden members.
 //   String field8;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:105:7: Error: Can't infer a type for 'field17' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:105:7: Error: Can't infer a type for 'field17' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field17; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the overridden members.
 //   var field17 = 0;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the overridden members.
 //   String field17;
 //          ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:106:7: Error: Can't infer a type for 'field18' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:106:7: Error: Can't infer a type for 'field18' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field18; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the overridden members.
 //   int field18;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the overridden members.
 //   var field18 = '';
 //       ^^^^^^^
 //
diff --git a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.strong.expect b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.strong.expect
index 73fdb87..0400159 100644
--- a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.strong.expect
+++ b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.strong.expect
@@ -2,146 +2,146 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:49:7: Error: Can't infer a type for 'field2' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:49:7: Error: Can't infer a type for 'field2' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field2; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the overridden members.
 //   var field2 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the overridden members.
 //   var field2 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:51:7: Error: Can't infer a type for 'field4' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:51:7: Error: Can't infer a type for 'field4' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field4 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the overridden members.
 //   var field4 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the overridden members.
 //   var field4 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:53:7: Error: Can't infer a type for 'field6' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:53:7: Error: Can't infer a type for 'field6' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field6; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the overridden members.
 //   int field6;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the overridden members.
 //   String field6;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:55:7: Error: Can't infer a type for 'field8' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:55:7: Error: Can't infer a type for 'field8' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field8 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the overridden members.
 //   int field8;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the overridden members.
 //   String field8;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:58:7: Error: Can't infer a type for 'field11' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:58:7: Error: Can't infer a type for 'field11' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field11; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:16:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:16:5: Context: This is one of the overridden members.
 //   T field11;
 //     ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:37:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:37:5: Context: This is one of the overridden members.
 //   S field11;
 //     ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:64:7: Error: Can't infer a type for 'field17' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:64:7: Error: Can't infer a type for 'field17' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field17; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the overridden members.
 //   var field17 = 0;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the overridden members.
 //   String field17;
 //          ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:65:7: Error: Can't infer a type for 'field18' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:65:7: Error: Can't infer a type for 'field18' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field18; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the overridden members.
 //   int field18;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the overridden members.
 //   var field18 = '';
 //       ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:90:7: Error: Can't infer a type for 'field2' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:90:7: Error: Can't infer a type for 'field2' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field2; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the overridden members.
 //   var field2 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the overridden members.
 //   var field2 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:92:7: Error: Can't infer a type for 'field4' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:92:7: Error: Can't infer a type for 'field4' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field4 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the overridden members.
 //   var field4 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the overridden members.
 //   var field4 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:94:7: Error: Can't infer a type for 'field6' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:94:7: Error: Can't infer a type for 'field6' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field6; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the overridden members.
 //   int field6;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the overridden members.
 //   String field6;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:96:7: Error: Can't infer a type for 'field8' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:96:7: Error: Can't infer a type for 'field8' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field8 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the overridden members.
 //   int field8;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the overridden members.
 //   String field8;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:105:7: Error: Can't infer a type for 'field17' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:105:7: Error: Can't infer a type for 'field17' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field17; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the overridden members.
 //   var field17 = 0;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the overridden members.
 //   String field17;
 //          ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:106:7: Error: Can't infer a type for 'field18' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:106:7: Error: Can't infer a type for 'field18' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var field18; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the overridden members.
 //   int field18;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the overridden members.
 //   var field18 = '';
 //       ^^^^^^^
 //
diff --git a/pkg/front_end/testcases/general/interface_conflict.dart.outline.expect b/pkg/front_end/testcases/general/interface_conflict.dart.outline.expect
index 9b896a7..ec8f574 100644
--- a/pkg/front_end/testcases/general/interface_conflict.dart.outline.expect
+++ b/pkg/front_end/testcases/general/interface_conflict.dart.outline.expect
@@ -6,10 +6,10 @@
 // Try adding a declaration of 'n' to 'C'.
 // abstract class C implements A, B {}
 //                ^
-// pkg/front_end/testcases/general/interface_conflict.dart:6:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/interface_conflict.dart:6:11: Context: This is one of the overridden members.
 //   int get n => 1;
 //           ^
-// pkg/front_end/testcases/general/interface_conflict.dart:10:14: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/interface_conflict.dart:10:14: Context: This is one of the overridden members.
 //   double get n => 2.0;
 //              ^
 //
diff --git a/pkg/front_end/testcases/general/interface_conflict.dart.strong.expect b/pkg/front_end/testcases/general/interface_conflict.dart.strong.expect
index 98445c0..35d40fb 100644
--- a/pkg/front_end/testcases/general/interface_conflict.dart.strong.expect
+++ b/pkg/front_end/testcases/general/interface_conflict.dart.strong.expect
@@ -6,10 +6,10 @@
 // Try adding a declaration of 'n' to 'C'.
 // abstract class C implements A, B {}
 //                ^
-// pkg/front_end/testcases/general/interface_conflict.dart:6:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/interface_conflict.dart:6:11: Context: This is one of the overridden members.
 //   int get n => 1;
 //           ^
-// pkg/front_end/testcases/general/interface_conflict.dart:10:14: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/interface_conflict.dart:10:14: Context: This is one of the overridden members.
 //   double get n => 2.0;
 //              ^
 //
diff --git a/pkg/front_end/testcases/general/interface_conflict.dart.strong.transformed.expect b/pkg/front_end/testcases/general/interface_conflict.dart.strong.transformed.expect
index 98445c0..35d40fb 100644
--- a/pkg/front_end/testcases/general/interface_conflict.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/interface_conflict.dart.strong.transformed.expect
@@ -6,10 +6,10 @@
 // Try adding a declaration of 'n' to 'C'.
 // abstract class C implements A, B {}
 //                ^
-// pkg/front_end/testcases/general/interface_conflict.dart:6:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/interface_conflict.dart:6:11: Context: This is one of the overridden members.
 //   int get n => 1;
 //           ^
-// pkg/front_end/testcases/general/interface_conflict.dart:10:14: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/interface_conflict.dart:10:14: Context: This is one of the overridden members.
 //   double get n => 2.0;
 //              ^
 //
diff --git a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.outline.expect b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.outline.expect
index b7df28f..e77f24e 100644
--- a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.outline.expect
@@ -6,10 +6,10 @@
 // Try adding a declaration of 'n' to 'B with C'.
 // mixin M on B, C {}
 //       ^^^^^^
-// pkg/front_end/testcases/general/mixin_interface_conflict.dart:6:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/mixin_interface_conflict.dart:6:11: Context: This is one of the overridden members.
 //   int get n => 1;
 //           ^
-// pkg/front_end/testcases/general/mixin_interface_conflict.dart:10:14: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/mixin_interface_conflict.dart:10:14: Context: This is one of the overridden members.
 //   double get n => 2.0;
 //              ^
 //
diff --git a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.strong.expect b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.strong.expect
index 66fe78e..194538f 100644
--- a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.strong.expect
+++ b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.strong.expect
@@ -6,10 +6,10 @@
 // Try adding a declaration of 'n' to 'B with C'.
 // mixin M on B, C {}
 //       ^^^^^^
-// pkg/front_end/testcases/general/mixin_interface_conflict.dart:6:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/mixin_interface_conflict.dart:6:11: Context: This is one of the overridden members.
 //   int get n => 1;
 //           ^
-// pkg/front_end/testcases/general/mixin_interface_conflict.dart:10:14: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/mixin_interface_conflict.dart:10:14: Context: This is one of the overridden members.
 //   double get n => 2.0;
 //              ^
 //
diff --git a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.strong.transformed.expect b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.strong.transformed.expect
index 66fe78e..194538f 100644
--- a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.strong.transformed.expect
@@ -6,10 +6,10 @@
 // Try adding a declaration of 'n' to 'B with C'.
 // mixin M on B, C {}
 //       ^^^^^^
-// pkg/front_end/testcases/general/mixin_interface_conflict.dart:6:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/mixin_interface_conflict.dart:6:11: Context: This is one of the overridden members.
 //   int get n => 1;
 //           ^
-// pkg/front_end/testcases/general/mixin_interface_conflict.dart:10:14: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/mixin_interface_conflict.dart:10:14: Context: This is one of the overridden members.
 //   double get n => 2.0;
 //              ^
 //
diff --git a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart
index a943e3a..8035f1d 100644
--- a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart
+++ b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart
@@ -51,10 +51,8 @@
 
   set setterFromSetter(value);
 
-  // TODO(johnniwinther): This should be an error.
   get getterFromSetter;
 
-  // TODO(johnniwinther): This should be an error.
   set setterFromGetter(value);
 
   get getterFromGetterWithSetterConflict;
@@ -81,10 +79,8 @@
 
   set setterFromSetter(value);
 
-  // TODO(johnniwinther): This should be an error.
   get getterFromSetter;
 
-  // TODO(johnniwinther): This should be an error.
   set setterFromGetter(value);
 
   get getterFromGetterWithSetterConflict;
diff --git a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.outline.expect b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.outline.expect
index 8bdc4d8..c4a5102 100644
--- a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.outline.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.outline.expect
@@ -2,50 +2,94 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:50:7: Error: Can't infer a return type for 'getterFromGetter' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:50:7: Error: Can't infer a return type for 'getterFromGetter' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get getterFromGetter;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:6:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:6:11: Context: This is one of the overridden members.
 //   num get getterFromGetter;
 //           ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:22:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:22:11: Context: This is one of the overridden members.
 //   int get getterFromGetter;
 //           ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:52:24: Error: Can't infer a type for 'value' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:54:7: Error: Can't infer a return type for 'getterFromSetter' as some of the overridden members have different types.
+// Try adding an explicit type.
+//   get getterFromSetter;
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:10:7: Context: This is one of the overridden members.
+//   set getterFromSetter(num value);
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:32:7: Context: This is one of the overridden members.
+//   set getterFromSetter(int value);
+//       ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:52:24: Error: Can't infer a type for 'value' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   set setterFromSetter(value);
 //                        ^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:8:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:8:7: Context: This is one of the overridden members.
 //   set setterFromSetter(num value);
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:24:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:24:7: Context: This is one of the overridden members.
 //   set setterFromSetter(int value);
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:80:7: Error: Can't infer a return type for 'getterFromGetter' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:56:24: Error: Can't infer a type for 'value' as some of the overridden members have different types.
+// Try adding an explicit type.
+//   set setterFromGetter(value);
+//                        ^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:12:11: Context: This is one of the overridden members.
+//   num get setterFromGetter;
+//           ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:26:11: Context: This is one of the overridden members.
+//   int get setterFromGetter;
+//           ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:78:7: Error: Can't infer a return type for 'getterFromGetter' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get getterFromGetter;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:6:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:6:11: Context: This is one of the overridden members.
 //   num get getterFromGetter;
 //           ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:22:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:22:11: Context: This is one of the overridden members.
 //   int get getterFromGetter;
 //           ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:82:24: Error: Can't infer a type for 'value' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:82:7: Error: Can't infer a return type for 'getterFromSetter' as some of the overridden members have different types.
+// Try adding an explicit type.
+//   get getterFromSetter;
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:10:7: Context: This is one of the overridden members.
+//   set getterFromSetter(num value);
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:32:7: Context: This is one of the overridden members.
+//   set getterFromSetter(int value);
+//       ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:80:24: Error: Can't infer a type for 'value' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   set setterFromSetter(value);
 //                        ^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:8:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:8:7: Context: This is one of the overridden members.
 //   set setterFromSetter(num value);
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:24:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:24:7: Context: This is one of the overridden members.
 //   set setterFromSetter(int value);
 //       ^^^^^^^^^^^^^^^^
 //
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:84:24: Error: Can't infer a type for 'value' as some of the overridden members have different types.
+// Try adding an explicit type.
+//   set setterFromGetter(value);
+//                        ^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:12:11: Context: This is one of the overridden members.
+//   num get setterFromGetter;
+//           ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:26:11: Context: This is one of the overridden members.
+//   int get setterFromGetter;
+//           ^^^^^^^^^^^^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -106,8 +150,8 @@
     ;
   abstract get getterFromGetter() → invalid-type;
   abstract set setterFromSetter(invalid-type value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::num* value) → void;
+  abstract get getterFromSetter() → invalid-type;
+  abstract set setterFromGetter(invalid-type value) → void;
   abstract get getterFromGetterWithSetterConflict() → core::num*;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
   abstract forwarding-stub get setterFromGetter() → core::int*;
@@ -138,8 +182,8 @@
     ;
   abstract get getterFromGetter() → invalid-type;
   abstract set setterFromSetter(invalid-type value) → void;
-  abstract get getterFromSetter() → dynamic;
-  abstract set setterFromGetter(dynamic value) → void;
+  abstract get getterFromSetter() → invalid-type;
+  abstract set setterFromGetter(invalid-type value) → void;
   abstract get getterFromGetterWithSetterConflict() → core::num*;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
   abstract forwarding-stub get setterFromGetter() → core::int*;
diff --git a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.expect b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.expect
index 2e2d511..81942f2 100644
--- a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.expect
@@ -2,50 +2,94 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:50:7: Error: Can't infer a return type for 'getterFromGetter' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:50:7: Error: Can't infer a return type for 'getterFromGetter' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get getterFromGetter;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:6:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:6:11: Context: This is one of the overridden members.
 //   num get getterFromGetter;
 //           ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:22:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:22:11: Context: This is one of the overridden members.
 //   int get getterFromGetter;
 //           ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:52:24: Error: Can't infer a type for 'value' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:54:7: Error: Can't infer a return type for 'getterFromSetter' as some of the overridden members have different types.
+// Try adding an explicit type.
+//   get getterFromSetter;
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:10:7: Context: This is one of the overridden members.
+//   set getterFromSetter(num value);
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:32:7: Context: This is one of the overridden members.
+//   set getterFromSetter(int value);
+//       ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:52:24: Error: Can't infer a type for 'value' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   set setterFromSetter(value);
 //                        ^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:8:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:8:7: Context: This is one of the overridden members.
 //   set setterFromSetter(num value);
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:24:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:24:7: Context: This is one of the overridden members.
 //   set setterFromSetter(int value);
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:80:7: Error: Can't infer a return type for 'getterFromGetter' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:56:24: Error: Can't infer a type for 'value' as some of the overridden members have different types.
+// Try adding an explicit type.
+//   set setterFromGetter(value);
+//                        ^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:12:11: Context: This is one of the overridden members.
+//   num get setterFromGetter;
+//           ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:26:11: Context: This is one of the overridden members.
+//   int get setterFromGetter;
+//           ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:78:7: Error: Can't infer a return type for 'getterFromGetter' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get getterFromGetter;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:6:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:6:11: Context: This is one of the overridden members.
 //   num get getterFromGetter;
 //           ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:22:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:22:11: Context: This is one of the overridden members.
 //   int get getterFromGetter;
 //           ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:82:24: Error: Can't infer a type for 'value' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:82:7: Error: Can't infer a return type for 'getterFromSetter' as some of the overridden members have different types.
+// Try adding an explicit type.
+//   get getterFromSetter;
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:10:7: Context: This is one of the overridden members.
+//   set getterFromSetter(num value);
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:32:7: Context: This is one of the overridden members.
+//   set getterFromSetter(int value);
+//       ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:80:24: Error: Can't infer a type for 'value' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   set setterFromSetter(value);
 //                        ^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:8:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:8:7: Context: This is one of the overridden members.
 //   set setterFromSetter(num value);
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:24:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:24:7: Context: This is one of the overridden members.
 //   set setterFromSetter(int value);
 //       ^^^^^^^^^^^^^^^^
 //
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:84:24: Error: Can't infer a type for 'value' as some of the overridden members have different types.
+// Try adding an explicit type.
+//   set setterFromGetter(value);
+//                        ^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:12:11: Context: This is one of the overridden members.
+//   num get setterFromGetter;
+//           ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:26:11: Context: This is one of the overridden members.
+//   int get setterFromGetter;
+//           ^^^^^^^^^^^^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -110,8 +154,8 @@
     ;
   abstract get getterFromGetter() → invalid-type;
   abstract set setterFromSetter(invalid-type value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::num* value) → void;
+  abstract get getterFromSetter() → invalid-type;
+  abstract set setterFromGetter(invalid-type value) → void;
   abstract get getterFromGetterWithSetterConflict() → core::num*;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
   abstract forwarding-stub get setterFromGetter() → core::int*;
@@ -144,8 +188,8 @@
     ;
   abstract get getterFromGetter() → invalid-type;
   abstract set setterFromSetter(invalid-type value) → void;
-  abstract get getterFromSetter() → dynamic;
-  abstract set setterFromGetter(dynamic value) → void;
+  abstract get getterFromSetter() → invalid-type;
+  abstract set setterFromGetter(invalid-type value) → void;
   abstract get getterFromGetterWithSetterConflict() → core::num*;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
   abstract forwarding-stub get setterFromGetter() → core::int*;
diff --git a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.transformed.expect b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.transformed.expect
index 2e2d511..81942f2 100644
--- a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.transformed.expect
@@ -2,50 +2,94 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:50:7: Error: Can't infer a return type for 'getterFromGetter' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:50:7: Error: Can't infer a return type for 'getterFromGetter' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get getterFromGetter;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:6:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:6:11: Context: This is one of the overridden members.
 //   num get getterFromGetter;
 //           ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:22:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:22:11: Context: This is one of the overridden members.
 //   int get getterFromGetter;
 //           ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:52:24: Error: Can't infer a type for 'value' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:54:7: Error: Can't infer a return type for 'getterFromSetter' as some of the overridden members have different types.
+// Try adding an explicit type.
+//   get getterFromSetter;
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:10:7: Context: This is one of the overridden members.
+//   set getterFromSetter(num value);
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:32:7: Context: This is one of the overridden members.
+//   set getterFromSetter(int value);
+//       ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:52:24: Error: Can't infer a type for 'value' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   set setterFromSetter(value);
 //                        ^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:8:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:8:7: Context: This is one of the overridden members.
 //   set setterFromSetter(num value);
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:24:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:24:7: Context: This is one of the overridden members.
 //   set setterFromSetter(int value);
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:80:7: Error: Can't infer a return type for 'getterFromGetter' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:56:24: Error: Can't infer a type for 'value' as some of the overridden members have different types.
+// Try adding an explicit type.
+//   set setterFromGetter(value);
+//                        ^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:12:11: Context: This is one of the overridden members.
+//   num get setterFromGetter;
+//           ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:26:11: Context: This is one of the overridden members.
+//   int get setterFromGetter;
+//           ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:78:7: Error: Can't infer a return type for 'getterFromGetter' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get getterFromGetter;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:6:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:6:11: Context: This is one of the overridden members.
 //   num get getterFromGetter;
 //           ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:22:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:22:11: Context: This is one of the overridden members.
 //   int get getterFromGetter;
 //           ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:82:24: Error: Can't infer a type for 'value' as some of the inherited members have different types.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:82:7: Error: Can't infer a return type for 'getterFromSetter' as some of the overridden members have different types.
+// Try adding an explicit type.
+//   get getterFromSetter;
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:10:7: Context: This is one of the overridden members.
+//   set getterFromSetter(num value);
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:32:7: Context: This is one of the overridden members.
+//   set getterFromSetter(int value);
+//       ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:80:24: Error: Can't infer a type for 'value' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   set setterFromSetter(value);
 //                        ^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:8:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:8:7: Context: This is one of the overridden members.
 //   set setterFromSetter(num value);
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:24:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:24:7: Context: This is one of the overridden members.
 //   set setterFromSetter(int value);
 //       ^^^^^^^^^^^^^^^^
 //
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:84:24: Error: Can't infer a type for 'value' as some of the overridden members have different types.
+// Try adding an explicit type.
+//   set setterFromGetter(value);
+//                        ^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:12:11: Context: This is one of the overridden members.
+//   num get setterFromGetter;
+//           ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:26:11: Context: This is one of the overridden members.
+//   int get setterFromGetter;
+//           ^^^^^^^^^^^^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -110,8 +154,8 @@
     ;
   abstract get getterFromGetter() → invalid-type;
   abstract set setterFromSetter(invalid-type value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::num* value) → void;
+  abstract get getterFromSetter() → invalid-type;
+  abstract set setterFromGetter(invalid-type value) → void;
   abstract get getterFromGetterWithSetterConflict() → core::num*;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
   abstract forwarding-stub get setterFromGetter() → core::int*;
@@ -144,8 +188,8 @@
     ;
   abstract get getterFromGetter() → invalid-type;
   abstract set setterFromSetter(invalid-type value) → void;
-  abstract get getterFromSetter() → dynamic;
-  abstract set setterFromGetter(dynamic value) → void;
+  abstract get getterFromSetter() → invalid-type;
+  abstract set setterFromGetter(invalid-type value) → void;
   abstract get getterFromGetterWithSetterConflict() → core::num*;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
   abstract forwarding-stub get setterFromGetter() → core::int*;
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.outline.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.outline.expect
index 85c8784..bc603fc 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.outline.expect
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.outline.expect
@@ -18,6 +18,46 @@
 // class A<X extends int> {}
 //         ^
 //
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:12:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// extension E<X extends A<num>> // Error.
+//             ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num> fieldOfE; // Error.
+//                 ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:15:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num> fooOfE() => null; // Error.
+//                ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void barOfE(A<num> a) {} // Error.
+//                      ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void bazOfE<Y extends A<num>>() {} // Error.
+//               ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.strong.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.strong.expect
index 87bc7b9..fa633e1b 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.strong.expect
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.strong.expect
@@ -18,6 +18,46 @@
 // class A<X extends int> {}
 //         ^
 //
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:12:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// extension E<X extends A<num>> // Error.
+//             ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num> fieldOfE; // Error.
+//                 ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:15:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num> fooOfE() => null; // Error.
+//                ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void barOfE(A<num> a) {} // Error.
+//                      ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void bazOfE<Y extends A<num>>() {} // Error.
+//               ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.strong.transformed.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.strong.transformed.expect
index 87bc7b9..fa633e1b 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.strong.transformed.expect
@@ -18,6 +18,46 @@
 // class A<X extends int> {}
 //         ^
 //
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:12:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// extension E<X extends A<num>> // Error.
+//             ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num> fieldOfE; // Error.
+//                 ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:15:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num> fooOfE() => null; // Error.
+//                ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void barOfE(A<num> a) {} // Error.
+//                      ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void bazOfE<Y extends A<num>>() {} // Error.
+//               ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/inference/conflicting_fields.dart.outline.expect b/pkg/front_end/testcases/inference/conflicting_fields.dart.outline.expect
index 2f1de22..39b351a 100644
--- a/pkg/front_end/testcases/inference/conflicting_fields.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart.outline.expect
@@ -2,47 +2,47 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/conflicting_fields.dart:18:7: Error: Can't infer a return type for 'field1' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:18:7: Error: Can't infer a return type for 'field1' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get field1 => null;
 //       ^^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Context: This is one of the overridden members.
 //   dynamic field1;
 //           ^^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is one of the overridden members.
 //   int field1;
 //       ^^^^^^
 //
-// pkg/front_end/testcases/inference/conflicting_fields.dart:20:14: Error: Can't infer a type for 'value' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:20:14: Error: Can't infer a type for 'value' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   set field1(value) {}
 //              ^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Context: This is one of the overridden members.
 //   dynamic field1;
 //           ^^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is one of the overridden members.
 //   int field1;
 //       ^^^^^^
 //
-// pkg/front_end/testcases/inference/conflicting_fields.dart:19:7: Error: Can't infer a return type for 'field2' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:19:7: Error: Can't infer a return type for 'field2' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get field2 => null;
 //       ^^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is one of the overridden members.
 //   int field2;
 //       ^^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:14:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:14:11: Context: This is one of the overridden members.
 //   dynamic field2;
 //           ^^^^^^
 //
-// pkg/front_end/testcases/inference/conflicting_fields.dart:21:14: Error: Can't infer a type for 'value' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:21:14: Error: Can't infer a type for 'value' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   set field2(value) {}
 //              ^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is one of the overridden members.
 //   int field2;
 //       ^^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:14:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:14:11: Context: This is one of the overridden members.
 //   dynamic field2;
 //           ^^^^^^
 //
diff --git a/pkg/front_end/testcases/inference/conflicting_fields.dart.strong.expect b/pkg/front_end/testcases/inference/conflicting_fields.dart.strong.expect
index 2d16975..537432c 100644
--- a/pkg/front_end/testcases/inference/conflicting_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart.strong.expect
@@ -2,47 +2,47 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/conflicting_fields.dart:18:7: Error: Can't infer a return type for 'field1' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:18:7: Error: Can't infer a return type for 'field1' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get field1 => null;
 //       ^^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Context: This is one of the overridden members.
 //   dynamic field1;
 //           ^^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is one of the overridden members.
 //   int field1;
 //       ^^^^^^
 //
-// pkg/front_end/testcases/inference/conflicting_fields.dart:20:14: Error: Can't infer a type for 'value' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:20:14: Error: Can't infer a type for 'value' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   set field1(value) {}
 //              ^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Context: This is one of the overridden members.
 //   dynamic field1;
 //           ^^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is one of the overridden members.
 //   int field1;
 //       ^^^^^^
 //
-// pkg/front_end/testcases/inference/conflicting_fields.dart:19:7: Error: Can't infer a return type for 'field2' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:19:7: Error: Can't infer a return type for 'field2' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get field2 => null;
 //       ^^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is one of the overridden members.
 //   int field2;
 //       ^^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:14:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:14:11: Context: This is one of the overridden members.
 //   dynamic field2;
 //           ^^^^^^
 //
-// pkg/front_end/testcases/inference/conflicting_fields.dart:21:14: Error: Can't infer a type for 'value' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:21:14: Error: Can't infer a type for 'value' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   set field2(value) {}
 //              ^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is one of the overridden members.
 //   int field2;
 //       ^^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:14:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:14:11: Context: This is one of the overridden members.
 //   dynamic field2;
 //           ^^^^^^
 //
diff --git a/pkg/front_end/testcases/inference/conflicting_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/conflicting_fields.dart.strong.transformed.expect
index 2d16975..537432c 100644
--- a/pkg/front_end/testcases/inference/conflicting_fields.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart.strong.transformed.expect
@@ -2,47 +2,47 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/conflicting_fields.dart:18:7: Error: Can't infer a return type for 'field1' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:18:7: Error: Can't infer a return type for 'field1' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get field1 => null;
 //       ^^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Context: This is one of the overridden members.
 //   dynamic field1;
 //           ^^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is one of the overridden members.
 //   int field1;
 //       ^^^^^^
 //
-// pkg/front_end/testcases/inference/conflicting_fields.dart:20:14: Error: Can't infer a type for 'value' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:20:14: Error: Can't infer a type for 'value' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   set field1(value) {}
 //              ^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Context: This is one of the overridden members.
 //   dynamic field1;
 //           ^^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is one of the overridden members.
 //   int field1;
 //       ^^^^^^
 //
-// pkg/front_end/testcases/inference/conflicting_fields.dart:19:7: Error: Can't infer a return type for 'field2' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:19:7: Error: Can't infer a return type for 'field2' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get field2 => null;
 //       ^^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is one of the overridden members.
 //   int field2;
 //       ^^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:14:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:14:11: Context: This is one of the overridden members.
 //   dynamic field2;
 //           ^^^^^^
 //
-// pkg/front_end/testcases/inference/conflicting_fields.dart:21:14: Error: Can't infer a type for 'value' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:21:14: Error: Can't infer a type for 'value' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   set field2(value) {}
 //              ^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is one of the overridden members.
 //   int field2;
 //       ^^^^^^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:14:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicting_fields.dart:14:11: Context: This is one of the overridden members.
 //   dynamic field2;
 //           ^^^^^^
 //
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.outline.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.outline.expect
index e5c3a99..9a21f6c 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.outline.expect
@@ -2,25 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:7: Error: Can't infer a return type for 'a' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get a => null;
 //       ^
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the overridden members.
 //   final I1 a = null;
 //            ^
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the overridden members.
 //   final I2 a = null;
 //            ^
 //
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:30:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:30:7: Error: Can't infer a return type for 'a' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get a => null;
 //       ^
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the overridden members.
 //   final I2 a = null;
 //            ^
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the overridden members.
 //   final I1 a = null;
 //            ^
 //
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
index f3a5049..28c663f 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
@@ -2,25 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:7: Error: Can't infer a return type for 'a' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get a => null;
 //       ^
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the overridden members.
 //   final I1 a = null;
 //            ^
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the overridden members.
 //   final I2 a = null;
 //            ^
 //
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:30:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:30:7: Error: Can't infer a return type for 'a' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get a => null;
 //       ^
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the overridden members.
 //   final I2 a = null;
 //            ^
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the overridden members.
 //   final I1 a = null;
 //            ^
 //
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.transformed.expect
index f3a5049..28c663f 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.transformed.expect
@@ -2,25 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:7: Error: Can't infer a return type for 'a' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get a => null;
 //       ^
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the overridden members.
 //   final I1 a = null;
 //            ^
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the overridden members.
 //   final I2 a = null;
 //            ^
 //
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:30:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:30:7: Error: Can't infer a return type for 'a' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get a => null;
 //       ^
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the overridden members.
 //   final I2 a = null;
 //            ^
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the overridden members.
 //   final I1 a = null;
 //            ^
 //
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.outline.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.outline.expect
index ddd90c3..43ee8e9 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.outline.expect
@@ -2,14 +2,14 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:7: Error: Can't infer a return type for 'a' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get a => null;
 //       ^
-// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:22:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:22:12: Context: This is one of the overridden members.
 //   final I1 a = null;
 //            ^
-// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:26:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:26:12: Context: This is one of the overridden members.
 //   final I2 a = null;
 //            ^
 //
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
index 3214028..d3047a9 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
@@ -2,14 +2,14 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:7: Error: Can't infer a return type for 'a' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get a => null;
 //       ^
-// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:22:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:22:12: Context: This is one of the overridden members.
 //   final I1 a = null;
 //            ^
-// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:26:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:26:12: Context: This is one of the overridden members.
 //   final I2 a = null;
 //            ^
 //
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.transformed.expect
index 3214028..d3047a9 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.transformed.expect
@@ -2,14 +2,14 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:7: Error: Can't infer a return type for 'a' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   get a => null;
 //       ^
-// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:22:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:22:12: Context: This is one of the overridden members.
 //   final I1 a = null;
 //            ^
-// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:26:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:26:12: Context: This is one of the overridden members.
 //   final I2 a = null;
 //            ^
 //
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.outline.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.outline.expect
index 14cea21..b735a9b 100644
--- a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.outline.expect
@@ -2,69 +2,69 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:3: Error: Can't infer a return type for 'f' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:3: Error: Can't infer a return type for 'f' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   f(x, {y}) {}
 //   ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the overridden members.
 //   A f(A x, {A y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the overridden members.
 //   I f(I x, {I y}) {}
 //     ^
 //
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:5: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:5: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   f(x, {y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the overridden members.
 //   A f(A x, {A y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the overridden members.
 //   I f(I x, {I y}) {}
 //     ^
 //
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:9: Error: Can't infer a type for 'y' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:9: Error: Can't infer a type for 'y' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   f(x, {y}) {}
 //         ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the overridden members.
 //   A f(A x, {A y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the overridden members.
 //   I f(I x, {I y}) {}
 //     ^
 //
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:5: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:5: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   g(x, {y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the overridden members.
 //   A g(A x, {A y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the overridden members.
 //   A g(I x, {I y}) {}
 //     ^
 //
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:9: Error: Can't infer a type for 'y' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:9: Error: Can't infer a type for 'y' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   g(x, {y}) {}
 //         ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the overridden members.
 //   A g(A x, {A y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the overridden members.
 //   A g(I x, {I y}) {}
 //     ^
 //
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:18:9: Error: Can't infer a type for 'y' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:18:9: Error: Can't infer a type for 'y' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   h(x, {y}) {}
 //         ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:12:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:12:5: Context: This is one of the overridden members.
 //   A h(A x, {A y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:24:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:24:5: Context: This is one of the overridden members.
 //   A h(A x, {I y}) {}
 //     ^
 //
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.expect
index 3a01350..dedc39b 100644
--- a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.expect
@@ -2,69 +2,69 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:3: Error: Can't infer a return type for 'f' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:3: Error: Can't infer a return type for 'f' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   f(x, {y}) {}
 //   ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the overridden members.
 //   A f(A x, {A y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the overridden members.
 //   I f(I x, {I y}) {}
 //     ^
 //
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:5: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:5: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   f(x, {y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the overridden members.
 //   A f(A x, {A y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the overridden members.
 //   I f(I x, {I y}) {}
 //     ^
 //
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:9: Error: Can't infer a type for 'y' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:9: Error: Can't infer a type for 'y' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   f(x, {y}) {}
 //         ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the overridden members.
 //   A f(A x, {A y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the overridden members.
 //   I f(I x, {I y}) {}
 //     ^
 //
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:5: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:5: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   g(x, {y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the overridden members.
 //   A g(A x, {A y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the overridden members.
 //   A g(I x, {I y}) {}
 //     ^
 //
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:9: Error: Can't infer a type for 'y' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:9: Error: Can't infer a type for 'y' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   g(x, {y}) {}
 //         ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the overridden members.
 //   A g(A x, {A y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the overridden members.
 //   A g(I x, {I y}) {}
 //     ^
 //
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:18:9: Error: Can't infer a type for 'y' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:18:9: Error: Can't infer a type for 'y' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   h(x, {y}) {}
 //         ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:12:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:12:5: Context: This is one of the overridden members.
 //   A h(A x, {A y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:24:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:24:5: Context: This is one of the overridden members.
 //   A h(A x, {I y}) {}
 //     ^
 //
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.transformed.expect
index 3a01350..dedc39b 100644
--- a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.transformed.expect
@@ -2,69 +2,69 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:3: Error: Can't infer a return type for 'f' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:3: Error: Can't infer a return type for 'f' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   f(x, {y}) {}
 //   ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the overridden members.
 //   A f(A x, {A y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the overridden members.
 //   I f(I x, {I y}) {}
 //     ^
 //
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:5: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:5: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   f(x, {y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the overridden members.
 //   A f(A x, {A y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the overridden members.
 //   I f(I x, {I y}) {}
 //     ^
 //
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:9: Error: Can't infer a type for 'y' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:9: Error: Can't infer a type for 'y' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   f(x, {y}) {}
 //         ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the overridden members.
 //   A f(A x, {A y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the overridden members.
 //   I f(I x, {I y}) {}
 //     ^
 //
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:5: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:5: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   g(x, {y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the overridden members.
 //   A g(A x, {A y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the overridden members.
 //   A g(I x, {I y}) {}
 //     ^
 //
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:9: Error: Can't infer a type for 'y' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:9: Error: Can't infer a type for 'y' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   g(x, {y}) {}
 //         ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the overridden members.
 //   A g(A x, {A y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the overridden members.
 //   A g(I x, {I y}) {}
 //     ^
 //
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:18:9: Error: Can't infer a type for 'y' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:18:9: Error: Can't infer a type for 'y' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   h(x, {y}) {}
 //         ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:12:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:12:5: Context: This is one of the overridden members.
 //   A h(A x, {A y}) {}
 //     ^
-// pkg/front_end/testcases/inference/inconsistent_overrides.dart:24:5: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:24:5: Context: This is one of the overridden members.
 //   A h(A x, {I y}) {}
 //     ^
 //
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.outline.expect
index f6d6dda..28cd597 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.outline.expect
@@ -2,36 +2,36 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the overridden members.
 //   int get x;
 //           ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is one of the overridden members.
 //   num get x;
 //           ^
 //
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the overridden members.
 //   int get x;
 //           ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the overridden members.
 //   double get x;
 //              ^
 //
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is one of the overridden members.
 //   num get x;
 //           ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the overridden members.
 //   double get x;
 //              ^
 //
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
index 5b91cfd..044f2fd 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
@@ -2,36 +2,36 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the overridden members.
 //   int get x;
 //           ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is one of the overridden members.
 //   num get x;
 //           ^
 //
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the overridden members.
 //   int get x;
 //           ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the overridden members.
 //   double get x;
 //              ^
 //
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is one of the overridden members.
 //   num get x;
 //           ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the overridden members.
 //   double get x;
 //              ^
 //
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.transformed.expect
index 5b91cfd..044f2fd 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.transformed.expect
@@ -2,36 +2,36 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the overridden members.
 //   int get x;
 //           ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is one of the overridden members.
 //   num get x;
 //           ^
 //
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the overridden members.
 //   int get x;
 //           ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the overridden members.
 //   double get x;
 //              ^
 //
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is one of the overridden members.
 //   num get x;
 //           ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the overridden members.
 //   double get x;
 //              ^
 //
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.outline.expect
index 1385117..0ebb072 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.outline.expect
@@ -2,14 +2,14 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:16:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:16:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Context: This is one of the overridden members.
 //   int get x;
 //           ^
-// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:10:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:10:12: Context: This is one of the overridden members.
 //   void set x(double value);
 //            ^
 //
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect
index c0bc8d0..8ae0ce1 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect
@@ -2,14 +2,14 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:16:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:16:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Context: This is one of the overridden members.
 //   int get x;
 //           ^
-// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:10:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:10:12: Context: This is one of the overridden members.
 //   void set x(double value);
 //            ^
 //
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.transformed.expect
index c0bc8d0..8ae0ce1 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.transformed.expect
@@ -2,14 +2,14 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:16:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:16:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Context: This is one of the overridden members.
 //   int get x;
 //           ^
-// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:10:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:10:12: Context: This is one of the overridden members.
 //   void set x(double value);
 //            ^
 //
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.outline.expect
index bd38552..d9e8e4e 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.outline.expect
@@ -2,25 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:16:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:16:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:6:9: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:6:9: Context: This is one of the overridden members.
 //   A get x;
 //         ^
-// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:7:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:7:12: Context: This is one of the overridden members.
 //   void set x(B value);
 //            ^
 //
-// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:17:7: Error: Can't infer a type for 'y' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:17:7: Error: Can't infer a type for 'y' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var y;
 //       ^
-// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:9:9: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:9:9: Context: This is one of the overridden members.
 //   B get y;
 //         ^
-// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:10:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:10:12: Context: This is one of the overridden members.
 //   void set y(A value);
 //            ^
 //
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.strong.expect
index 8fae470..3bfa8c0 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.strong.expect
@@ -2,25 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:16:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:16:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:6:9: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:6:9: Context: This is one of the overridden members.
 //   A get x;
 //         ^
-// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:7:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:7:12: Context: This is one of the overridden members.
 //   void set x(B value);
 //            ^
 //
-// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:17:7: Error: Can't infer a type for 'y' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:17:7: Error: Can't infer a type for 'y' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var y;
 //       ^
-// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:9:9: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:9:9: Context: This is one of the overridden members.
 //   B get y;
 //         ^
-// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:10:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:10:12: Context: This is one of the overridden members.
 //   void set y(A value);
 //            ^
 //
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.strong.transformed.expect
index 8fae470..3bfa8c0 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.strong.transformed.expect
@@ -2,25 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:16:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:16:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:6:9: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:6:9: Context: This is one of the overridden members.
 //   A get x;
 //         ^
-// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:7:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:7:12: Context: This is one of the overridden members.
 //   void set x(B value);
 //            ^
 //
-// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:17:7: Error: Can't infer a type for 'y' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:17:7: Error: Can't infer a type for 'y' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var y;
 //       ^
-// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:9:9: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:9:9: Context: This is one of the overridden members.
 //   B get y;
 //         ^
-// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:10:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:10:12: Context: This is one of the overridden members.
 //   void set y(A value);
 //            ^
 //
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.outline.expect
index e02792c..c38c16a 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.outline.expect
@@ -2,14 +2,14 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:19:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:19:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:13:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:13:11: Context: This is one of the overridden members.
 //   int get x;
 //           ^
-// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:9:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:9:12: Context: This is one of the overridden members.
 //   void set x(num value);
 //            ^
 //
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect
index c89eeb0..37df60c 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect
@@ -2,14 +2,14 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:19:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:19:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:13:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:13:11: Context: This is one of the overridden members.
 //   int get x;
 //           ^
-// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:9:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:9:12: Context: This is one of the overridden members.
 //   void set x(num value);
 //            ^
 //
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.transformed.expect
index c89eeb0..37df60c 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.transformed.expect
@@ -2,14 +2,14 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:19:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:19:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:13:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:13:11: Context: This is one of the overridden members.
 //   int get x;
 //           ^
-// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:9:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:9:12: Context: This is one of the overridden members.
 //   void set x(num value);
 //            ^
 //
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.outline.expect
index 25b44a1..0d41588 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.outline.expect
@@ -2,14 +2,14 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:19:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:19:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:9:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:9:11: Context: This is one of the overridden members.
 //   num get x;
 //           ^
-// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:13:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:13:12: Context: This is one of the overridden members.
 //   void set x(int value);
 //            ^
 //
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.expect
index bd65763..ae57d36 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.expect
@@ -2,14 +2,14 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:19:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:19:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:9:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:9:11: Context: This is one of the overridden members.
 //   num get x;
 //           ^
-// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:13:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:13:12: Context: This is one of the overridden members.
 //   void set x(int value);
 //            ^
 //
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.transformed.expect
index bd65763..ae57d36 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.transformed.expect
@@ -2,14 +2,14 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:19:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
+// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:19:7: Error: Can't infer a type for 'x' as some of the overridden members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:9:11: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:9:11: Context: This is one of the overridden members.
 //   num get x;
 //           ^
-// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:13:12: Context: This is one of the inherited members.
+// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:13:12: Context: This is one of the overridden members.
 //   void set x(int value);
 //            ^
 //
diff --git a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart
index 3fd4ae8..b7305d8 100644
--- a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart
+++ b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart
@@ -23,17 +23,17 @@
 
   abstract late int lateInstanceField;
 
-  external abstract int externalInstanceField;
+  external abstract int externalInstanceField1;
 
-  external abstract final int externalFinalInstanceField;
+  external abstract final int externalFinalInstanceField1;
 
-  external abstract covariant num externalCovariantInstanceField;
+  external abstract covariant num externalCovariantInstanceField1;
 
-  abstract external int externalInstanceField;
+  abstract external int externalInstanceField2;
 
-  abstract external final int externalFinalInstanceField;
+  abstract external final int externalFinalInstanceField2;
 
-  abstract external covariant num externalCovariantInstanceField;
+  abstract external covariant num externalCovariantInstanceField2;
 
   external abstract late int externalLateInstanceField;
 }
@@ -54,8 +54,8 @@
 extension Extension on A {
   abstract int extensionInstanceField;
   abstract final int finalExtensionInstanceField;
-  abstract static int extensionStaticField;
-  abstract static final int finalExtensionStaticField;
+  abstract static int extensionStaticField = 0;
+  abstract static final int finalExtensionStaticField = 0;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.outline.expect b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.outline.expect
index 6bc5231..799f3a0 100644
--- a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.outline.expect
@@ -34,55 +34,34 @@
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:26:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   external abstract int externalInstanceField;
+//   external abstract int externalInstanceField1;
 //            ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:28:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   external abstract final int externalFinalInstanceField;
+//   external abstract final int externalFinalInstanceField1;
 //            ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:30:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   external abstract covariant num externalCovariantInstanceField;
+//   external abstract covariant num externalCovariantInstanceField1;
 //            ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:32:3: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   abstract external int externalInstanceField;
+//   abstract external int externalInstanceField2;
 //   ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:32:25: Error: 'externalInstanceField' is already declared in this scope.
-//   abstract external int externalInstanceField;
-//                         ^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:26:25: Context: Previous declaration of 'externalInstanceField'.
-//   external abstract int externalInstanceField;
-//                         ^^^^^^^^^^^^^^^^^^^^^
-//
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:34:3: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   abstract external final int externalFinalInstanceField;
+//   abstract external final int externalFinalInstanceField2;
 //   ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:34:31: Error: 'externalFinalInstanceField' is already declared in this scope.
-//   abstract external final int externalFinalInstanceField;
-//                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:28:31: Context: Previous declaration of 'externalFinalInstanceField'.
-//   external abstract final int externalFinalInstanceField;
-//                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:36:3: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   abstract external covariant num externalCovariantInstanceField;
+//   abstract external covariant num externalCovariantInstanceField2;
 //   ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:36:35: Error: 'externalCovariantInstanceField' is already declared in this scope.
-//   abstract external covariant num externalCovariantInstanceField;
-//                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:30:35: Context: Previous declaration of 'externalCovariantInstanceField'.
-//   external abstract covariant num externalCovariantInstanceField;
-//                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:38:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
 //   external abstract late int externalLateInstanceField;
@@ -140,22 +119,22 @@
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:57:23: Error: Extension fields can't be declared 'abstract'.
 // Try removing the 'abstract' keyword.
-//   abstract static int extensionStaticField;
+//   abstract static int extensionStaticField = 0;
 //                       ^^^^^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:57:3: Error: Static fields can't be declared 'abstract'.
 // Try removing the 'abstract' or 'static' keyword.
-//   abstract static int extensionStaticField;
+//   abstract static int extensionStaticField = 0;
 //   ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:58:29: Error: Extension fields can't be declared 'abstract'.
 // Try removing the 'abstract' keyword.
-//   abstract static final int finalExtensionStaticField;
+//   abstract static final int finalExtensionStaticField = 0;
 //                             ^^^^^^^^^^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:58:3: Error: Static fields can't be declared 'abstract'.
 // Try removing the 'abstract' or 'static' keyword.
-//   abstract static final int finalExtensionStaticField;
+//   abstract static final int finalExtensionStaticField = 0;
 //   ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:5:14: Error: Field 'topLevelField' should be initialized because its type 'int' doesn't allow null.
@@ -193,11 +172,16 @@
   abstract set initializedField1(core::int #externalFieldValue) → void;
   abstract get initializedField2() → core::int;
   abstract set initializedField2(core::int #externalFieldValue) → void;
-  external get externalInstanceField() → core::int;
-  external set externalInstanceField(core::int #externalFieldValue) → void;
-  external get externalFinalInstanceField() → core::int;
-  external get externalCovariantInstanceField() → core::num;
-  external set externalCovariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external get externalInstanceField1() → core::int;
+  external set externalInstanceField1(core::int #externalFieldValue) → void;
+  external get externalFinalInstanceField1() → core::int;
+  external get externalCovariantInstanceField1() → core::num;
+  external set externalCovariantInstanceField1(covariant core::num #externalFieldValue) → void;
+  external get externalInstanceField2() → core::int;
+  external set externalInstanceField2(core::int #externalFieldValue) → void;
+  external get externalFinalInstanceField2() → core::int;
+  external get externalCovariantInstanceField2() → core::num;
+  external set externalCovariantInstanceField2(covariant core::num #externalFieldValue) → void;
   external get externalLateInstanceField() → core::int;
   external set externalLateInstanceField(core::int #externalFieldValue) → void;
 }
diff --git a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.expect b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.expect
index fa28c87..a4118b8 100644
--- a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.expect
@@ -34,55 +34,34 @@
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:26:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   external abstract int externalInstanceField;
+//   external abstract int externalInstanceField1;
 //            ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:28:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   external abstract final int externalFinalInstanceField;
+//   external abstract final int externalFinalInstanceField1;
 //            ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:30:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   external abstract covariant num externalCovariantInstanceField;
+//   external abstract covariant num externalCovariantInstanceField1;
 //            ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:32:3: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   abstract external int externalInstanceField;
+//   abstract external int externalInstanceField2;
 //   ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:32:25: Error: 'externalInstanceField' is already declared in this scope.
-//   abstract external int externalInstanceField;
-//                         ^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:26:25: Context: Previous declaration of 'externalInstanceField'.
-//   external abstract int externalInstanceField;
-//                         ^^^^^^^^^^^^^^^^^^^^^
-//
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:34:3: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   abstract external final int externalFinalInstanceField;
+//   abstract external final int externalFinalInstanceField2;
 //   ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:34:31: Error: 'externalFinalInstanceField' is already declared in this scope.
-//   abstract external final int externalFinalInstanceField;
-//                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:28:31: Context: Previous declaration of 'externalFinalInstanceField'.
-//   external abstract final int externalFinalInstanceField;
-//                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:36:3: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   abstract external covariant num externalCovariantInstanceField;
+//   abstract external covariant num externalCovariantInstanceField2;
 //   ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:36:35: Error: 'externalCovariantInstanceField' is already declared in this scope.
-//   abstract external covariant num externalCovariantInstanceField;
-//                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:30:35: Context: Previous declaration of 'externalCovariantInstanceField'.
-//   external abstract covariant num externalCovariantInstanceField;
-//                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:38:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
 //   external abstract late int externalLateInstanceField;
@@ -140,22 +119,22 @@
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:57:23: Error: Extension fields can't be declared 'abstract'.
 // Try removing the 'abstract' keyword.
-//   abstract static int extensionStaticField;
+//   abstract static int extensionStaticField = 0;
 //                       ^^^^^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:57:3: Error: Static fields can't be declared 'abstract'.
 // Try removing the 'abstract' or 'static' keyword.
-//   abstract static int extensionStaticField;
+//   abstract static int extensionStaticField = 0;
 //   ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:58:29: Error: Extension fields can't be declared 'abstract'.
 // Try removing the 'abstract' keyword.
-//   abstract static final int finalExtensionStaticField;
+//   abstract static final int finalExtensionStaticField = 0;
 //                             ^^^^^^^^^^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:58:3: Error: Static fields can't be declared 'abstract'.
 // Try removing the 'abstract' or 'static' keyword.
-//   abstract static final int finalExtensionStaticField;
+//   abstract static final int finalExtensionStaticField = 0;
 //   ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:5:14: Error: Field 'topLevelField' should be initialized because its type 'int' doesn't allow null.
@@ -225,11 +204,16 @@
   abstract set initializedField1(core::int #externalFieldValue) → void;
   abstract get initializedField2() → core::int;
   abstract set initializedField2(core::int #externalFieldValue) → void;
-  external get externalInstanceField() → core::int;
-  external set externalInstanceField(core::int #externalFieldValue) → void;
-  external get externalFinalInstanceField() → core::int;
-  external get externalCovariantInstanceField() → core::num;
-  external set externalCovariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external get externalInstanceField1() → core::int;
+  external set externalInstanceField1(core::int #externalFieldValue) → void;
+  external get externalFinalInstanceField1() → core::int;
+  external get externalCovariantInstanceField1() → core::num;
+  external set externalCovariantInstanceField1(covariant core::num #externalFieldValue) → void;
+  external get externalInstanceField2() → core::int;
+  external set externalInstanceField2(core::int #externalFieldValue) → void;
+  external get externalFinalInstanceField2() → core::int;
+  external get externalCovariantInstanceField2() → core::num;
+  external set externalCovariantInstanceField2(covariant core::num #externalFieldValue) → void;
   external get externalLateInstanceField() → core::int;
   external set externalLateInstanceField(core::int #externalFieldValue) → void;
 }
@@ -252,8 +236,8 @@
 static field core::int topLevelField;
 static final field core::int finalTopLevelField = 0;
 static const field core::int constField = #C1;
-static field core::int Extension|extensionStaticField;
-static final field core::int Extension|finalExtensionStaticField;
+static field core::int Extension|extensionStaticField = 0;
+static final field core::int Extension|finalExtensionStaticField = 0;
 static abstract get Extension|extensionInstanceField() → core::int;
 static abstract set Extension|extensionInstanceField(core::int #externalFieldValue) → void;
 static abstract get Extension|finalExtensionInstanceField() → core::int;
diff --git a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.transformed.expect
index fa28c87..a4118b8 100644
--- a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.transformed.expect
@@ -34,55 +34,34 @@
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:26:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   external abstract int externalInstanceField;
+//   external abstract int externalInstanceField1;
 //            ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:28:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   external abstract final int externalFinalInstanceField;
+//   external abstract final int externalFinalInstanceField1;
 //            ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:30:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   external abstract covariant num externalCovariantInstanceField;
+//   external abstract covariant num externalCovariantInstanceField1;
 //            ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:32:3: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   abstract external int externalInstanceField;
+//   abstract external int externalInstanceField2;
 //   ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:32:25: Error: 'externalInstanceField' is already declared in this scope.
-//   abstract external int externalInstanceField;
-//                         ^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:26:25: Context: Previous declaration of 'externalInstanceField'.
-//   external abstract int externalInstanceField;
-//                         ^^^^^^^^^^^^^^^^^^^^^
-//
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:34:3: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   abstract external final int externalFinalInstanceField;
+//   abstract external final int externalFinalInstanceField2;
 //   ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:34:31: Error: 'externalFinalInstanceField' is already declared in this scope.
-//   abstract external final int externalFinalInstanceField;
-//                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:28:31: Context: Previous declaration of 'externalFinalInstanceField'.
-//   external abstract final int externalFinalInstanceField;
-//                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:36:3: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   abstract external covariant num externalCovariantInstanceField;
+//   abstract external covariant num externalCovariantInstanceField2;
 //   ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:36:35: Error: 'externalCovariantInstanceField' is already declared in this scope.
-//   abstract external covariant num externalCovariantInstanceField;
-//                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:30:35: Context: Previous declaration of 'externalCovariantInstanceField'.
-//   external abstract covariant num externalCovariantInstanceField;
-//                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:38:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
 //   external abstract late int externalLateInstanceField;
@@ -140,22 +119,22 @@
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:57:23: Error: Extension fields can't be declared 'abstract'.
 // Try removing the 'abstract' keyword.
-//   abstract static int extensionStaticField;
+//   abstract static int extensionStaticField = 0;
 //                       ^^^^^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:57:3: Error: Static fields can't be declared 'abstract'.
 // Try removing the 'abstract' or 'static' keyword.
-//   abstract static int extensionStaticField;
+//   abstract static int extensionStaticField = 0;
 //   ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:58:29: Error: Extension fields can't be declared 'abstract'.
 // Try removing the 'abstract' keyword.
-//   abstract static final int finalExtensionStaticField;
+//   abstract static final int finalExtensionStaticField = 0;
 //                             ^^^^^^^^^^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:58:3: Error: Static fields can't be declared 'abstract'.
 // Try removing the 'abstract' or 'static' keyword.
-//   abstract static final int finalExtensionStaticField;
+//   abstract static final int finalExtensionStaticField = 0;
 //   ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:5:14: Error: Field 'topLevelField' should be initialized because its type 'int' doesn't allow null.
@@ -225,11 +204,16 @@
   abstract set initializedField1(core::int #externalFieldValue) → void;
   abstract get initializedField2() → core::int;
   abstract set initializedField2(core::int #externalFieldValue) → void;
-  external get externalInstanceField() → core::int;
-  external set externalInstanceField(core::int #externalFieldValue) → void;
-  external get externalFinalInstanceField() → core::int;
-  external get externalCovariantInstanceField() → core::num;
-  external set externalCovariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external get externalInstanceField1() → core::int;
+  external set externalInstanceField1(core::int #externalFieldValue) → void;
+  external get externalFinalInstanceField1() → core::int;
+  external get externalCovariantInstanceField1() → core::num;
+  external set externalCovariantInstanceField1(covariant core::num #externalFieldValue) → void;
+  external get externalInstanceField2() → core::int;
+  external set externalInstanceField2(core::int #externalFieldValue) → void;
+  external get externalFinalInstanceField2() → core::int;
+  external get externalCovariantInstanceField2() → core::num;
+  external set externalCovariantInstanceField2(covariant core::num #externalFieldValue) → void;
   external get externalLateInstanceField() → core::int;
   external set externalLateInstanceField(core::int #externalFieldValue) → void;
 }
@@ -252,8 +236,8 @@
 static field core::int topLevelField;
 static final field core::int finalTopLevelField = 0;
 static const field core::int constField = #C1;
-static field core::int Extension|extensionStaticField;
-static final field core::int Extension|finalExtensionStaticField;
+static field core::int Extension|extensionStaticField = 0;
+static final field core::int Extension|finalExtensionStaticField = 0;
 static abstract get Extension|extensionInstanceField() → core::int;
 static abstract set Extension|extensionInstanceField(core::int #externalFieldValue) → void;
 static abstract get Extension|finalExtensionInstanceField() → core::int;
diff --git a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.textual_outline.expect
index 8ad6f00..69a99ab 100644
--- a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.textual_outline.expect
@@ -10,12 +10,12 @@
   abstract static final int finalStaticField;
   abstract late int ;
   lateInstanceField;
-  external abstract int externalInstanceField;
-  external abstract final int externalFinalInstanceField;
-  external abstract covariant num externalCovariantInstanceField;
-  abstract external int externalInstanceField;
-  abstract external final int externalFinalInstanceField;
-  abstract external covariant num externalCovariantInstanceField;
+  external abstract int externalInstanceField1;
+  external abstract final int externalFinalInstanceField1;
+  external abstract covariant num externalCovariantInstanceField1;
+  abstract external int externalInstanceField2;
+  abstract external final int externalFinalInstanceField2;
+  abstract external covariant num externalCovariantInstanceField2;
   external abstract late int ;
   externalLateInstanceField;
 }
diff --git a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.expect b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.expect
index fa28c87..a4118b8 100644
--- a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.expect
@@ -34,55 +34,34 @@
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:26:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   external abstract int externalInstanceField;
+//   external abstract int externalInstanceField1;
 //            ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:28:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   external abstract final int externalFinalInstanceField;
+//   external abstract final int externalFinalInstanceField1;
 //            ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:30:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   external abstract covariant num externalCovariantInstanceField;
+//   external abstract covariant num externalCovariantInstanceField1;
 //            ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:32:3: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   abstract external int externalInstanceField;
+//   abstract external int externalInstanceField2;
 //   ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:32:25: Error: 'externalInstanceField' is already declared in this scope.
-//   abstract external int externalInstanceField;
-//                         ^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:26:25: Context: Previous declaration of 'externalInstanceField'.
-//   external abstract int externalInstanceField;
-//                         ^^^^^^^^^^^^^^^^^^^^^
-//
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:34:3: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   abstract external final int externalFinalInstanceField;
+//   abstract external final int externalFinalInstanceField2;
 //   ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:34:31: Error: 'externalFinalInstanceField' is already declared in this scope.
-//   abstract external final int externalFinalInstanceField;
-//                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:28:31: Context: Previous declaration of 'externalFinalInstanceField'.
-//   external abstract final int externalFinalInstanceField;
-//                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:36:3: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   abstract external covariant num externalCovariantInstanceField;
+//   abstract external covariant num externalCovariantInstanceField2;
 //   ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:36:35: Error: 'externalCovariantInstanceField' is already declared in this scope.
-//   abstract external covariant num externalCovariantInstanceField;
-//                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:30:35: Context: Previous declaration of 'externalCovariantInstanceField'.
-//   external abstract covariant num externalCovariantInstanceField;
-//                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:38:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
 //   external abstract late int externalLateInstanceField;
@@ -140,22 +119,22 @@
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:57:23: Error: Extension fields can't be declared 'abstract'.
 // Try removing the 'abstract' keyword.
-//   abstract static int extensionStaticField;
+//   abstract static int extensionStaticField = 0;
 //                       ^^^^^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:57:3: Error: Static fields can't be declared 'abstract'.
 // Try removing the 'abstract' or 'static' keyword.
-//   abstract static int extensionStaticField;
+//   abstract static int extensionStaticField = 0;
 //   ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:58:29: Error: Extension fields can't be declared 'abstract'.
 // Try removing the 'abstract' keyword.
-//   abstract static final int finalExtensionStaticField;
+//   abstract static final int finalExtensionStaticField = 0;
 //                             ^^^^^^^^^^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:58:3: Error: Static fields can't be declared 'abstract'.
 // Try removing the 'abstract' or 'static' keyword.
-//   abstract static final int finalExtensionStaticField;
+//   abstract static final int finalExtensionStaticField = 0;
 //   ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:5:14: Error: Field 'topLevelField' should be initialized because its type 'int' doesn't allow null.
@@ -225,11 +204,16 @@
   abstract set initializedField1(core::int #externalFieldValue) → void;
   abstract get initializedField2() → core::int;
   abstract set initializedField2(core::int #externalFieldValue) → void;
-  external get externalInstanceField() → core::int;
-  external set externalInstanceField(core::int #externalFieldValue) → void;
-  external get externalFinalInstanceField() → core::int;
-  external get externalCovariantInstanceField() → core::num;
-  external set externalCovariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external get externalInstanceField1() → core::int;
+  external set externalInstanceField1(core::int #externalFieldValue) → void;
+  external get externalFinalInstanceField1() → core::int;
+  external get externalCovariantInstanceField1() → core::num;
+  external set externalCovariantInstanceField1(covariant core::num #externalFieldValue) → void;
+  external get externalInstanceField2() → core::int;
+  external set externalInstanceField2(core::int #externalFieldValue) → void;
+  external get externalFinalInstanceField2() → core::int;
+  external get externalCovariantInstanceField2() → core::num;
+  external set externalCovariantInstanceField2(covariant core::num #externalFieldValue) → void;
   external get externalLateInstanceField() → core::int;
   external set externalLateInstanceField(core::int #externalFieldValue) → void;
 }
@@ -252,8 +236,8 @@
 static field core::int topLevelField;
 static final field core::int finalTopLevelField = 0;
 static const field core::int constField = #C1;
-static field core::int Extension|extensionStaticField;
-static final field core::int Extension|finalExtensionStaticField;
+static field core::int Extension|extensionStaticField = 0;
+static final field core::int Extension|finalExtensionStaticField = 0;
 static abstract get Extension|extensionInstanceField() → core::int;
 static abstract set Extension|extensionInstanceField(core::int #externalFieldValue) → void;
 static abstract get Extension|finalExtensionInstanceField() → core::int;
diff --git a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.transformed.expect
index fa28c87..a4118b8 100644
--- a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.transformed.expect
@@ -34,55 +34,34 @@
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:26:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   external abstract int externalInstanceField;
+//   external abstract int externalInstanceField1;
 //            ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:28:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   external abstract final int externalFinalInstanceField;
+//   external abstract final int externalFinalInstanceField1;
 //            ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:30:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   external abstract covariant num externalCovariantInstanceField;
+//   external abstract covariant num externalCovariantInstanceField1;
 //            ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:32:3: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   abstract external int externalInstanceField;
+//   abstract external int externalInstanceField2;
 //   ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:32:25: Error: 'externalInstanceField' is already declared in this scope.
-//   abstract external int externalInstanceField;
-//                         ^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:26:25: Context: Previous declaration of 'externalInstanceField'.
-//   external abstract int externalInstanceField;
-//                         ^^^^^^^^^^^^^^^^^^^^^
-//
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:34:3: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   abstract external final int externalFinalInstanceField;
+//   abstract external final int externalFinalInstanceField2;
 //   ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:34:31: Error: 'externalFinalInstanceField' is already declared in this scope.
-//   abstract external final int externalFinalInstanceField;
-//                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:28:31: Context: Previous declaration of 'externalFinalInstanceField'.
-//   external abstract final int externalFinalInstanceField;
-//                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:36:3: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
-//   abstract external covariant num externalCovariantInstanceField;
+//   abstract external covariant num externalCovariantInstanceField2;
 //   ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:36:35: Error: 'externalCovariantInstanceField' is already declared in this scope.
-//   abstract external covariant num externalCovariantInstanceField;
-//                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:30:35: Context: Previous declaration of 'externalCovariantInstanceField'.
-//   external abstract covariant num externalCovariantInstanceField;
-//                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:38:12: Error: Fields can't be declared both 'abstract' and 'external'.
 // Try removing the 'abstract' or 'external' keyword.
 //   external abstract late int externalLateInstanceField;
@@ -140,22 +119,22 @@
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:57:23: Error: Extension fields can't be declared 'abstract'.
 // Try removing the 'abstract' keyword.
-//   abstract static int extensionStaticField;
+//   abstract static int extensionStaticField = 0;
 //                       ^^^^^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:57:3: Error: Static fields can't be declared 'abstract'.
 // Try removing the 'abstract' or 'static' keyword.
-//   abstract static int extensionStaticField;
+//   abstract static int extensionStaticField = 0;
 //   ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:58:29: Error: Extension fields can't be declared 'abstract'.
 // Try removing the 'abstract' keyword.
-//   abstract static final int finalExtensionStaticField;
+//   abstract static final int finalExtensionStaticField = 0;
 //                             ^^^^^^^^^^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:58:3: Error: Static fields can't be declared 'abstract'.
 // Try removing the 'abstract' or 'static' keyword.
-//   abstract static final int finalExtensionStaticField;
+//   abstract static final int finalExtensionStaticField = 0;
 //   ^^^^^^^^
 //
 // pkg/front_end/testcases/nnbd/abstract_field_errors.dart:5:14: Error: Field 'topLevelField' should be initialized because its type 'int' doesn't allow null.
@@ -225,11 +204,16 @@
   abstract set initializedField1(core::int #externalFieldValue) → void;
   abstract get initializedField2() → core::int;
   abstract set initializedField2(core::int #externalFieldValue) → void;
-  external get externalInstanceField() → core::int;
-  external set externalInstanceField(core::int #externalFieldValue) → void;
-  external get externalFinalInstanceField() → core::int;
-  external get externalCovariantInstanceField() → core::num;
-  external set externalCovariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external get externalInstanceField1() → core::int;
+  external set externalInstanceField1(core::int #externalFieldValue) → void;
+  external get externalFinalInstanceField1() → core::int;
+  external get externalCovariantInstanceField1() → core::num;
+  external set externalCovariantInstanceField1(covariant core::num #externalFieldValue) → void;
+  external get externalInstanceField2() → core::int;
+  external set externalInstanceField2(core::int #externalFieldValue) → void;
+  external get externalFinalInstanceField2() → core::int;
+  external get externalCovariantInstanceField2() → core::num;
+  external set externalCovariantInstanceField2(covariant core::num #externalFieldValue) → void;
   external get externalLateInstanceField() → core::int;
   external set externalLateInstanceField(core::int #externalFieldValue) → void;
 }
@@ -252,8 +236,8 @@
 static field core::int topLevelField;
 static final field core::int finalTopLevelField = 0;
 static const field core::int constField = #C1;
-static field core::int Extension|extensionStaticField;
-static final field core::int Extension|finalExtensionStaticField;
+static field core::int Extension|extensionStaticField = 0;
+static final field core::int Extension|finalExtensionStaticField = 0;
 static abstract get Extension|extensionInstanceField() → core::int;
 static abstract set Extension|extensionInstanceField(core::int #externalFieldValue) → void;
 static abstract get Extension|finalExtensionInstanceField() → core::int;
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart b/pkg/front_end/testcases/nnbd/issue43211.dart
new file mode 100644
index 0000000..f04a817
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart
@@ -0,0 +1,54 @@
+// Copyright (c) 2020, 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.
+
+class A<X extends A<X>?> {}
+
+class D<X extends num> {}
+
+extension Extension1<X extends A<X>?> on A<X> {
+  void method1<Y extends A<Y>?>(A<Y> a, A<A<Null>>? b) {
+    A<Y>? c;
+    A<A<Null>>? d;
+  }
+
+  void method2<Y extends String>(D<Y> a, D<String>? b) {
+    D<Y>? c;
+    D<String>? d;
+  }
+}
+
+extension ext2<X extends A<Null>?> on A<X> {}
+
+class B<X extends A<Null>?> implements A<X> {
+  void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+    A<Y>? c;
+    A<A<Null>>? d;
+  }
+
+  void method2<Y extends String>(D<Y> a, D<String>? b) {
+    D<Y>? c;
+    D<String>? d;
+  }
+}
+
+class C {
+  factory C.redirect(A<A<Null>>? a) = C.internal;
+
+  factory C.fact(A<A<Null>>? a) {
+    A<A<Null>>? b;
+    D<String>? c;
+    return new C.internal(a);
+  }
+
+  C.internal(_) {
+    A<A<Null>>? a;
+    D<String>? b;
+  }
+}
+
+test() {
+  var a = new A<Null>();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.outline.expect
new file mode 100644
index 0000000..f9ad8e5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.outline.expect
@@ -0,0 +1,151 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:10:53: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Y>?>(A<Y> a, A<A<Null>>? b) {
+//                                                     ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                                     ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:21:39: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A'.
+//  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ext2<X extends A<Null>?> on A<X> {}
+//                                       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:23:7: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+//  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class B<X extends A<Null>?> implements A<X> {
+//       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:41: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                         ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:56: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                                        ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                                     ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:36:34: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   factory C.redirect(A<A<Null>>? a) = C.internal;
+//                                  ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:38:30: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   factory C.fact(A<A<Null>>? a) {
+//                              ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends self::A<self::A::X%>? = self::A<dynamic>?> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    ;
+}
+class D<X extends core::num = core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X>
+    ;
+}
+class B<X extends self::A<core::Null?>? = self::A<core::Null?>?> extends core::Object implements self::A<self::B::X%> {
+  synthetic constructor •() → self::B<self::B::X%>
+    ;
+  method method1<Y extends self::A<core::Null?>? = self::A<core::Null?>?>(self::A<self::B::method1::Y%> a, self::A<self::A<core::Null?>>? b) → void
+    ;
+  method method2<Y extends core::String = core::String>(self::D<self::B::method2::Y> a, self::D<core::String>? b) → void
+    ;
+}
+class C extends core::Object {
+  static field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isNullableByDefault*/;
+  constructor internal(dynamic _) → self::C
+    ;
+  static factory redirect(self::A<self::A<core::Null?>>? a) → self::C
+    let dynamic #redirecting_factory = self::C::internal in invalid-expression;
+  static factory fact(self::A<self::A<core::Null?>>? a) → self::C
+    ;
+}
+extension Extension1<X extends self::A<X%>? = self::A<dynamic>?> on self::A<X%> {
+  method method1 = self::Extension1|method1;
+  tearoff method1 = self::Extension1|get#method1;
+  method method2 = self::Extension1|method2;
+  tearoff method2 = self::Extension1|get#method2;
+}
+extension ext2<X extends self::A<core::Null?>? = self::A<core::Null?>?> on self::A<X%> {
+}
+static method Extension1|method1<X extends self::A<self::Extension1|method1::X%>? = self::A<dynamic>?, Y extends self::A<self::Extension1|method1::Y%>? = self::A<dynamic>?>(final self::A<self::Extension1|method1::X%> #this, self::A<self::Extension1|method1::Y%> a, self::A<self::A<core::Null?>>? b) → void
+  ;
+static method Extension1|get#method1<X extends self::A<self::Extension1|get#method1::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method1::X%> #this) → <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%>, self::A<self::A<core::Null?>>?) → void
+  return <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%> a, self::A<self::A<core::Null?>>? b) → void => self::Extension1|method1<self::Extension1|get#method1::X%, Y%>(#this, a, b);
+static method Extension1|method2<X extends self::A<self::Extension1|method2::X%>? = self::A<dynamic>?, Y extends core::String = core::String>(final self::A<self::Extension1|method2::X%> #this, self::D<self::Extension1|method2::Y> a, self::D<core::String>? b) → void
+  ;
+static method Extension1|get#method2<X extends self::A<self::Extension1|get#method2::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method2::X%> #this) → <Y extends core::String = core::String>(self::D<Y>, self::D<core::String>?) → void
+  return <Y extends core::String = core::String>(self::D<Y> a, self::D<core::String>? b) → void => self::Extension1|method2<self::Extension1|get#method2::X%, Y>(#this, a, b);
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
new file mode 100644
index 0000000..127779c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
@@ -0,0 +1,261 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:10:53: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Y>?>(A<Y> a, A<A<Null>>? b) {
+//                                                     ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                                     ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:21:39: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A'.
+//  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ext2<X extends A<Null>?> on A<X> {}
+//                                       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:23:7: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+//  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class B<X extends A<Null>?> implements A<X> {
+//       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:41: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                         ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:56: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                                        ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                                     ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:36:34: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   factory C.redirect(A<A<Null>>? a) = C.internal;
+//                                  ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:38:30: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   factory C.fact(A<A<Null>>? a) {
+//                              ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:12:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? d;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:16:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<Y>? c;
+//           ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:17:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? d;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:25:11: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<Y>? c;
+//           ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:26:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? d;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:30:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<Y>? c;
+//           ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:31:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? d;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:39:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? b;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:40:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? c;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:45:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? a;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:46:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? b;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends self::A<self::A::X%>? = self::A<dynamic>?> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class D<X extends core::num = core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X>
+    : super core::Object::•()
+    ;
+}
+class B<X extends self::A<core::Null?>? = self::A<core::Null?>?> extends core::Object implements self::A<self::B::X%> {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+  method method1<Y extends self::A<core::Null?>? = self::A<core::Null?>?>(self::A<self::B::method1::Y%> a, self::A<self::A<core::Null?>>? b) → void {
+    self::A<self::B::method1::Y%>? c;
+    self::A<self::A<core::Null?>>? d;
+  }
+  method method2<Y extends core::String = core::String>(self::D<self::B::method2::Y> a, self::D<core::String>? b) → void {
+    self::D<self::B::method2::Y>? c;
+    self::D<core::String>? d;
+  }
+}
+class C extends core::Object {
+  static field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isNullableByDefault*/;
+  constructor internal(dynamic _) → self::C
+    : super core::Object::•() {
+    self::A<self::A<core::Null?>>? a;
+    self::D<core::String>? b;
+  }
+  static factory redirect(self::A<self::A<core::Null?>>? a) → self::C
+    let dynamic #redirecting_factory = self::C::internal in invalid-expression;
+  static factory fact(self::A<self::A<core::Null?>>? a) → self::C {
+    self::A<self::A<core::Null?>>? b;
+    self::D<core::String>? c;
+    return new self::C::internal(a);
+  }
+}
+extension Extension1<X extends self::A<X%>? = self::A<dynamic>?> on self::A<X%> {
+  method method1 = self::Extension1|method1;
+  tearoff method1 = self::Extension1|get#method1;
+  method method2 = self::Extension1|method2;
+  tearoff method2 = self::Extension1|get#method2;
+}
+extension ext2<X extends self::A<core::Null?>? = self::A<core::Null?>?> on self::A<X%> {
+}
+static method Extension1|method1<X extends self::A<self::Extension1|method1::X%>? = self::A<dynamic>?, Y extends self::A<self::Extension1|method1::Y%>? = self::A<dynamic>?>(final self::A<self::Extension1|method1::X%> #this, self::A<self::Extension1|method1::Y%> a, self::A<self::A<core::Null?>>? b) → void {
+  self::A<self::Extension1|method1::Y%>? c;
+  self::A<self::A<core::Null?>>? d;
+}
+static method Extension1|get#method1<X extends self::A<self::Extension1|get#method1::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method1::X%> #this) → <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%>, self::A<self::A<core::Null?>>?) → void
+  return <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%> a, self::A<self::A<core::Null?>>? b) → void => self::Extension1|method1<self::Extension1|get#method1::X%, Y%>(#this, a, b);
+static method Extension1|method2<X extends self::A<self::Extension1|method2::X%>? = self::A<dynamic>?, Y extends core::String = core::String>(final self::A<self::Extension1|method2::X%> #this, self::D<self::Extension1|method2::Y> a, self::D<core::String>? b) → void {
+  self::D<self::Extension1|method2::Y>? c;
+  self::D<core::String>? d;
+}
+static method Extension1|get#method2<X extends self::A<self::Extension1|get#method2::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method2::X%> #this) → <Y extends core::String = core::String>(self::D<Y>, self::D<core::String>?) → void
+  return <Y extends core::String = core::String>(self::D<Y> a, self::D<core::String>? b) → void => self::Extension1|method2<self::Extension1|get#method2::X%, Y>(#this, a, b);
+static method test() → dynamic {
+  self::A<core::Null?> a = new self::A::•<core::Null?>();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
new file mode 100644
index 0000000..10f7711
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
@@ -0,0 +1,261 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:10:53: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Y>?>(A<Y> a, A<A<Null>>? b) {
+//                                                     ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                                     ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:21:39: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A'.
+//  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ext2<X extends A<Null>?> on A<X> {}
+//                                       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:23:7: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+//  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class B<X extends A<Null>?> implements A<X> {
+//       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:41: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                         ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:56: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                                        ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                                     ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:36:34: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   factory C.redirect(A<A<Null>>? a) = C.internal;
+//                                  ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:38:30: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   factory C.fact(A<A<Null>>? a) {
+//                              ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:12:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? d;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:16:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<Y>? c;
+//           ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:17:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? d;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:25:11: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<Y>? c;
+//           ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:26:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? d;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:30:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<Y>? c;
+//           ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:31:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? d;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:39:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? b;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:40:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? c;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:45:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? a;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:46:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? b;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends self::A<self::A::X%>? = self::A<dynamic>?> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class D<X extends core::num = core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X>
+    : super core::Object::•()
+    ;
+}
+class B<X extends self::A<core::Null?>? = self::A<core::Null?>?> extends core::Object implements self::A<self::B::X%> {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+  method method1<Y extends self::A<core::Null?>? = self::A<core::Null?>?>(self::A<self::B::method1::Y%> a, self::A<self::A<core::Null?>>? b) → void {
+    self::A<self::B::method1::Y%>? c;
+    self::A<self::A<core::Null?>>? d;
+  }
+  method method2<Y extends core::String = core::String>(self::D<self::B::method2::Y> a, self::D<core::String>? b) → void {
+    self::D<self::B::method2::Y>? c;
+    self::D<core::String>? d;
+  }
+}
+class C extends core::Object {
+  static field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isNullableByDefault*/;
+  constructor internal(dynamic _) → self::C
+    : super core::Object::•() {
+    self::A<self::A<core::Null?>>? a;
+    self::D<core::String>? b;
+  }
+  static factory redirect(self::A<self::A<core::Null?>>? a) → self::C
+    let<BottomType> #redirecting_factory = self::C::internal in invalid-expression;
+  static factory fact(self::A<self::A<core::Null?>>? a) → self::C {
+    self::A<self::A<core::Null?>>? b;
+    self::D<core::String>? c;
+    return new self::C::internal(a);
+  }
+}
+extension Extension1<X extends self::A<X%>? = self::A<dynamic>?> on self::A<X%> {
+  method method1 = self::Extension1|method1;
+  tearoff method1 = self::Extension1|get#method1;
+  method method2 = self::Extension1|method2;
+  tearoff method2 = self::Extension1|get#method2;
+}
+extension ext2<X extends self::A<core::Null?>? = self::A<core::Null?>?> on self::A<X%> {
+}
+static method Extension1|method1<X extends self::A<self::Extension1|method1::X%>? = self::A<dynamic>?, Y extends self::A<self::Extension1|method1::Y%>? = self::A<dynamic>?>(final self::A<self::Extension1|method1::X%> #this, self::A<self::Extension1|method1::Y%> a, self::A<self::A<core::Null?>>? b) → void {
+  self::A<self::Extension1|method1::Y%>? c;
+  self::A<self::A<core::Null?>>? d;
+}
+static method Extension1|get#method1<X extends self::A<self::Extension1|get#method1::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method1::X%> #this) → <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%>, self::A<self::A<core::Null?>>?) → void
+  return <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%> a, self::A<self::A<core::Null?>>? b) → void => self::Extension1|method1<self::Extension1|get#method1::X%, Y%>(#this, a, b);
+static method Extension1|method2<X extends self::A<self::Extension1|method2::X%>? = self::A<dynamic>?, Y extends core::String = core::String>(final self::A<self::Extension1|method2::X%> #this, self::D<self::Extension1|method2::Y> a, self::D<core::String>? b) → void {
+  self::D<self::Extension1|method2::Y>? c;
+  self::D<core::String>? d;
+}
+static method Extension1|get#method2<X extends self::A<self::Extension1|get#method2::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method2::X%> #this) → <Y extends core::String = core::String>(self::D<Y>, self::D<core::String>?) → void
+  return <Y extends core::String = core::String>(self::D<Y> a, self::D<core::String>? b) → void => self::Extension1|method2<self::Extension1|get#method2::X%, Y>(#this, a, b);
+static method test() → dynamic {
+  self::A<core::Null?> a = new self::A::•<core::Null?>();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.textual_outline.expect
new file mode 100644
index 0000000..f38556f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.textual_outline.expect
@@ -0,0 +1,17 @@
+class A<X extends A<X>?> {}
+class D<X extends num> {}
+extension Extension1<X extends A<X>?> (){}
+on A<X> (){}
+extension ext2<X extends A<Null>?> (){}
+on A<X> (){}
+class B<X extends A<Null>?> implements A<X> {
+  void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {}
+  void method2<Y extends String>(D<Y> a, D<String>? b) {}
+}
+class C {
+  factory C.redirect(A<A<Null>>? a) = C.internal;
+  factory C.fact(A<A<Null>>? a) {}
+  C.internal(_) {}
+}
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
new file mode 100644
index 0000000..127779c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
@@ -0,0 +1,261 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:10:53: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Y>?>(A<Y> a, A<A<Null>>? b) {
+//                                                     ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                                     ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:21:39: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A'.
+//  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ext2<X extends A<Null>?> on A<X> {}
+//                                       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:23:7: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+//  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class B<X extends A<Null>?> implements A<X> {
+//       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:41: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                         ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:56: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                                        ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                                     ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:36:34: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   factory C.redirect(A<A<Null>>? a) = C.internal;
+//                                  ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:38:30: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   factory C.fact(A<A<Null>>? a) {
+//                              ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:12:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? d;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:16:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<Y>? c;
+//           ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:17:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? d;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:25:11: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<Y>? c;
+//           ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:26:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? d;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:30:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<Y>? c;
+//           ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:31:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? d;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:39:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? b;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:40:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? c;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:45:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? a;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:46:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? b;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends self::A<self::A::X%>? = self::A<dynamic>?> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class D<X extends core::num = core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X>
+    : super core::Object::•()
+    ;
+}
+class B<X extends self::A<core::Null?>? = self::A<core::Null?>?> extends core::Object implements self::A<self::B::X%> {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+  method method1<Y extends self::A<core::Null?>? = self::A<core::Null?>?>(self::A<self::B::method1::Y%> a, self::A<self::A<core::Null?>>? b) → void {
+    self::A<self::B::method1::Y%>? c;
+    self::A<self::A<core::Null?>>? d;
+  }
+  method method2<Y extends core::String = core::String>(self::D<self::B::method2::Y> a, self::D<core::String>? b) → void {
+    self::D<self::B::method2::Y>? c;
+    self::D<core::String>? d;
+  }
+}
+class C extends core::Object {
+  static field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isNullableByDefault*/;
+  constructor internal(dynamic _) → self::C
+    : super core::Object::•() {
+    self::A<self::A<core::Null?>>? a;
+    self::D<core::String>? b;
+  }
+  static factory redirect(self::A<self::A<core::Null?>>? a) → self::C
+    let dynamic #redirecting_factory = self::C::internal in invalid-expression;
+  static factory fact(self::A<self::A<core::Null?>>? a) → self::C {
+    self::A<self::A<core::Null?>>? b;
+    self::D<core::String>? c;
+    return new self::C::internal(a);
+  }
+}
+extension Extension1<X extends self::A<X%>? = self::A<dynamic>?> on self::A<X%> {
+  method method1 = self::Extension1|method1;
+  tearoff method1 = self::Extension1|get#method1;
+  method method2 = self::Extension1|method2;
+  tearoff method2 = self::Extension1|get#method2;
+}
+extension ext2<X extends self::A<core::Null?>? = self::A<core::Null?>?> on self::A<X%> {
+}
+static method Extension1|method1<X extends self::A<self::Extension1|method1::X%>? = self::A<dynamic>?, Y extends self::A<self::Extension1|method1::Y%>? = self::A<dynamic>?>(final self::A<self::Extension1|method1::X%> #this, self::A<self::Extension1|method1::Y%> a, self::A<self::A<core::Null?>>? b) → void {
+  self::A<self::Extension1|method1::Y%>? c;
+  self::A<self::A<core::Null?>>? d;
+}
+static method Extension1|get#method1<X extends self::A<self::Extension1|get#method1::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method1::X%> #this) → <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%>, self::A<self::A<core::Null?>>?) → void
+  return <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%> a, self::A<self::A<core::Null?>>? b) → void => self::Extension1|method1<self::Extension1|get#method1::X%, Y%>(#this, a, b);
+static method Extension1|method2<X extends self::A<self::Extension1|method2::X%>? = self::A<dynamic>?, Y extends core::String = core::String>(final self::A<self::Extension1|method2::X%> #this, self::D<self::Extension1|method2::Y> a, self::D<core::String>? b) → void {
+  self::D<self::Extension1|method2::Y>? c;
+  self::D<core::String>? d;
+}
+static method Extension1|get#method2<X extends self::A<self::Extension1|get#method2::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method2::X%> #this) → <Y extends core::String = core::String>(self::D<Y>, self::D<core::String>?) → void
+  return <Y extends core::String = core::String>(self::D<Y> a, self::D<core::String>? b) → void => self::Extension1|method2<self::Extension1|get#method2::X%, Y>(#this, a, b);
+static method test() → dynamic {
+  self::A<core::Null?> a = new self::A::•<core::Null?>();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
new file mode 100644
index 0000000..10f7711
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
@@ -0,0 +1,261 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:10:53: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Y>?>(A<Y> a, A<A<Null>>? b) {
+//                                                     ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                                     ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:21:39: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A'.
+//  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ext2<X extends A<Null>?> on A<X> {}
+//                                       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:23:7: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+//  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class B<X extends A<Null>?> implements A<X> {
+//       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:41: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                         ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:56: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                                        ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                                     ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:36:34: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   factory C.redirect(A<A<Null>>? a) = C.internal;
+//                                  ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:38:30: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   factory C.fact(A<A<Null>>? a) {
+//                              ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:12:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? d;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:16:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<Y>? c;
+//           ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:17:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? d;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:25:11: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<Y>? c;
+//           ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:26:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? d;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:30:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<Y>? c;
+//           ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:31:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? d;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:39:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? b;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:40:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? c;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:45:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? a;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:46:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? b;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends self::A<self::A::X%>? = self::A<dynamic>?> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class D<X extends core::num = core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X>
+    : super core::Object::•()
+    ;
+}
+class B<X extends self::A<core::Null?>? = self::A<core::Null?>?> extends core::Object implements self::A<self::B::X%> {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+  method method1<Y extends self::A<core::Null?>? = self::A<core::Null?>?>(self::A<self::B::method1::Y%> a, self::A<self::A<core::Null?>>? b) → void {
+    self::A<self::B::method1::Y%>? c;
+    self::A<self::A<core::Null?>>? d;
+  }
+  method method2<Y extends core::String = core::String>(self::D<self::B::method2::Y> a, self::D<core::String>? b) → void {
+    self::D<self::B::method2::Y>? c;
+    self::D<core::String>? d;
+  }
+}
+class C extends core::Object {
+  static field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isNullableByDefault*/;
+  constructor internal(dynamic _) → self::C
+    : super core::Object::•() {
+    self::A<self::A<core::Null?>>? a;
+    self::D<core::String>? b;
+  }
+  static factory redirect(self::A<self::A<core::Null?>>? a) → self::C
+    let<BottomType> #redirecting_factory = self::C::internal in invalid-expression;
+  static factory fact(self::A<self::A<core::Null?>>? a) → self::C {
+    self::A<self::A<core::Null?>>? b;
+    self::D<core::String>? c;
+    return new self::C::internal(a);
+  }
+}
+extension Extension1<X extends self::A<X%>? = self::A<dynamic>?> on self::A<X%> {
+  method method1 = self::Extension1|method1;
+  tearoff method1 = self::Extension1|get#method1;
+  method method2 = self::Extension1|method2;
+  tearoff method2 = self::Extension1|get#method2;
+}
+extension ext2<X extends self::A<core::Null?>? = self::A<core::Null?>?> on self::A<X%> {
+}
+static method Extension1|method1<X extends self::A<self::Extension1|method1::X%>? = self::A<dynamic>?, Y extends self::A<self::Extension1|method1::Y%>? = self::A<dynamic>?>(final self::A<self::Extension1|method1::X%> #this, self::A<self::Extension1|method1::Y%> a, self::A<self::A<core::Null?>>? b) → void {
+  self::A<self::Extension1|method1::Y%>? c;
+  self::A<self::A<core::Null?>>? d;
+}
+static method Extension1|get#method1<X extends self::A<self::Extension1|get#method1::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method1::X%> #this) → <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%>, self::A<self::A<core::Null?>>?) → void
+  return <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%> a, self::A<self::A<core::Null?>>? b) → void => self::Extension1|method1<self::Extension1|get#method1::X%, Y%>(#this, a, b);
+static method Extension1|method2<X extends self::A<self::Extension1|method2::X%>? = self::A<dynamic>?, Y extends core::String = core::String>(final self::A<self::Extension1|method2::X%> #this, self::D<self::Extension1|method2::Y> a, self::D<core::String>? b) → void {
+  self::D<self::Extension1|method2::Y>? c;
+  self::D<core::String>? d;
+}
+static method Extension1|get#method2<X extends self::A<self::Extension1|get#method2::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method2::X%> #this) → <Y extends core::String = core::String>(self::D<Y>, self::D<core::String>?) → void
+  return <Y extends core::String = core::String>(self::D<Y> a, self::D<core::String>? b) → void => self::Extension1|method2<self::Extension1|get#method2::X%, Y>(#this, a, b);
+static method test() → dynamic {
+  self::A<core::Null?> a = new self::A::•<core::Null?>();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.outline.expect b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.outline.expect
index 057a76f..296454f 100644
--- a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.outline.expect
@@ -14,6 +14,10 @@
 //   static int staticFieldOfM; // Error.
 //              ^^^^^^^^^^^^^^
 //
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:34:14: Error: Field 'staticFieldOfE' should be initialized because its type 'int' doesn't allow null.
+//   static int staticFieldOfE; // Error.
+//              ^^^^^^^^^^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.strong.expect b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.strong.expect
index a318c48..344ba8c 100644
--- a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.strong.expect
@@ -14,6 +14,10 @@
 //   static int staticFieldOfM; // Error.
 //              ^^^^^^^^^^^^^^
 //
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:34:14: Error: Field 'staticFieldOfE' should be initialized because its type 'int' doesn't allow null.
+//   static int staticFieldOfE; // Error.
+//              ^^^^^^^^^^^^^^
+//
 // pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:12:3: Error: This constructor should initialize field 'fieldOfA' because its type 'int' doesn't allow null.
 //   A.foo();
 //   ^
diff --git a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.strong.transformed.expect
index a318c48..344ba8c 100644
--- a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.strong.transformed.expect
@@ -14,6 +14,10 @@
 //   static int staticFieldOfM; // Error.
 //              ^^^^^^^^^^^^^^
 //
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:34:14: Error: Field 'staticFieldOfE' should be initialized because its type 'int' doesn't allow null.
+//   static int staticFieldOfE; // Error.
+//              ^^^^^^^^^^^^^^
+//
 // pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:12:3: Error: This constructor should initialize field 'fieldOfA' because its type 'int' doesn't allow null.
 //   A.foo();
 //   ^
diff --git a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.expect b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.expect
index a318c48..344ba8c 100644
--- a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.expect
@@ -14,6 +14,10 @@
 //   static int staticFieldOfM; // Error.
 //              ^^^^^^^^^^^^^^
 //
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:34:14: Error: Field 'staticFieldOfE' should be initialized because its type 'int' doesn't allow null.
+//   static int staticFieldOfE; // Error.
+//              ^^^^^^^^^^^^^^
+//
 // pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:12:3: Error: This constructor should initialize field 'fieldOfA' because its type 'int' doesn't allow null.
 //   A.foo();
 //   ^
diff --git a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.transformed.expect
index a318c48..344ba8c 100644
--- a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.transformed.expect
@@ -14,6 +14,10 @@
 //   static int staticFieldOfM; // Error.
 //              ^^^^^^^^^^^^^^
 //
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:34:14: Error: Field 'staticFieldOfE' should be initialized because its type 'int' doesn't allow null.
+//   static int staticFieldOfE; // Error.
+//              ^^^^^^^^^^^^^^
+//
 // pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:12:3: Error: This constructor should initialize field 'fieldOfA' because its type 'int' doesn't allow null.
 //   A.foo();
 //   ^
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart b/pkg/front_end/testcases/nnbd/override_inference.dart
new file mode 100644
index 0000000..c62bd15
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart
@@ -0,0 +1,156 @@
+// Copyright (c) 2020, 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.
+
+import 'dart:async';
+
+abstract class A<AT> {
+  String method1a(Object x);
+  Object method1b(String x);
+  void method1c(int x);
+  String method1d();
+  void method2a(Object? x);
+  void method2b(dynamic x);
+  void method3a<AT3a>(AT3a x);
+  void method3b<AT3b>(AT3b x);
+  void method4a<AT4a>(AT4a x, AT y);
+  void method4b<AT4b>(AT4b x, AT y);
+  void method5a(int x, num y);
+  void method5b(int x, num y);
+  void method6a({int x, num y});
+  void method6b({num y, int x});
+  Object? method7a(Object? o, {Object? named}) {}
+
+  Object get getter1a;
+  String get getter1b;
+  String get getter1c;
+  set getter1d(String x);
+  int get getter1e;
+  set getter1e(int x);
+
+  void set setter1a(Object x);
+  void set setter1b(String x);
+  void set setter1c(String x);
+  String get setter1d;
+  int get setter1e;
+  set setter1e(int x);
+
+  int? get field1a;
+  num? get field1b;
+  int? get field1c;
+
+  void set field2a(int? value);
+  void set field2b(num? value);
+  void set field2c(int? value);
+
+  int? get field3a;
+  num? get field3b;
+  int? get field3c;
+
+  void set field3a(Object? value);
+  void set field3b(Object? value);
+  void set field3c(Object? value);
+
+  num? get field4a;
+  num? get field4b;
+  void set field4b(Object? value);
+}
+
+abstract class B<BT> {
+  Object method1a(String x);
+  String method1b(Object x);
+  void method1c(String x);
+  int method1d();
+  void method2a(dynamic x);
+  void method2b(Object? x);
+  void method3a<BT3a>(BT3a x);
+  void method3b<BT3b>(BT3b x);
+  void method4a<BT4a>(BT4a x, BT y);
+  void method4b<BT4b>(BT4b x, BT y);
+  void method5a(num x, int y);
+  void method5b(num x, int y);
+  void method6a({Object x, num y});
+  void method6b({int x, Object y});
+  FutureOr method7a(FutureOr o, {FutureOr named});
+
+  String get getter1a;
+  Object get getter1b;
+  int get getter1c;
+  set getter1d(Object x);
+  num get getter1e;
+  set getter1e(Object x);
+
+  void set setter1a(String x);
+  void set setter1b(Object x);
+  void set setter1c(int x);
+  Object get setter1d;
+  num get setter1e;
+  set setter1e(Object x);
+
+  num? get field1a;
+  int? get field1b;
+  double? get field1c;
+
+  void set field2a(num? value);
+  void set field2b(int? value);
+  void set field2c(double? value);
+
+  num? get field3a;
+  int? get field3b;
+  double? get field3c;
+
+  void set field3a(Object? value);
+  void set field3b(Object? value);
+  void set field3c(Object? value);
+
+  void set field4a(num? value);
+  num? get field4b;
+  void set field4b(Object? value);
+}
+
+abstract class C implements A<int>, B<num> {
+  method1a(x);
+  method1b(x);
+  void method1c(x); // error
+  method1d(); // error
+  void method2a(x);
+  void method2b(x);
+  void method3a<CT3a>(x);
+  void method3b<CT3b>(x, [y]);
+  void method4a<CT4a>(x, y);
+  void method4b<CT4b>(x, y, [z]);
+  void method5a(x, y); // error
+  void method5b(num x, num y, [z]); // error
+  void method6a({x, y});
+  void method6b({x, y, z});
+  method7a(o, {named});
+
+  get getter1a;
+  get getter1b;
+  get getter1c; // error
+  get getter1d;
+  get getter1e;
+
+  void set setter1a(x);
+  void set setter1b(x);
+  void set setter1c(x); // error
+  void set setter1d(x);
+  void set setter1e(x);
+
+  final field1a = null;
+  final field1b = null;
+  final field1c = null; // error
+
+  final field2a = null;
+  final field2b = null;
+  final field2c = null; // error
+
+  final field3a = null;
+  final field3b = null;
+  final field3c = null; // error
+
+  var field4a = null;
+  var field4b = null; // error
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.outline.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.outline.expect
new file mode 100644
index 0000000..5e9a2cc
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.outline.expect
@@ -0,0 +1,291 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:114:17: Error: Can't infer a type for 'x' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method1c(x); // error
+//                 ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:10:8: Context: This is one of the overridden members.
+//   void method1c(int x);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:62:8: Context: This is one of the overridden members.
+//   void method1c(String x);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:115:3: Error: Can't infer a return type for 'method1d' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   method1d(); // error
+//   ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:11:10: Context: This is one of the overridden members.
+//   String method1d();
+//          ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:63:7: Context: This is one of the overridden members.
+//   int method1d();
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:122:17: Error: Can't infer a type for 'x' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method5a(x, y); // error
+//                 ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:18:8: Context: This is one of the overridden members.
+//   void method5a(int x, num y);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:70:8: Context: This is one of the overridden members.
+//   void method5a(num x, int y);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:122:20: Error: Can't infer a type for 'y' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method5a(x, y); // error
+//                    ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:18:8: Context: This is one of the overridden members.
+//   void method5a(int x, num y);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:70:8: Context: This is one of the overridden members.
+//   void method5a(num x, int y);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:123:32: Error: Can't infer a type for 'z' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method5b(num x, num y, [z]); // error
+//                                ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:19:8: Context: This is one of the overridden members.
+//   void method5b(int x, num y);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:71:8: Context: This is one of the overridden members.
+//   void method5b(num x, int y);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:130:7: Error: Can't infer a return type for 'getter1c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   get getter1c; // error
+//       ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:26:14: Context: This is one of the overridden members.
+//   String get getter1c;
+//              ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:78:11: Context: This is one of the overridden members.
+//   int get getter1c;
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:142:9: Error: Can't infer a type for 'field1c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   final field1c = null; // error
+//         ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:40:12: Context: This is one of the overridden members.
+//   int? get field1c;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:92:15: Context: This is one of the overridden members.
+//   double? get field1c;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:146:9: Error: Can't infer a type for 'field2c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   final field2c = null; // error
+//         ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:44:12: Context: This is one of the overridden members.
+//   void set field2c(int? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:96:12: Context: This is one of the overridden members.
+//   void set field2c(double? value);
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:150:9: Error: Can't infer a type for 'field3c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   final field3c = null; // error
+//         ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:48:12: Context: This is one of the overridden members.
+//   int? get field3c;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:100:15: Context: This is one of the overridden members.
+//   double? get field3c;
+//               ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:52:12: Context: This is one of the overridden members.
+//   void set field3c(Object? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:104:12: Context: This is one of the overridden members.
+//   void set field3c(Object? value);
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:153:7: Error: Can't infer a type for 'field4b' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field4b = null; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:55:12: Context: This is one of the overridden members.
+//   num? get field4b;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:107:12: Context: This is one of the overridden members.
+//   num? get field4b;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:56:12: Context: This is one of the overridden members.
+//   void set field4b(Object? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:108:12: Context: This is one of the overridden members.
+//   void set field4b(Object? value);
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:136:12: Error: Can't infer a return type for 'setter1c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void set setter1c(x); // error
+//            ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:33:12: Context: This is one of the overridden members.
+//   void set setter1c(String x);
+//            ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:85:12: Context: This is one of the overridden members.
+//   void set setter1c(int x);
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:111:16: Error: Class 'C' inherits multiple members named 'field2c' with incompatible signatures.
+// Try adding a declaration of 'field2c' to 'C'.
+// abstract class C implements A<int>, B<num> {
+//                ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:44:12: Context: This is one of the overridden members.
+//   void set field2c(int? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:96:12: Context: This is one of the overridden members.
+//   void set field2c(double? value);
+//            ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+abstract class A<AT extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::AT%>
+    ;
+  abstract method method1a(core::Object x) → core::String;
+  abstract method method1b(core::String x) → core::Object;
+  abstract method method1c(core::int x) → void;
+  abstract method method1d() → core::String;
+  abstract method method2a(core::Object? x) → void;
+  abstract method method2b(dynamic x) → void;
+  abstract method method3a<AT3a extends core::Object? = dynamic>(self::A::method3a::AT3a% x) → void;
+  abstract method method3b<AT3b extends core::Object? = dynamic>(self::A::method3b::AT3b% x) → void;
+  abstract method method4a<AT4a extends core::Object? = dynamic>(self::A::method4a::AT4a% x, generic-covariant-impl self::A::AT% y) → void;
+  abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, generic-covariant-impl self::A::AT% y) → void;
+  abstract method method5a(core::int x, core::num y) → void;
+  abstract method method5b(core::int x, core::num y) → void;
+  abstract method method6a({core::int x, core::num y}) → void;
+  abstract method method6b({core::num y, core::int x}) → void;
+  method method7a(core::Object? o, {core::Object? named}) → core::Object?
+    ;
+  abstract get getter1a() → core::Object;
+  abstract get getter1b() → core::String;
+  abstract get getter1c() → core::String;
+  abstract set getter1d(core::String x) → void;
+  abstract get getter1e() → core::int;
+  abstract set getter1e(core::int x) → void;
+  abstract set setter1a(core::Object x) → void;
+  abstract set setter1b(core::String x) → void;
+  abstract set setter1c(core::String x) → void;
+  abstract get setter1d() → core::String;
+  abstract get setter1e() → core::int;
+  abstract set setter1e(core::int x) → void;
+  abstract get field1a() → core::int?;
+  abstract get field1b() → core::num?;
+  abstract get field1c() → core::int?;
+  abstract set field2a(core::int? value) → void;
+  abstract set field2b(core::num? value) → void;
+  abstract set field2c(core::int? value) → void;
+  abstract get field3a() → core::int?;
+  abstract get field3b() → core::num?;
+  abstract get field3c() → core::int?;
+  abstract set field3a(core::Object? value) → void;
+  abstract set field3b(core::Object? value) → void;
+  abstract set field3c(core::Object? value) → void;
+  abstract get field4a() → core::num?;
+  abstract get field4b() → core::num?;
+  abstract set field4b(core::Object? value) → void;
+}
+abstract class B<BT extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::BT%>
+    ;
+  abstract method method1a(core::String x) → core::Object;
+  abstract method method1b(core::Object x) → core::String;
+  abstract method method1c(core::String x) → void;
+  abstract method method1d() → core::int;
+  abstract method method2a(dynamic x) → void;
+  abstract method method2b(core::Object? x) → void;
+  abstract method method3a<BT3a extends core::Object? = dynamic>(self::B::method3a::BT3a% x) → void;
+  abstract method method3b<BT3b extends core::Object? = dynamic>(self::B::method3b::BT3b% x) → void;
+  abstract method method4a<BT4a extends core::Object? = dynamic>(self::B::method4a::BT4a% x, generic-covariant-impl self::B::BT% y) → void;
+  abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, generic-covariant-impl self::B::BT% y) → void;
+  abstract method method5a(core::num x, core::int y) → void;
+  abstract method method5b(core::num x, core::int y) → void;
+  abstract method method6a({core::Object x, core::num y}) → void;
+  abstract method method6b({core::int x, core::Object y}) → void;
+  abstract method method7a(FutureOr<dynamic>o, {FutureOr<dynamic>named}) → FutureOr<dynamic>;
+  abstract get getter1a() → core::String;
+  abstract get getter1b() → core::Object;
+  abstract get getter1c() → core::int;
+  abstract set getter1d(core::Object x) → void;
+  abstract get getter1e() → core::num;
+  abstract set getter1e(core::Object x) → void;
+  abstract set setter1a(core::String x) → void;
+  abstract set setter1b(core::Object x) → void;
+  abstract set setter1c(core::int x) → void;
+  abstract get setter1d() → core::Object;
+  abstract get setter1e() → core::num;
+  abstract set setter1e(core::Object x) → void;
+  abstract get field1a() → core::num?;
+  abstract get field1b() → core::int?;
+  abstract get field1c() → core::double?;
+  abstract set field2a(core::num? value) → void;
+  abstract set field2b(core::int? value) → void;
+  abstract set field2c(core::double? value) → void;
+  abstract get field3a() → core::num?;
+  abstract get field3b() → core::int?;
+  abstract get field3c() → core::double?;
+  abstract set field3a(core::Object? value) → void;
+  abstract set field3b(core::Object? value) → void;
+  abstract set field3c(core::Object? value) → void;
+  abstract set field4a(core::num? value) → void;
+  abstract get field4b() → core::num?;
+  abstract set field4b(core::Object? value) → void;
+}
+abstract class C extends core::Object implements self::A<core::int>, self::B<core::num> {
+  final field core::int? field1a;
+  final field core::int? field1b;
+  final field invalid-type field1c;
+  final field core::num? field2a;
+  final field core::num? field2b;
+  final field invalid-type field2c;
+  final field core::int? field3a;
+  final field core::int? field3b;
+  final field invalid-type field3c;
+  field core::num? field4a;
+  field invalid-type field4b;
+  synthetic constructor •() → self::C
+    ;
+  abstract method method1a(core::Object x) → core::String;
+  abstract method method1b(core::Object x) → core::String;
+  abstract method method1c(invalid-type x) → void;
+  abstract method method1d() → invalid-type;
+  abstract method method2a(core::Object? x) → void;
+  abstract method method2b(core::Object? x) → void;
+  abstract method method3a<CT3a extends core::Object? = dynamic>(self::C::method3a::CT3a% x) → void;
+  abstract method method3b<CT3b extends core::Object? = dynamic>(self::C::method3b::CT3b% x, [dynamic y]) → void;
+  abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, generic-covariant-impl core::num y) → void;
+  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, generic-covariant-impl core::num y, [dynamic z]) → void;
+  abstract method method5a(invalid-type x, invalid-type y) → void;
+  abstract method method5b(core::num x, core::num y, [invalid-type z]) → void;
+  abstract method method6a({core::Object x, core::num y}) → void;
+  abstract method method6b({core::int x, core::Object y, dynamic z}) → void;
+  abstract method method7a(core::Object? o, {core::Object? named}) → core::Object?;
+  abstract get getter1a() → core::String;
+  abstract get getter1b() → core::String;
+  abstract get getter1c() → invalid-type;
+  abstract get getter1d() → core::Object;
+  abstract get getter1e() → core::int;
+  abstract set setter1a(core::Object x) → void;
+  abstract set setter1b(core::Object x) → void;
+  abstract set setter1c(invalid-type x) → void;
+  abstract set setter1d(core::String x) → void;
+  abstract set setter1e(core::Object x) → void;
+  abstract forwarding-stub set getter1d(core::Object x) → void;
+  abstract forwarding-stub set getter1e(core::Object x) → void;
+  abstract forwarding-stub set field2a(core::num? value) → void;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.strong.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.strong.expect
new file mode 100644
index 0000000..71e2237
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.strong.expect
@@ -0,0 +1,296 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:114:17: Error: Can't infer a type for 'x' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method1c(x); // error
+//                 ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:10:8: Context: This is one of the overridden members.
+//   void method1c(int x);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:62:8: Context: This is one of the overridden members.
+//   void method1c(String x);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:115:3: Error: Can't infer a return type for 'method1d' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   method1d(); // error
+//   ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:11:10: Context: This is one of the overridden members.
+//   String method1d();
+//          ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:63:7: Context: This is one of the overridden members.
+//   int method1d();
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:122:17: Error: Can't infer a type for 'x' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method5a(x, y); // error
+//                 ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:18:8: Context: This is one of the overridden members.
+//   void method5a(int x, num y);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:70:8: Context: This is one of the overridden members.
+//   void method5a(num x, int y);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:122:20: Error: Can't infer a type for 'y' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method5a(x, y); // error
+//                    ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:18:8: Context: This is one of the overridden members.
+//   void method5a(int x, num y);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:70:8: Context: This is one of the overridden members.
+//   void method5a(num x, int y);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:123:32: Error: Can't infer a type for 'z' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method5b(num x, num y, [z]); // error
+//                                ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:19:8: Context: This is one of the overridden members.
+//   void method5b(int x, num y);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:71:8: Context: This is one of the overridden members.
+//   void method5b(num x, int y);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:130:7: Error: Can't infer a return type for 'getter1c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   get getter1c; // error
+//       ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:26:14: Context: This is one of the overridden members.
+//   String get getter1c;
+//              ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:78:11: Context: This is one of the overridden members.
+//   int get getter1c;
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:142:9: Error: Can't infer a type for 'field1c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   final field1c = null; // error
+//         ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:40:12: Context: This is one of the overridden members.
+//   int? get field1c;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:92:15: Context: This is one of the overridden members.
+//   double? get field1c;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:146:9: Error: Can't infer a type for 'field2c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   final field2c = null; // error
+//         ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:44:12: Context: This is one of the overridden members.
+//   void set field2c(int? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:96:12: Context: This is one of the overridden members.
+//   void set field2c(double? value);
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:150:9: Error: Can't infer a type for 'field3c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   final field3c = null; // error
+//         ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:48:12: Context: This is one of the overridden members.
+//   int? get field3c;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:100:15: Context: This is one of the overridden members.
+//   double? get field3c;
+//               ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:52:12: Context: This is one of the overridden members.
+//   void set field3c(Object? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:104:12: Context: This is one of the overridden members.
+//   void set field3c(Object? value);
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:153:7: Error: Can't infer a type for 'field4b' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field4b = null; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:55:12: Context: This is one of the overridden members.
+//   num? get field4b;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:107:12: Context: This is one of the overridden members.
+//   num? get field4b;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:56:12: Context: This is one of the overridden members.
+//   void set field4b(Object? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:108:12: Context: This is one of the overridden members.
+//   void set field4b(Object? value);
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:136:12: Error: Can't infer a return type for 'setter1c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void set setter1c(x); // error
+//            ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:33:12: Context: This is one of the overridden members.
+//   void set setter1c(String x);
+//            ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:85:12: Context: This is one of the overridden members.
+//   void set setter1c(int x);
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:111:16: Error: Class 'C' inherits multiple members named 'field2c' with incompatible signatures.
+// Try adding a declaration of 'field2c' to 'C'.
+// abstract class C implements A<int>, B<num> {
+//                ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:44:12: Context: This is one of the overridden members.
+//   void set field2c(int? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:96:12: Context: This is one of the overridden members.
+//   void set field2c(double? value);
+//            ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+abstract class A<AT extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::AT%>
+    : super core::Object::•()
+    ;
+  abstract method method1a(core::Object x) → core::String;
+  abstract method method1b(core::String x) → core::Object;
+  abstract method method1c(core::int x) → void;
+  abstract method method1d() → core::String;
+  abstract method method2a(core::Object? x) → void;
+  abstract method method2b(dynamic x) → void;
+  abstract method method3a<AT3a extends core::Object? = dynamic>(self::A::method3a::AT3a% x) → void;
+  abstract method method3b<AT3b extends core::Object? = dynamic>(self::A::method3b::AT3b% x) → void;
+  abstract method method4a<AT4a extends core::Object? = dynamic>(self::A::method4a::AT4a% x, generic-covariant-impl self::A::AT% y) → void;
+  abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, generic-covariant-impl self::A::AT% y) → void;
+  abstract method method5a(core::int x, core::num y) → void;
+  abstract method method5b(core::int x, core::num y) → void;
+  abstract method method6a({core::int x = #C1, core::num y = #C1}) → void;
+  abstract method method6b({core::num y = #C1, core::int x = #C1}) → void;
+  method method7a(core::Object? o, {core::Object? named = #C1}) → core::Object? {}
+  abstract get getter1a() → core::Object;
+  abstract get getter1b() → core::String;
+  abstract get getter1c() → core::String;
+  abstract set getter1d(core::String x) → void;
+  abstract get getter1e() → core::int;
+  abstract set getter1e(core::int x) → void;
+  abstract set setter1a(core::Object x) → void;
+  abstract set setter1b(core::String x) → void;
+  abstract set setter1c(core::String x) → void;
+  abstract get setter1d() → core::String;
+  abstract get setter1e() → core::int;
+  abstract set setter1e(core::int x) → void;
+  abstract get field1a() → core::int?;
+  abstract get field1b() → core::num?;
+  abstract get field1c() → core::int?;
+  abstract set field2a(core::int? value) → void;
+  abstract set field2b(core::num? value) → void;
+  abstract set field2c(core::int? value) → void;
+  abstract get field3a() → core::int?;
+  abstract get field3b() → core::num?;
+  abstract get field3c() → core::int?;
+  abstract set field3a(core::Object? value) → void;
+  abstract set field3b(core::Object? value) → void;
+  abstract set field3c(core::Object? value) → void;
+  abstract get field4a() → core::num?;
+  abstract get field4b() → core::num?;
+  abstract set field4b(core::Object? value) → void;
+}
+abstract class B<BT extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::BT%>
+    : super core::Object::•()
+    ;
+  abstract method method1a(core::String x) → core::Object;
+  abstract method method1b(core::Object x) → core::String;
+  abstract method method1c(core::String x) → void;
+  abstract method method1d() → core::int;
+  abstract method method2a(dynamic x) → void;
+  abstract method method2b(core::Object? x) → void;
+  abstract method method3a<BT3a extends core::Object? = dynamic>(self::B::method3a::BT3a% x) → void;
+  abstract method method3b<BT3b extends core::Object? = dynamic>(self::B::method3b::BT3b% x) → void;
+  abstract method method4a<BT4a extends core::Object? = dynamic>(self::B::method4a::BT4a% x, generic-covariant-impl self::B::BT% y) → void;
+  abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, generic-covariant-impl self::B::BT% y) → void;
+  abstract method method5a(core::num x, core::int y) → void;
+  abstract method method5b(core::num x, core::int y) → void;
+  abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
+  abstract method method6b({core::int x = #C1, core::Object y = #C1}) → void;
+  abstract method method7a(FutureOr<dynamic>o, {FutureOr<dynamic>named = #C1}) → FutureOr<dynamic>;
+  abstract get getter1a() → core::String;
+  abstract get getter1b() → core::Object;
+  abstract get getter1c() → core::int;
+  abstract set getter1d(core::Object x) → void;
+  abstract get getter1e() → core::num;
+  abstract set getter1e(core::Object x) → void;
+  abstract set setter1a(core::String x) → void;
+  abstract set setter1b(core::Object x) → void;
+  abstract set setter1c(core::int x) → void;
+  abstract get setter1d() → core::Object;
+  abstract get setter1e() → core::num;
+  abstract set setter1e(core::Object x) → void;
+  abstract get field1a() → core::num?;
+  abstract get field1b() → core::int?;
+  abstract get field1c() → core::double?;
+  abstract set field2a(core::num? value) → void;
+  abstract set field2b(core::int? value) → void;
+  abstract set field2c(core::double? value) → void;
+  abstract get field3a() → core::num?;
+  abstract get field3b() → core::int?;
+  abstract get field3c() → core::double?;
+  abstract set field3a(core::Object? value) → void;
+  abstract set field3b(core::Object? value) → void;
+  abstract set field3c(core::Object? value) → void;
+  abstract set field4a(core::num? value) → void;
+  abstract get field4b() → core::num?;
+  abstract set field4b(core::Object? value) → void;
+}
+abstract class C extends core::Object implements self::A<core::int>, self::B<core::num> {
+  final field core::int? field1a = null;
+  final field core::int? field1b = null;
+  final field invalid-type field1c = null;
+  final field core::num? field2a = null;
+  final field core::num? field2b = null;
+  final field invalid-type field2c = null;
+  final field core::int? field3a = null;
+  final field core::int? field3b = null;
+  final field invalid-type field3c = null;
+  field core::num? field4a = null;
+  field invalid-type field4b = null;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  abstract method method1a(core::Object x) → core::String;
+  abstract method method1b(core::Object x) → core::String;
+  abstract method method1c(invalid-type x) → void;
+  abstract method method1d() → invalid-type;
+  abstract method method2a(core::Object? x) → void;
+  abstract method method2b(core::Object? x) → void;
+  abstract method method3a<CT3a extends core::Object? = dynamic>(self::C::method3a::CT3a% x) → void;
+  abstract method method3b<CT3b extends core::Object? = dynamic>(self::C::method3b::CT3b% x, [dynamic y = #C1]) → void;
+  abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, generic-covariant-impl core::num y) → void;
+  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, generic-covariant-impl core::num y, [dynamic z = #C1]) → void;
+  abstract method method5a(invalid-type x, invalid-type y) → void;
+  abstract method method5b(core::num x, core::num y, [invalid-type z = #C1]) → void;
+  abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
+  abstract method method6b({core::int x = #C1, core::Object y = #C1, dynamic z = #C1}) → void;
+  abstract method method7a(core::Object? o, {core::Object? named = #C1}) → core::Object?;
+  abstract get getter1a() → core::String;
+  abstract get getter1b() → core::String;
+  abstract get getter1c() → invalid-type;
+  abstract get getter1d() → core::Object;
+  abstract get getter1e() → core::int;
+  abstract set setter1a(core::Object x) → void;
+  abstract set setter1b(core::Object x) → void;
+  abstract set setter1c(invalid-type x) → void;
+  abstract set setter1d(core::String x) → void;
+  abstract set setter1e(core::Object x) → void;
+  abstract forwarding-stub set getter1d(core::Object x) → void;
+  abstract forwarding-stub set getter1e(core::Object x) → void;
+  abstract forwarding-stub set field2a(core::num? value) → void;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.strong.transformed.expect
new file mode 100644
index 0000000..71e2237
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.strong.transformed.expect
@@ -0,0 +1,296 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:114:17: Error: Can't infer a type for 'x' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method1c(x); // error
+//                 ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:10:8: Context: This is one of the overridden members.
+//   void method1c(int x);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:62:8: Context: This is one of the overridden members.
+//   void method1c(String x);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:115:3: Error: Can't infer a return type for 'method1d' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   method1d(); // error
+//   ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:11:10: Context: This is one of the overridden members.
+//   String method1d();
+//          ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:63:7: Context: This is one of the overridden members.
+//   int method1d();
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:122:17: Error: Can't infer a type for 'x' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method5a(x, y); // error
+//                 ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:18:8: Context: This is one of the overridden members.
+//   void method5a(int x, num y);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:70:8: Context: This is one of the overridden members.
+//   void method5a(num x, int y);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:122:20: Error: Can't infer a type for 'y' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method5a(x, y); // error
+//                    ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:18:8: Context: This is one of the overridden members.
+//   void method5a(int x, num y);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:70:8: Context: This is one of the overridden members.
+//   void method5a(num x, int y);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:123:32: Error: Can't infer a type for 'z' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method5b(num x, num y, [z]); // error
+//                                ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:19:8: Context: This is one of the overridden members.
+//   void method5b(int x, num y);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:71:8: Context: This is one of the overridden members.
+//   void method5b(num x, int y);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:130:7: Error: Can't infer a return type for 'getter1c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   get getter1c; // error
+//       ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:26:14: Context: This is one of the overridden members.
+//   String get getter1c;
+//              ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:78:11: Context: This is one of the overridden members.
+//   int get getter1c;
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:142:9: Error: Can't infer a type for 'field1c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   final field1c = null; // error
+//         ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:40:12: Context: This is one of the overridden members.
+//   int? get field1c;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:92:15: Context: This is one of the overridden members.
+//   double? get field1c;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:146:9: Error: Can't infer a type for 'field2c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   final field2c = null; // error
+//         ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:44:12: Context: This is one of the overridden members.
+//   void set field2c(int? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:96:12: Context: This is one of the overridden members.
+//   void set field2c(double? value);
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:150:9: Error: Can't infer a type for 'field3c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   final field3c = null; // error
+//         ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:48:12: Context: This is one of the overridden members.
+//   int? get field3c;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:100:15: Context: This is one of the overridden members.
+//   double? get field3c;
+//               ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:52:12: Context: This is one of the overridden members.
+//   void set field3c(Object? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:104:12: Context: This is one of the overridden members.
+//   void set field3c(Object? value);
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:153:7: Error: Can't infer a type for 'field4b' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field4b = null; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:55:12: Context: This is one of the overridden members.
+//   num? get field4b;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:107:12: Context: This is one of the overridden members.
+//   num? get field4b;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:56:12: Context: This is one of the overridden members.
+//   void set field4b(Object? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:108:12: Context: This is one of the overridden members.
+//   void set field4b(Object? value);
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:136:12: Error: Can't infer a return type for 'setter1c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void set setter1c(x); // error
+//            ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:33:12: Context: This is one of the overridden members.
+//   void set setter1c(String x);
+//            ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:85:12: Context: This is one of the overridden members.
+//   void set setter1c(int x);
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:111:16: Error: Class 'C' inherits multiple members named 'field2c' with incompatible signatures.
+// Try adding a declaration of 'field2c' to 'C'.
+// abstract class C implements A<int>, B<num> {
+//                ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:44:12: Context: This is one of the overridden members.
+//   void set field2c(int? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:96:12: Context: This is one of the overridden members.
+//   void set field2c(double? value);
+//            ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+abstract class A<AT extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::AT%>
+    : super core::Object::•()
+    ;
+  abstract method method1a(core::Object x) → core::String;
+  abstract method method1b(core::String x) → core::Object;
+  abstract method method1c(core::int x) → void;
+  abstract method method1d() → core::String;
+  abstract method method2a(core::Object? x) → void;
+  abstract method method2b(dynamic x) → void;
+  abstract method method3a<AT3a extends core::Object? = dynamic>(self::A::method3a::AT3a% x) → void;
+  abstract method method3b<AT3b extends core::Object? = dynamic>(self::A::method3b::AT3b% x) → void;
+  abstract method method4a<AT4a extends core::Object? = dynamic>(self::A::method4a::AT4a% x, generic-covariant-impl self::A::AT% y) → void;
+  abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, generic-covariant-impl self::A::AT% y) → void;
+  abstract method method5a(core::int x, core::num y) → void;
+  abstract method method5b(core::int x, core::num y) → void;
+  abstract method method6a({core::int x = #C1, core::num y = #C1}) → void;
+  abstract method method6b({core::num y = #C1, core::int x = #C1}) → void;
+  method method7a(core::Object? o, {core::Object? named = #C1}) → core::Object? {}
+  abstract get getter1a() → core::Object;
+  abstract get getter1b() → core::String;
+  abstract get getter1c() → core::String;
+  abstract set getter1d(core::String x) → void;
+  abstract get getter1e() → core::int;
+  abstract set getter1e(core::int x) → void;
+  abstract set setter1a(core::Object x) → void;
+  abstract set setter1b(core::String x) → void;
+  abstract set setter1c(core::String x) → void;
+  abstract get setter1d() → core::String;
+  abstract get setter1e() → core::int;
+  abstract set setter1e(core::int x) → void;
+  abstract get field1a() → core::int?;
+  abstract get field1b() → core::num?;
+  abstract get field1c() → core::int?;
+  abstract set field2a(core::int? value) → void;
+  abstract set field2b(core::num? value) → void;
+  abstract set field2c(core::int? value) → void;
+  abstract get field3a() → core::int?;
+  abstract get field3b() → core::num?;
+  abstract get field3c() → core::int?;
+  abstract set field3a(core::Object? value) → void;
+  abstract set field3b(core::Object? value) → void;
+  abstract set field3c(core::Object? value) → void;
+  abstract get field4a() → core::num?;
+  abstract get field4b() → core::num?;
+  abstract set field4b(core::Object? value) → void;
+}
+abstract class B<BT extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::BT%>
+    : super core::Object::•()
+    ;
+  abstract method method1a(core::String x) → core::Object;
+  abstract method method1b(core::Object x) → core::String;
+  abstract method method1c(core::String x) → void;
+  abstract method method1d() → core::int;
+  abstract method method2a(dynamic x) → void;
+  abstract method method2b(core::Object? x) → void;
+  abstract method method3a<BT3a extends core::Object? = dynamic>(self::B::method3a::BT3a% x) → void;
+  abstract method method3b<BT3b extends core::Object? = dynamic>(self::B::method3b::BT3b% x) → void;
+  abstract method method4a<BT4a extends core::Object? = dynamic>(self::B::method4a::BT4a% x, generic-covariant-impl self::B::BT% y) → void;
+  abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, generic-covariant-impl self::B::BT% y) → void;
+  abstract method method5a(core::num x, core::int y) → void;
+  abstract method method5b(core::num x, core::int y) → void;
+  abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
+  abstract method method6b({core::int x = #C1, core::Object y = #C1}) → void;
+  abstract method method7a(FutureOr<dynamic>o, {FutureOr<dynamic>named = #C1}) → FutureOr<dynamic>;
+  abstract get getter1a() → core::String;
+  abstract get getter1b() → core::Object;
+  abstract get getter1c() → core::int;
+  abstract set getter1d(core::Object x) → void;
+  abstract get getter1e() → core::num;
+  abstract set getter1e(core::Object x) → void;
+  abstract set setter1a(core::String x) → void;
+  abstract set setter1b(core::Object x) → void;
+  abstract set setter1c(core::int x) → void;
+  abstract get setter1d() → core::Object;
+  abstract get setter1e() → core::num;
+  abstract set setter1e(core::Object x) → void;
+  abstract get field1a() → core::num?;
+  abstract get field1b() → core::int?;
+  abstract get field1c() → core::double?;
+  abstract set field2a(core::num? value) → void;
+  abstract set field2b(core::int? value) → void;
+  abstract set field2c(core::double? value) → void;
+  abstract get field3a() → core::num?;
+  abstract get field3b() → core::int?;
+  abstract get field3c() → core::double?;
+  abstract set field3a(core::Object? value) → void;
+  abstract set field3b(core::Object? value) → void;
+  abstract set field3c(core::Object? value) → void;
+  abstract set field4a(core::num? value) → void;
+  abstract get field4b() → core::num?;
+  abstract set field4b(core::Object? value) → void;
+}
+abstract class C extends core::Object implements self::A<core::int>, self::B<core::num> {
+  final field core::int? field1a = null;
+  final field core::int? field1b = null;
+  final field invalid-type field1c = null;
+  final field core::num? field2a = null;
+  final field core::num? field2b = null;
+  final field invalid-type field2c = null;
+  final field core::int? field3a = null;
+  final field core::int? field3b = null;
+  final field invalid-type field3c = null;
+  field core::num? field4a = null;
+  field invalid-type field4b = null;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  abstract method method1a(core::Object x) → core::String;
+  abstract method method1b(core::Object x) → core::String;
+  abstract method method1c(invalid-type x) → void;
+  abstract method method1d() → invalid-type;
+  abstract method method2a(core::Object? x) → void;
+  abstract method method2b(core::Object? x) → void;
+  abstract method method3a<CT3a extends core::Object? = dynamic>(self::C::method3a::CT3a% x) → void;
+  abstract method method3b<CT3b extends core::Object? = dynamic>(self::C::method3b::CT3b% x, [dynamic y = #C1]) → void;
+  abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, generic-covariant-impl core::num y) → void;
+  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, generic-covariant-impl core::num y, [dynamic z = #C1]) → void;
+  abstract method method5a(invalid-type x, invalid-type y) → void;
+  abstract method method5b(core::num x, core::num y, [invalid-type z = #C1]) → void;
+  abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
+  abstract method method6b({core::int x = #C1, core::Object y = #C1, dynamic z = #C1}) → void;
+  abstract method method7a(core::Object? o, {core::Object? named = #C1}) → core::Object?;
+  abstract get getter1a() → core::String;
+  abstract get getter1b() → core::String;
+  abstract get getter1c() → invalid-type;
+  abstract get getter1d() → core::Object;
+  abstract get getter1e() → core::int;
+  abstract set setter1a(core::Object x) → void;
+  abstract set setter1b(core::Object x) → void;
+  abstract set setter1c(invalid-type x) → void;
+  abstract set setter1d(core::String x) → void;
+  abstract set setter1e(core::Object x) → void;
+  abstract forwarding-stub set getter1d(core::Object x) → void;
+  abstract forwarding-stub set getter1e(core::Object x) → void;
+  abstract forwarding-stub set field2a(core::num? value) → void;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.textual_outline.expect
new file mode 100644
index 0000000..2a10caa
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.textual_outline.expect
@@ -0,0 +1,132 @@
+import 'dart:async';
+
+abstract class A<AT> {
+  String method1a(Object x);
+  Object method1b(String x);
+  void method1c(int x);
+  String method1d();
+  void method2a(Object? x);
+  void method2b(dynamic x);
+  void method3a<AT3a>(AT3a x);
+  void method3b<AT3b>(AT3b x);
+  void method4a<AT4a>(AT4a x, AT y);
+  void method4b<AT4b>(AT4b x, AT y);
+  void method5a(int x, num y);
+  void method5b(int x, num y);
+  void method6a({int x, num y});
+  void method6b({num y, int x});
+  Object? method7a(Object? o, {Object? named}) {}
+  Object get getter1a;
+  String get getter1b;
+  String get getter1c;
+  set getter1d(String x);
+  int get getter1e;
+  set getter1e(int x);
+  void set setter1a(Object x);
+  void set setter1b(String x);
+  void set setter1c(String x);
+  String get setter1d;
+  int get setter1e;
+  set setter1e(int x);
+  int? get field1a;
+  num? get field1b;
+  int? get field1c;
+  void set field2a(int? value);
+  void set field2b(num? value);
+  void set field2c(int? value);
+  int? get field3a;
+  num? get field3b;
+  int? get field3c;
+  void set field3a(Object? value);
+  void set field3b(Object? value);
+  void set field3c(Object? value);
+  num? get field4a;
+  num? get field4b;
+  void set field4b(Object? value);
+}
+
+abstract class B<BT> {
+  Object method1a(String x);
+  String method1b(Object x);
+  void method1c(String x);
+  int method1d();
+  void method2a(dynamic x);
+  void method2b(Object? x);
+  void method3a<BT3a>(BT3a x);
+  void method3b<BT3b>(BT3b x);
+  void method4a<BT4a>(BT4a x, BT y);
+  void method4b<BT4b>(BT4b x, BT y);
+  void method5a(num x, int y);
+  void method5b(num x, int y);
+  void method6a({Object x, num y});
+  void method6b({int x, Object y});
+  FutureOr method7a(FutureOr o, {FutureOr named});
+  String get getter1a;
+  Object get getter1b;
+  int get getter1c;
+  set getter1d(Object x);
+  num get getter1e;
+  set getter1e(Object x);
+  void set setter1a(String x);
+  void set setter1b(Object x);
+  void set setter1c(int x);
+  Object get setter1d;
+  num get setter1e;
+  set setter1e(Object x);
+  num? get field1a;
+  int? get field1b;
+  double? get field1c;
+  void set field2a(num? value);
+  void set field2b(int? value);
+  void set field2c(double? value);
+  num? get field3a;
+  int? get field3b;
+  double? get field3c;
+  void set field3a(Object? value);
+  void set field3b(Object? value);
+  void set field3c(Object? value);
+  void set field4a(num? value);
+  num? get field4b;
+  void set field4b(Object? value);
+}
+
+abstract class C implements A<int>, B<num> {
+  method1a(x);
+  method1b(x);
+  void method1c(x);
+  method1d();
+  void method2a(x);
+  void method2b(x);
+  void method3a<CT3a>(x);
+  void method3b<CT3b>(x, [y]);
+  void method4a<CT4a>(x, y);
+  void method4b<CT4b>(x, y, [z]);
+  void method5a(x, y);
+  void method5b(num x, num y, [z]);
+  void method6a({x, y});
+  void method6b({x, y, z});
+  method7a(o, {named});
+  get getter1a;
+  get getter1b;
+  get getter1c;
+  get getter1d;
+  get getter1e;
+  void set setter1a(x);
+  void set setter1b(x);
+  void set setter1c(x);
+  void set setter1d(x);
+  void set setter1e(x);
+  final field1a = null;
+  final field1b = null;
+  final field1c = null;
+  final field2a = null;
+  final field2b = null;
+  final field2c = null;
+  final field3a = null;
+  final field3b = null;
+  final field3c = null;
+  var field4a = null;
+  var field4b = null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..ef0f7cf
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.textual_outline_modelled.expect
@@ -0,0 +1,132 @@
+import 'dart:async';
+
+abstract class A<AT> {
+  Object? method7a(Object? o, {Object? named}) {}
+  Object get getter1a;
+  Object method1b(String x);
+  String get getter1b;
+  String get getter1c;
+  String get setter1d;
+  String method1a(Object x);
+  String method1d();
+  int? get field1a;
+  int? get field1c;
+  int? get field3a;
+  int? get field3c;
+  int get getter1e;
+  int get setter1e;
+  num? get field1b;
+  num? get field3b;
+  num? get field4a;
+  num? get field4b;
+  set getter1d(String x);
+  set getter1e(int x);
+  set setter1e(int x);
+  void method1c(int x);
+  void method2a(Object? x);
+  void method2b(dynamic x);
+  void method3a<AT3a>(AT3a x);
+  void method3b<AT3b>(AT3b x);
+  void method4a<AT4a>(AT4a x, AT y);
+  void method4b<AT4b>(AT4b x, AT y);
+  void method5a(int x, num y);
+  void method5b(int x, num y);
+  void method6a({int x, num y});
+  void method6b({num y, int x});
+  void set field2a(int? value);
+  void set field2b(num? value);
+  void set field2c(int? value);
+  void set field3a(Object? value);
+  void set field3b(Object? value);
+  void set field3c(Object? value);
+  void set field4b(Object? value);
+  void set setter1a(Object x);
+  void set setter1b(String x);
+  void set setter1c(String x);
+}
+
+abstract class B<BT> {
+  FutureOr method7a(FutureOr o, {FutureOr named});
+  Object get getter1b;
+  Object get setter1d;
+  Object method1a(String x);
+  String get getter1a;
+  String method1b(Object x);
+  double? get field1c;
+  double? get field3c;
+  int? get field1b;
+  int? get field3b;
+  int get getter1c;
+  int method1d();
+  num? get field1a;
+  num? get field3a;
+  num? get field4b;
+  num get getter1e;
+  num get setter1e;
+  set getter1d(Object x);
+  set getter1e(Object x);
+  set setter1e(Object x);
+  void method1c(String x);
+  void method2a(dynamic x);
+  void method2b(Object? x);
+  void method3a<BT3a>(BT3a x);
+  void method3b<BT3b>(BT3b x);
+  void method4a<BT4a>(BT4a x, BT y);
+  void method4b<BT4b>(BT4b x, BT y);
+  void method5a(num x, int y);
+  void method5b(num x, int y);
+  void method6a({Object x, num y});
+  void method6b({int x, Object y});
+  void set field2a(num? value);
+  void set field2b(int? value);
+  void set field2c(double? value);
+  void set field3a(Object? value);
+  void set field3b(Object? value);
+  void set field3c(Object? value);
+  void set field4a(num? value);
+  void set field4b(Object? value);
+  void set setter1a(String x);
+  void set setter1b(Object x);
+  void set setter1c(int x);
+}
+
+abstract class C implements A<int>, B<num> {
+  final field1a = null;
+  final field1b = null;
+  final field1c = null;
+  final field2a = null;
+  final field2b = null;
+  final field2c = null;
+  final field3a = null;
+  final field3b = null;
+  final field3c = null;
+  get getter1a;
+  get getter1b;
+  get getter1c;
+  get getter1d;
+  get getter1e;
+  method1a(x);
+  method1b(x);
+  method1d();
+  method7a(o, {named});
+  var field4a = null;
+  var field4b = null;
+  void method1c(x);
+  void method2a(x);
+  void method2b(x);
+  void method3a<CT3a>(x);
+  void method3b<CT3b>(x, [y]);
+  void method4a<CT4a>(x, y);
+  void method4b<CT4b>(x, y, [z]);
+  void method5a(x, y);
+  void method5b(num x, num y, [z]);
+  void method6a({x, y});
+  void method6b({x, y, z});
+  void set setter1a(x);
+  void set setter1b(x);
+  void set setter1c(x);
+  void set setter1d(x);
+  void set setter1e(x);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.weak.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.expect
new file mode 100644
index 0000000..71e2237
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.expect
@@ -0,0 +1,296 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:114:17: Error: Can't infer a type for 'x' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method1c(x); // error
+//                 ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:10:8: Context: This is one of the overridden members.
+//   void method1c(int x);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:62:8: Context: This is one of the overridden members.
+//   void method1c(String x);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:115:3: Error: Can't infer a return type for 'method1d' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   method1d(); // error
+//   ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:11:10: Context: This is one of the overridden members.
+//   String method1d();
+//          ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:63:7: Context: This is one of the overridden members.
+//   int method1d();
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:122:17: Error: Can't infer a type for 'x' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method5a(x, y); // error
+//                 ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:18:8: Context: This is one of the overridden members.
+//   void method5a(int x, num y);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:70:8: Context: This is one of the overridden members.
+//   void method5a(num x, int y);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:122:20: Error: Can't infer a type for 'y' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method5a(x, y); // error
+//                    ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:18:8: Context: This is one of the overridden members.
+//   void method5a(int x, num y);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:70:8: Context: This is one of the overridden members.
+//   void method5a(num x, int y);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:123:32: Error: Can't infer a type for 'z' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method5b(num x, num y, [z]); // error
+//                                ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:19:8: Context: This is one of the overridden members.
+//   void method5b(int x, num y);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:71:8: Context: This is one of the overridden members.
+//   void method5b(num x, int y);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:130:7: Error: Can't infer a return type for 'getter1c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   get getter1c; // error
+//       ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:26:14: Context: This is one of the overridden members.
+//   String get getter1c;
+//              ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:78:11: Context: This is one of the overridden members.
+//   int get getter1c;
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:142:9: Error: Can't infer a type for 'field1c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   final field1c = null; // error
+//         ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:40:12: Context: This is one of the overridden members.
+//   int? get field1c;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:92:15: Context: This is one of the overridden members.
+//   double? get field1c;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:146:9: Error: Can't infer a type for 'field2c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   final field2c = null; // error
+//         ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:44:12: Context: This is one of the overridden members.
+//   void set field2c(int? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:96:12: Context: This is one of the overridden members.
+//   void set field2c(double? value);
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:150:9: Error: Can't infer a type for 'field3c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   final field3c = null; // error
+//         ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:48:12: Context: This is one of the overridden members.
+//   int? get field3c;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:100:15: Context: This is one of the overridden members.
+//   double? get field3c;
+//               ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:52:12: Context: This is one of the overridden members.
+//   void set field3c(Object? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:104:12: Context: This is one of the overridden members.
+//   void set field3c(Object? value);
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:153:7: Error: Can't infer a type for 'field4b' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field4b = null; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:55:12: Context: This is one of the overridden members.
+//   num? get field4b;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:107:12: Context: This is one of the overridden members.
+//   num? get field4b;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:56:12: Context: This is one of the overridden members.
+//   void set field4b(Object? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:108:12: Context: This is one of the overridden members.
+//   void set field4b(Object? value);
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:136:12: Error: Can't infer a return type for 'setter1c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void set setter1c(x); // error
+//            ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:33:12: Context: This is one of the overridden members.
+//   void set setter1c(String x);
+//            ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:85:12: Context: This is one of the overridden members.
+//   void set setter1c(int x);
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:111:16: Error: Class 'C' inherits multiple members named 'field2c' with incompatible signatures.
+// Try adding a declaration of 'field2c' to 'C'.
+// abstract class C implements A<int>, B<num> {
+//                ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:44:12: Context: This is one of the overridden members.
+//   void set field2c(int? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:96:12: Context: This is one of the overridden members.
+//   void set field2c(double? value);
+//            ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+abstract class A<AT extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::AT%>
+    : super core::Object::•()
+    ;
+  abstract method method1a(core::Object x) → core::String;
+  abstract method method1b(core::String x) → core::Object;
+  abstract method method1c(core::int x) → void;
+  abstract method method1d() → core::String;
+  abstract method method2a(core::Object? x) → void;
+  abstract method method2b(dynamic x) → void;
+  abstract method method3a<AT3a extends core::Object? = dynamic>(self::A::method3a::AT3a% x) → void;
+  abstract method method3b<AT3b extends core::Object? = dynamic>(self::A::method3b::AT3b% x) → void;
+  abstract method method4a<AT4a extends core::Object? = dynamic>(self::A::method4a::AT4a% x, generic-covariant-impl self::A::AT% y) → void;
+  abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, generic-covariant-impl self::A::AT% y) → void;
+  abstract method method5a(core::int x, core::num y) → void;
+  abstract method method5b(core::int x, core::num y) → void;
+  abstract method method6a({core::int x = #C1, core::num y = #C1}) → void;
+  abstract method method6b({core::num y = #C1, core::int x = #C1}) → void;
+  method method7a(core::Object? o, {core::Object? named = #C1}) → core::Object? {}
+  abstract get getter1a() → core::Object;
+  abstract get getter1b() → core::String;
+  abstract get getter1c() → core::String;
+  abstract set getter1d(core::String x) → void;
+  abstract get getter1e() → core::int;
+  abstract set getter1e(core::int x) → void;
+  abstract set setter1a(core::Object x) → void;
+  abstract set setter1b(core::String x) → void;
+  abstract set setter1c(core::String x) → void;
+  abstract get setter1d() → core::String;
+  abstract get setter1e() → core::int;
+  abstract set setter1e(core::int x) → void;
+  abstract get field1a() → core::int?;
+  abstract get field1b() → core::num?;
+  abstract get field1c() → core::int?;
+  abstract set field2a(core::int? value) → void;
+  abstract set field2b(core::num? value) → void;
+  abstract set field2c(core::int? value) → void;
+  abstract get field3a() → core::int?;
+  abstract get field3b() → core::num?;
+  abstract get field3c() → core::int?;
+  abstract set field3a(core::Object? value) → void;
+  abstract set field3b(core::Object? value) → void;
+  abstract set field3c(core::Object? value) → void;
+  abstract get field4a() → core::num?;
+  abstract get field4b() → core::num?;
+  abstract set field4b(core::Object? value) → void;
+}
+abstract class B<BT extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::BT%>
+    : super core::Object::•()
+    ;
+  abstract method method1a(core::String x) → core::Object;
+  abstract method method1b(core::Object x) → core::String;
+  abstract method method1c(core::String x) → void;
+  abstract method method1d() → core::int;
+  abstract method method2a(dynamic x) → void;
+  abstract method method2b(core::Object? x) → void;
+  abstract method method3a<BT3a extends core::Object? = dynamic>(self::B::method3a::BT3a% x) → void;
+  abstract method method3b<BT3b extends core::Object? = dynamic>(self::B::method3b::BT3b% x) → void;
+  abstract method method4a<BT4a extends core::Object? = dynamic>(self::B::method4a::BT4a% x, generic-covariant-impl self::B::BT% y) → void;
+  abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, generic-covariant-impl self::B::BT% y) → void;
+  abstract method method5a(core::num x, core::int y) → void;
+  abstract method method5b(core::num x, core::int y) → void;
+  abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
+  abstract method method6b({core::int x = #C1, core::Object y = #C1}) → void;
+  abstract method method7a(FutureOr<dynamic>o, {FutureOr<dynamic>named = #C1}) → FutureOr<dynamic>;
+  abstract get getter1a() → core::String;
+  abstract get getter1b() → core::Object;
+  abstract get getter1c() → core::int;
+  abstract set getter1d(core::Object x) → void;
+  abstract get getter1e() → core::num;
+  abstract set getter1e(core::Object x) → void;
+  abstract set setter1a(core::String x) → void;
+  abstract set setter1b(core::Object x) → void;
+  abstract set setter1c(core::int x) → void;
+  abstract get setter1d() → core::Object;
+  abstract get setter1e() → core::num;
+  abstract set setter1e(core::Object x) → void;
+  abstract get field1a() → core::num?;
+  abstract get field1b() → core::int?;
+  abstract get field1c() → core::double?;
+  abstract set field2a(core::num? value) → void;
+  abstract set field2b(core::int? value) → void;
+  abstract set field2c(core::double? value) → void;
+  abstract get field3a() → core::num?;
+  abstract get field3b() → core::int?;
+  abstract get field3c() → core::double?;
+  abstract set field3a(core::Object? value) → void;
+  abstract set field3b(core::Object? value) → void;
+  abstract set field3c(core::Object? value) → void;
+  abstract set field4a(core::num? value) → void;
+  abstract get field4b() → core::num?;
+  abstract set field4b(core::Object? value) → void;
+}
+abstract class C extends core::Object implements self::A<core::int>, self::B<core::num> {
+  final field core::int? field1a = null;
+  final field core::int? field1b = null;
+  final field invalid-type field1c = null;
+  final field core::num? field2a = null;
+  final field core::num? field2b = null;
+  final field invalid-type field2c = null;
+  final field core::int? field3a = null;
+  final field core::int? field3b = null;
+  final field invalid-type field3c = null;
+  field core::num? field4a = null;
+  field invalid-type field4b = null;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  abstract method method1a(core::Object x) → core::String;
+  abstract method method1b(core::Object x) → core::String;
+  abstract method method1c(invalid-type x) → void;
+  abstract method method1d() → invalid-type;
+  abstract method method2a(core::Object? x) → void;
+  abstract method method2b(core::Object? x) → void;
+  abstract method method3a<CT3a extends core::Object? = dynamic>(self::C::method3a::CT3a% x) → void;
+  abstract method method3b<CT3b extends core::Object? = dynamic>(self::C::method3b::CT3b% x, [dynamic y = #C1]) → void;
+  abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, generic-covariant-impl core::num y) → void;
+  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, generic-covariant-impl core::num y, [dynamic z = #C1]) → void;
+  abstract method method5a(invalid-type x, invalid-type y) → void;
+  abstract method method5b(core::num x, core::num y, [invalid-type z = #C1]) → void;
+  abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
+  abstract method method6b({core::int x = #C1, core::Object y = #C1, dynamic z = #C1}) → void;
+  abstract method method7a(core::Object? o, {core::Object? named = #C1}) → core::Object?;
+  abstract get getter1a() → core::String;
+  abstract get getter1b() → core::String;
+  abstract get getter1c() → invalid-type;
+  abstract get getter1d() → core::Object;
+  abstract get getter1e() → core::int;
+  abstract set setter1a(core::Object x) → void;
+  abstract set setter1b(core::Object x) → void;
+  abstract set setter1c(invalid-type x) → void;
+  abstract set setter1d(core::String x) → void;
+  abstract set setter1e(core::Object x) → void;
+  abstract forwarding-stub set getter1d(core::Object x) → void;
+  abstract forwarding-stub set getter1e(core::Object x) → void;
+  abstract forwarding-stub set field2a(core::num? value) → void;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.transformed.expect
new file mode 100644
index 0000000..71e2237
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.transformed.expect
@@ -0,0 +1,296 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:114:17: Error: Can't infer a type for 'x' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method1c(x); // error
+//                 ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:10:8: Context: This is one of the overridden members.
+//   void method1c(int x);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:62:8: Context: This is one of the overridden members.
+//   void method1c(String x);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:115:3: Error: Can't infer a return type for 'method1d' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   method1d(); // error
+//   ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:11:10: Context: This is one of the overridden members.
+//   String method1d();
+//          ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:63:7: Context: This is one of the overridden members.
+//   int method1d();
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:122:17: Error: Can't infer a type for 'x' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method5a(x, y); // error
+//                 ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:18:8: Context: This is one of the overridden members.
+//   void method5a(int x, num y);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:70:8: Context: This is one of the overridden members.
+//   void method5a(num x, int y);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:122:20: Error: Can't infer a type for 'y' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method5a(x, y); // error
+//                    ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:18:8: Context: This is one of the overridden members.
+//   void method5a(int x, num y);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:70:8: Context: This is one of the overridden members.
+//   void method5a(num x, int y);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:123:32: Error: Can't infer a type for 'z' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method5b(num x, num y, [z]); // error
+//                                ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:19:8: Context: This is one of the overridden members.
+//   void method5b(int x, num y);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:71:8: Context: This is one of the overridden members.
+//   void method5b(num x, int y);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:130:7: Error: Can't infer a return type for 'getter1c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   get getter1c; // error
+//       ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:26:14: Context: This is one of the overridden members.
+//   String get getter1c;
+//              ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:78:11: Context: This is one of the overridden members.
+//   int get getter1c;
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:142:9: Error: Can't infer a type for 'field1c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   final field1c = null; // error
+//         ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:40:12: Context: This is one of the overridden members.
+//   int? get field1c;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:92:15: Context: This is one of the overridden members.
+//   double? get field1c;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:146:9: Error: Can't infer a type for 'field2c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   final field2c = null; // error
+//         ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:44:12: Context: This is one of the overridden members.
+//   void set field2c(int? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:96:12: Context: This is one of the overridden members.
+//   void set field2c(double? value);
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:150:9: Error: Can't infer a type for 'field3c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   final field3c = null; // error
+//         ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:48:12: Context: This is one of the overridden members.
+//   int? get field3c;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:100:15: Context: This is one of the overridden members.
+//   double? get field3c;
+//               ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:52:12: Context: This is one of the overridden members.
+//   void set field3c(Object? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:104:12: Context: This is one of the overridden members.
+//   void set field3c(Object? value);
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:153:7: Error: Can't infer a type for 'field4b' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field4b = null; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:55:12: Context: This is one of the overridden members.
+//   num? get field4b;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:107:12: Context: This is one of the overridden members.
+//   num? get field4b;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:56:12: Context: This is one of the overridden members.
+//   void set field4b(Object? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:108:12: Context: This is one of the overridden members.
+//   void set field4b(Object? value);
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:136:12: Error: Can't infer a return type for 'setter1c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void set setter1c(x); // error
+//            ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:33:12: Context: This is one of the overridden members.
+//   void set setter1c(String x);
+//            ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:85:12: Context: This is one of the overridden members.
+//   void set setter1c(int x);
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:111:16: Error: Class 'C' inherits multiple members named 'field2c' with incompatible signatures.
+// Try adding a declaration of 'field2c' to 'C'.
+// abstract class C implements A<int>, B<num> {
+//                ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:44:12: Context: This is one of the overridden members.
+//   void set field2c(int? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:96:12: Context: This is one of the overridden members.
+//   void set field2c(double? value);
+//            ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+abstract class A<AT extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::AT%>
+    : super core::Object::•()
+    ;
+  abstract method method1a(core::Object x) → core::String;
+  abstract method method1b(core::String x) → core::Object;
+  abstract method method1c(core::int x) → void;
+  abstract method method1d() → core::String;
+  abstract method method2a(core::Object? x) → void;
+  abstract method method2b(dynamic x) → void;
+  abstract method method3a<AT3a extends core::Object? = dynamic>(self::A::method3a::AT3a% x) → void;
+  abstract method method3b<AT3b extends core::Object? = dynamic>(self::A::method3b::AT3b% x) → void;
+  abstract method method4a<AT4a extends core::Object? = dynamic>(self::A::method4a::AT4a% x, generic-covariant-impl self::A::AT% y) → void;
+  abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, generic-covariant-impl self::A::AT% y) → void;
+  abstract method method5a(core::int x, core::num y) → void;
+  abstract method method5b(core::int x, core::num y) → void;
+  abstract method method6a({core::int x = #C1, core::num y = #C1}) → void;
+  abstract method method6b({core::num y = #C1, core::int x = #C1}) → void;
+  method method7a(core::Object? o, {core::Object? named = #C1}) → core::Object? {}
+  abstract get getter1a() → core::Object;
+  abstract get getter1b() → core::String;
+  abstract get getter1c() → core::String;
+  abstract set getter1d(core::String x) → void;
+  abstract get getter1e() → core::int;
+  abstract set getter1e(core::int x) → void;
+  abstract set setter1a(core::Object x) → void;
+  abstract set setter1b(core::String x) → void;
+  abstract set setter1c(core::String x) → void;
+  abstract get setter1d() → core::String;
+  abstract get setter1e() → core::int;
+  abstract set setter1e(core::int x) → void;
+  abstract get field1a() → core::int?;
+  abstract get field1b() → core::num?;
+  abstract get field1c() → core::int?;
+  abstract set field2a(core::int? value) → void;
+  abstract set field2b(core::num? value) → void;
+  abstract set field2c(core::int? value) → void;
+  abstract get field3a() → core::int?;
+  abstract get field3b() → core::num?;
+  abstract get field3c() → core::int?;
+  abstract set field3a(core::Object? value) → void;
+  abstract set field3b(core::Object? value) → void;
+  abstract set field3c(core::Object? value) → void;
+  abstract get field4a() → core::num?;
+  abstract get field4b() → core::num?;
+  abstract set field4b(core::Object? value) → void;
+}
+abstract class B<BT extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::BT%>
+    : super core::Object::•()
+    ;
+  abstract method method1a(core::String x) → core::Object;
+  abstract method method1b(core::Object x) → core::String;
+  abstract method method1c(core::String x) → void;
+  abstract method method1d() → core::int;
+  abstract method method2a(dynamic x) → void;
+  abstract method method2b(core::Object? x) → void;
+  abstract method method3a<BT3a extends core::Object? = dynamic>(self::B::method3a::BT3a% x) → void;
+  abstract method method3b<BT3b extends core::Object? = dynamic>(self::B::method3b::BT3b% x) → void;
+  abstract method method4a<BT4a extends core::Object? = dynamic>(self::B::method4a::BT4a% x, generic-covariant-impl self::B::BT% y) → void;
+  abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, generic-covariant-impl self::B::BT% y) → void;
+  abstract method method5a(core::num x, core::int y) → void;
+  abstract method method5b(core::num x, core::int y) → void;
+  abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
+  abstract method method6b({core::int x = #C1, core::Object y = #C1}) → void;
+  abstract method method7a(FutureOr<dynamic>o, {FutureOr<dynamic>named = #C1}) → FutureOr<dynamic>;
+  abstract get getter1a() → core::String;
+  abstract get getter1b() → core::Object;
+  abstract get getter1c() → core::int;
+  abstract set getter1d(core::Object x) → void;
+  abstract get getter1e() → core::num;
+  abstract set getter1e(core::Object x) → void;
+  abstract set setter1a(core::String x) → void;
+  abstract set setter1b(core::Object x) → void;
+  abstract set setter1c(core::int x) → void;
+  abstract get setter1d() → core::Object;
+  abstract get setter1e() → core::num;
+  abstract set setter1e(core::Object x) → void;
+  abstract get field1a() → core::num?;
+  abstract get field1b() → core::int?;
+  abstract get field1c() → core::double?;
+  abstract set field2a(core::num? value) → void;
+  abstract set field2b(core::int? value) → void;
+  abstract set field2c(core::double? value) → void;
+  abstract get field3a() → core::num?;
+  abstract get field3b() → core::int?;
+  abstract get field3c() → core::double?;
+  abstract set field3a(core::Object? value) → void;
+  abstract set field3b(core::Object? value) → void;
+  abstract set field3c(core::Object? value) → void;
+  abstract set field4a(core::num? value) → void;
+  abstract get field4b() → core::num?;
+  abstract set field4b(core::Object? value) → void;
+}
+abstract class C extends core::Object implements self::A<core::int>, self::B<core::num> {
+  final field core::int? field1a = null;
+  final field core::int? field1b = null;
+  final field invalid-type field1c = null;
+  final field core::num? field2a = null;
+  final field core::num? field2b = null;
+  final field invalid-type field2c = null;
+  final field core::int? field3a = null;
+  final field core::int? field3b = null;
+  final field invalid-type field3c = null;
+  field core::num? field4a = null;
+  field invalid-type field4b = null;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  abstract method method1a(core::Object x) → core::String;
+  abstract method method1b(core::Object x) → core::String;
+  abstract method method1c(invalid-type x) → void;
+  abstract method method1d() → invalid-type;
+  abstract method method2a(core::Object? x) → void;
+  abstract method method2b(core::Object? x) → void;
+  abstract method method3a<CT3a extends core::Object? = dynamic>(self::C::method3a::CT3a% x) → void;
+  abstract method method3b<CT3b extends core::Object? = dynamic>(self::C::method3b::CT3b% x, [dynamic y = #C1]) → void;
+  abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, generic-covariant-impl core::num y) → void;
+  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, generic-covariant-impl core::num y, [dynamic z = #C1]) → void;
+  abstract method method5a(invalid-type x, invalid-type y) → void;
+  abstract method method5b(core::num x, core::num y, [invalid-type z = #C1]) → void;
+  abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
+  abstract method method6b({core::int x = #C1, core::Object y = #C1, dynamic z = #C1}) → void;
+  abstract method method7a(core::Object? o, {core::Object? named = #C1}) → core::Object?;
+  abstract get getter1a() → core::String;
+  abstract get getter1b() → core::String;
+  abstract get getter1c() → invalid-type;
+  abstract get getter1d() → core::Object;
+  abstract get getter1e() → core::int;
+  abstract set setter1a(core::Object x) → void;
+  abstract set setter1b(core::Object x) → void;
+  abstract set setter1c(invalid-type x) → void;
+  abstract set setter1d(core::String x) → void;
+  abstract set setter1e(core::Object x) → void;
+  abstract forwarding-stub set getter1d(core::Object x) → void;
+  abstract forwarding-stub set getter1e(core::Object x) → void;
+  abstract forwarding-stub set field2a(core::num? value) → void;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.outline.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.outline.expect
index 9036823..6a9e27e 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.outline.expect
@@ -34,10 +34,6 @@
 // void method([int i]) {}
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:13:34: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
-// external void patchedMethod([int i]);
-//                                  ^
-//
 import self as self2;
 import "dart:_internal" as _in;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect
index 0c2e596..9762f48 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect
@@ -36,10 +36,6 @@
 // void method([int i]) {}
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:13:34: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
-// external void patchedMethod([int i]);
-//                                  ^
-//
 import self as test;
 import "dart:_internal" as _in;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.transformed.expect
index 0c2e596..9762f48 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.transformed.expect
@@ -36,10 +36,6 @@
 // void method([int i]) {}
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:13:34: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
-// external void patchedMethod([int i]);
-//                                  ^
-//
 import self as test;
 import "dart:_internal" as _in;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect
index 0c2e596..9762f48 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect
@@ -36,10 +36,6 @@
 // void method([int i]) {}
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:13:34: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
-// external void patchedMethod([int i]);
-//                                  ^
-//
 import self as test;
 import "dart:_internal" as _in;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect
index 0c2e596..9762f48 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect
@@ -36,10 +36,6 @@
 // void method([int i]) {}
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:13:34: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
-// external void patchedMethod([int i]);
-//                                  ^
-//
 import self as test;
 import "dart:_internal" as _in;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.weak.expect
index 48c54ae..c941a64 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.weak.expect
@@ -12,7 +12,7 @@
   iss::takesNever(null);
   iss::takesNever(nil);
   iss::takesTakesNull(#C1);
-  iss::f = (Never* x) → core::Null? {};
+  iss::f = (core::Null? x) → core::Null? {};
 }
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.weak.transformed.expect
index 48c54ae..c941a64 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
   iss::takesNever(null);
   iss::takesNever(nil);
   iss::takesTakesNull(#C1);
-  iss::f = (Never* x) → core::Null? {};
+  iss::f = (core::Null? x) → core::Null? {};
 }
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart
index 1d9981b..4f30ec5 100644
--- a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart
+++ b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart
@@ -9,7 +9,17 @@
 Never optOutNever;
 var inferredOptOutNever = optInNever;
 
+genericMethod<T>() {}
+
+class GenericClass<T> {}
+
 main() {
+  optInNever = optOutNever;
+
+  Type typeNever = Never;
+  genericMethod<Never>();
+  new GenericClass<Never>();
+
   Never localNever = null;
   Null localNull = null;
   var inferredLocalNever = optInNever;
@@ -62,6 +72,15 @@
   throws(() => optInNever = throwing());
   throws(() => inferredOptOutNever = throwing());
   throws(() => inferredLocalNever = throwing());
+
+  var boundedGenericClass = new BoundedGenericClass();
+  throws(() {
+    var boundedGenericMethodResult1 = boundedGenericMethod1();
+  });
+  var boundedGenericMethodResult2 = boundedGenericMethod2();
+
+  dynamic dyn = null;
+  optInNever = dyn;
 }
 
 class B extends A {
diff --git a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.textual_outline.expect
index 0630e92..fc4c4c0 100644
--- a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.textual_outline.expect
@@ -3,6 +3,10 @@
 
 Never optOutNever;
 var inferredOptOutNever = optInNever;
+genericMethod<T>() {}
+
+class GenericClass<T> {}
+
 main() {}
 
 class B extends A {
diff --git a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.textual_outline_modelled.expect
index 26f5017..c9f7109 100644
--- a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.textual_outline_modelled.expect
@@ -25,6 +25,9 @@
   void set nullProperty(Never value) {}
 }
 
+class GenericClass<T> {}
+
+genericMethod<T>() {}
 main() {}
 throws(void Function() f) {}
 var inferredOptOutNever = optInNever;
diff --git a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.expect
index 1977f90..4852b17 100644
--- a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.expect
@@ -1,10 +1,25 @@
 library;
 import self as self;
-import "never_opt_out_lib.dart" as nev;
 import "dart:core" as core;
+import "never_opt_out_lib.dart" as nev;
 
 import "org-dartlang-testcase:///never_opt_out_lib.dart";
 
+class GenericClass<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
 class B extends nev::A {
   field core::Null? neverField = null;
   field core::Null? nullField = null;
@@ -33,21 +48,21 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends nev::A {
-  field Never* neverField = null;
-  field Never* nullField = null;
+  field core::Null? neverField = null;
+  field core::Null? nullField = null;
   synthetic constructor •() → self::C*
     : super nev::A::•()
     ;
-  method neverMethod(Never* value) → Never*
+  method neverMethod(core::Null? value) → core::Null?
     return value;
-  get neverProperty() → Never*
+  get neverProperty() → core::Null?
     return null;
-  set neverProperty(Never* value) → void {}
-  method nullMethod(Never* value) → Never*
+  set neverProperty(core::Null? value) → void {}
+  method nullMethod(core::Null? value) → core::Null?
     return value;
-  get nullProperty() → Never*
+  get nullProperty() → core::Null?
     return null;
-  set nullProperty(Never* value) → void {}
+  set nullProperty(core::Null? value) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -59,10 +74,15 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field Never* optOutNever;
+static field core::Null? optOutNever;
 static field dynamic inferredOptOutNever = nev::optInNever;
+static method genericMethod<T extends core::Object* = dynamic>() → dynamic {}
 static method main() → dynamic {
-  Never* localNever = null;
+  nev::optInNever = self::optOutNever;
+  core::Type* typeNever = core::Null?;
+  self::genericMethod<core::Null?>();
+  new self::GenericClass::•<core::Null?>();
+  core::Null? localNever = null;
   core::Null? localNull = null;
   dynamic inferredLocalNever = nev::optInNever;
   localNever = localNever;
@@ -89,14 +109,14 @@
   localNull = localNull;
   self::inferredOptOutNever = localNull;
   inferredLocalNever = localNull;
-  localNever = self::inferredOptOutNever as{TypeError,ForDynamic} Never*;
-  self::optOutNever = self::inferredOptOutNever as{TypeError,ForDynamic} Never*;
+  localNever = self::inferredOptOutNever as{TypeError,ForDynamic} core::Null?;
+  self::optOutNever = self::inferredOptOutNever as{TypeError,ForDynamic} core::Null?;
   nev::optInNever = self::inferredOptOutNever as{TypeError,ForDynamic} Never;
   localNull = self::inferredOptOutNever as{TypeError,ForDynamic} core::Null?;
   self::inferredOptOutNever = self::inferredOptOutNever;
   inferredLocalNever = self::inferredOptOutNever;
-  localNever = inferredLocalNever as{TypeError,ForDynamic} Never*;
-  self::optOutNever = inferredLocalNever as{TypeError,ForDynamic} Never*;
+  localNever = inferredLocalNever as{TypeError,ForDynamic} core::Null?;
+  self::optOutNever = inferredLocalNever as{TypeError,ForDynamic} core::Null?;
   nev::optInNever = inferredLocalNever as{TypeError,ForDynamic} Never;
   localNull = inferredLocalNever as{TypeError,ForDynamic} core::Null?;
   self::inferredOptOutNever = inferredLocalNever;
@@ -107,6 +127,13 @@
   self::throws(() → core::Null? => nev::optInNever = nev::throwing());
   self::throws(() → core::Null? => self::inferredOptOutNever = nev::throwing());
   self::throws(() → core::Null? => inferredLocalNever = nev::throwing());
+  nev::BoundedGenericClass<core::Null?>* boundedGenericClass = new nev::BoundedGenericClass::•<core::Null?>();
+  self::throws(() → core::Null? {
+    dynamic boundedGenericMethodResult1 = nev::boundedGenericMethod1<core::Null?>();
+  });
+  core::List<core::Null?>* boundedGenericMethodResult2 = nev::boundedGenericMethod2<core::Null?>();
+  dynamic dyn = null;
+  nev::optInNever = dyn as{TypeError,ForDynamic} Never;
 }
 static method throws(() →* void f) → dynamic {
   try {
@@ -122,7 +149,6 @@
 import self as nev;
 import "dart:core" as core;
 import "dart:_internal" as _in;
-import "never_opt_out.dart" as self;
 
 import "org-dartlang-testcase:///never_opt_out.dart";
 
@@ -143,6 +169,15 @@
     return null;
   set nullProperty(core::Null? value) → void {}
 }
-static field Never optInNever = self::optOutNever;
+class BoundedGenericClass<T extends Never = Never> extends core::Object {
+  synthetic constructor •() → nev::BoundedGenericClass<nev::BoundedGenericClass::T>
+    : super core::Object::•()
+    ;
+}
+late static field Never optInNever;
 static method throwing() → Never
   return throw "Never!";
+static method boundedGenericMethod1<T extends Never = Never>() → nev::boundedGenericMethod1::T
+  return throw "Should never return";
+static method boundedGenericMethod2<T extends Never = Never>() → core::List<nev::boundedGenericMethod2::T>
+  return <nev::boundedGenericMethod2::T>[];
diff --git a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.transformed.expect
index 1977f90..9428bc8 100644
--- a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.transformed.expect
@@ -1,10 +1,25 @@
 library;
 import self as self;
-import "never_opt_out_lib.dart" as nev;
 import "dart:core" as core;
+import "never_opt_out_lib.dart" as nev;
 
 import "org-dartlang-testcase:///never_opt_out_lib.dart";
 
+class GenericClass<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
 class B extends nev::A {
   field core::Null? neverField = null;
   field core::Null? nullField = null;
@@ -33,21 +48,21 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends nev::A {
-  field Never* neverField = null;
-  field Never* nullField = null;
+  field core::Null? neverField = null;
+  field core::Null? nullField = null;
   synthetic constructor •() → self::C*
     : super nev::A::•()
     ;
-  method neverMethod(Never* value) → Never*
+  method neverMethod(core::Null? value) → core::Null?
     return value;
-  get neverProperty() → Never*
+  get neverProperty() → core::Null?
     return null;
-  set neverProperty(Never* value) → void {}
-  method nullMethod(Never* value) → Never*
+  set neverProperty(core::Null? value) → void {}
+  method nullMethod(core::Null? value) → core::Null?
     return value;
-  get nullProperty() → Never*
+  get nullProperty() → core::Null?
     return null;
-  set nullProperty(Never* value) → void {}
+  set nullProperty(core::Null? value) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -59,10 +74,15 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field Never* optOutNever;
+static field core::Null? optOutNever;
 static field dynamic inferredOptOutNever = nev::optInNever;
+static method genericMethod<T extends core::Object* = dynamic>() → dynamic {}
 static method main() → dynamic {
-  Never* localNever = null;
+  nev::optInNever = self::optOutNever;
+  core::Type* typeNever = core::Null?;
+  self::genericMethod<core::Null?>();
+  new self::GenericClass::•<core::Null?>();
+  core::Null? localNever = null;
   core::Null? localNull = null;
   dynamic inferredLocalNever = nev::optInNever;
   localNever = localNever;
@@ -89,14 +109,14 @@
   localNull = localNull;
   self::inferredOptOutNever = localNull;
   inferredLocalNever = localNull;
-  localNever = self::inferredOptOutNever as{TypeError,ForDynamic} Never*;
-  self::optOutNever = self::inferredOptOutNever as{TypeError,ForDynamic} Never*;
+  localNever = self::inferredOptOutNever as{TypeError,ForDynamic} core::Null?;
+  self::optOutNever = self::inferredOptOutNever as{TypeError,ForDynamic} core::Null?;
   nev::optInNever = self::inferredOptOutNever as{TypeError,ForDynamic} Never;
   localNull = self::inferredOptOutNever as{TypeError,ForDynamic} core::Null?;
   self::inferredOptOutNever = self::inferredOptOutNever;
   inferredLocalNever = self::inferredOptOutNever;
-  localNever = inferredLocalNever as{TypeError,ForDynamic} Never*;
-  self::optOutNever = inferredLocalNever as{TypeError,ForDynamic} Never*;
+  localNever = inferredLocalNever as{TypeError,ForDynamic} core::Null?;
+  self::optOutNever = inferredLocalNever as{TypeError,ForDynamic} core::Null?;
   nev::optInNever = inferredLocalNever as{TypeError,ForDynamic} Never;
   localNull = inferredLocalNever as{TypeError,ForDynamic} core::Null?;
   self::inferredOptOutNever = inferredLocalNever;
@@ -107,6 +127,13 @@
   self::throws(() → core::Null? => nev::optInNever = nev::throwing());
   self::throws(() → core::Null? => self::inferredOptOutNever = nev::throwing());
   self::throws(() → core::Null? => inferredLocalNever = nev::throwing());
+  nev::BoundedGenericClass<core::Null?>* boundedGenericClass = new nev::BoundedGenericClass::•<core::Null?>();
+  self::throws(() → core::Null? {
+    dynamic boundedGenericMethodResult1 = nev::boundedGenericMethod1<core::Null?>();
+  });
+  core::List<core::Null?>* boundedGenericMethodResult2 = nev::boundedGenericMethod2<core::Null?>();
+  dynamic dyn = null;
+  nev::optInNever = dyn as{TypeError,ForDynamic} Never;
 }
 static method throws(() →* void f) → dynamic {
   try {
@@ -122,7 +149,6 @@
 import self as nev;
 import "dart:core" as core;
 import "dart:_internal" as _in;
-import "never_opt_out.dart" as self;
 
 import "org-dartlang-testcase:///never_opt_out.dart";
 
@@ -143,6 +169,20 @@
     return null;
   set nullProperty(core::Null? value) → void {}
 }
-static field Never optInNever = self::optOutNever;
+class BoundedGenericClass<T extends Never = Never> extends core::Object {
+  synthetic constructor •() → nev::BoundedGenericClass<nev::BoundedGenericClass::T>
+    : super core::Object::•()
+    ;
+}
+late static field Never optInNever;
 static method throwing() → Never
   return throw "Never!";
+static method boundedGenericMethod1<T extends Never = Never>() → nev::boundedGenericMethod1::T
+  return throw "Should never return";
+static method boundedGenericMethod2<T extends Never = Never>() → core::List<nev::boundedGenericMethod2::T>
+  return <nev::boundedGenericMethod2::T>[];
+
+
+Extra constant evaluation status:
+Evaluated: TypeLiteral @ org-dartlang-testcase:///never_opt_out.dart:19:20 -> TypeLiteralConstant(Null?)
+Extra constant evaluation: evaluated: 136, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd_mixed/never_opt_out_lib.dart b/pkg/front_end/testcases/nnbd_mixed/never_opt_out_lib.dart
index a519e50..b2f225b 100644
--- a/pkg/front_end/testcases/nnbd_mixed/never_opt_out_lib.dart
+++ b/pkg/front_end/testcases/nnbd_mixed/never_opt_out_lib.dart
@@ -6,7 +6,7 @@
 
 Never throwing() => throw 'Never!';
 
-Never optInNever = optOutNever;
+late Never optInNever;
 
 class A {
   Never neverField = throw "Should not reach here";
@@ -19,3 +19,9 @@
   Null get nullProperty => null;
   void set nullProperty(Null value) {}
 }
+
+class BoundedGenericClass<T extends Never> {}
+
+T boundedGenericMethod1<T extends Never>() => throw "Should never return";
+
+List<T> boundedGenericMethod2<T extends Never>() => <T>[];
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index d26a0c2..b53cc5e 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -178,6 +178,7 @@
 nnbd/issue41349: FormatterCrash
 nnbd/issue41597: FormatterCrash
 nnbd/issue42967: FormatterCrash
+nnbd/issue43211: FormatterCrash
 nnbd/issue43278: FormatterCrash
 nnbd/issue43354: FormatterCrash
 nnbd/late: FormatterCrash
diff --git a/tests/language/inference/inconsistent_inheritance_test.dart b/tests/language/inference/inconsistent_inheritance_test.dart
index 8ff26eb..beff18f 100644
--- a/tests/language/inference/inconsistent_inheritance_test.dart
+++ b/tests/language/inference/inconsistent_inheritance_test.dart
@@ -4,10 +4,14 @@
 
 class A {
   void f(Object x) {}
+
+  void g(Object x, String y) {}
 }
 
 class B {
   void f(String x) {}
+
+  void g(String x, Object y) {}
 }
 
 class C extends A implements B {
@@ -19,6 +23,16 @@
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
     // [cfe] A value of type 'Object' can't be assigned to a variable of type 'String'.
   }
+
+  // No combined signature.
+  void g(x, y) {
+    // ^
+    // [analyzer] COMPILE_TIME_ERROR.NO_COMBINED_SUPER_SIGNATURE
+    //   ^
+    // [cfe] Can't infer a type for 'x' as the overridden members don't have a combined signature.
+    //      ^
+    // [cfe] Can't infer a type for 'y' as the overridden members don't have a combined signature.
+  }
 }
 
 void main() {}
diff --git a/tests/language/nnbd/flow_analysis/never_runtime_check_nnbd.dart b/tests/language/nnbd/flow_analysis/never_runtime_check_nnbd.dart
index 7a18cec..a59bdd2 100644
--- a/tests/language/nnbd/flow_analysis/never_runtime_check_nnbd.dart
+++ b/tests/language/nnbd/flow_analysis/never_runtime_check_nnbd.dart
@@ -28,7 +28,7 @@
 
   static late String error;
 
-  get throwingGetter => throw error;
+  get throwingGetter => throw 'Null access';
 
   C(this.instanceField);
 }
@@ -36,20 +36,17 @@
 class D extends C {
   D(int field) : super(field);
 
-  void ifNullAssignSuper(int f()) {
-    super.instanceField ??= f(); // ignore: dead_null_aware_expression
-    // Should throw if `instanceField` returns null (rather than calling `f`).
+  int ifNullAssignSuper(int f()) {
+    return super.instanceField ??= f(); // ignore: dead_null_aware_expression
   }
 
-  void ifNullAssignSuper_nullableSetter(int f()) {
-    super.instanceGetterSetter ??= f(); // ignore: dead_null_aware_expression
-    // Should throw if `instanceGetterSetter` returns null (rather than calling
-    // `f`).
+  int ifNullAssignSuper_nullableSetter(int f()) {
+    return super.instanceGetterSetter ??=
+        f(); // ignore: dead_null_aware_expression
   }
 
-  void ifNullAssignSuperIndex(int f()) {
-    super[0] ??= f(); // ignore: dead_null_aware_expression
-    // Should throw if `super[0]` returns null (rather than calling `f`).
+  int ifNullAssignSuperIndex(int f()) {
+    return super[0] ??= f(); // ignore: dead_null_aware_expression
   }
 }
 
@@ -86,241 +83,217 @@
 
 late Never topLevelNever;
 
-void neverParameter(Never n) {
-  // Should throw before getting here.
+int neverParameter(Never n) {
+  return 42;
 }
 
-void neverInitializingFormal(Never n) {
-  // Should throw before getting here.
+int neverInitializingFormal(Never n) {
+  return 42;
 }
 
-void isPromoteToNever(int i) {
-  if (i is int) return;
-  // Should throw if `i` is null.
+bool isPromoteToNever(int i) {
+  if (i is int) return true;
+  return false;
 }
 
-void isPromoteToNever_noIf(int i) {
-  i is int;
-  // Should throw if `i` is null.
+bool isPromoteToNever_noIf(int i) {
+  return i is int;
 }
 
-void isNotPromoteToNever(int i) {
+bool isNotPromoteToNever(int i) {
   if (i is! int) {
-    // Should throw if `i` is null.
+    return true;
   }
+  return false;
 }
 
-void isNotPromoteToNever_noIf(int i) {
-  i is! int;
+bool isNotPromoteToNever_noIf(int i) {
+  return i is! int;
 }
 
-void equalNullPromoteToNever(int f()) {
-  if (f() == null) { // ignore: unnecessary_null_comparison
-    // Should throw if `f` returns null.
+int equalNullPromoteToNever(int f()) {
+  if (f() == null) {
+    // ignore: unnecessary_null_comparison
+    return 42;
   }
+  return 0;
 }
 
-void equalNullPromoteToNever_noIf(int f()) {
+int equalNullPromoteToNever_noIf(int f()) {
   f() == null; // ignore: unnecessary_null_comparison
-  // Should throw if `f` returns null.
+  return 42;
 }
 
-void notEqualNullPromoteToNever(int f()) {
-  if (f() != null) return; // ignore: unnecessary_null_comparison
-  // Should throw if `f` returns null.
+int notEqualNullPromoteToNever(int f()) {
+  if (f() != null) return 0; // ignore: unnecessary_null_comparison
+  return 42;
 }
 
-void notEqualNullPromoteToNever_noIf(int f()) {
+int notEqualNullPromoteToNever_noIf(int f()) {
   f() != null; // ignore: unnecessary_null_comparison
-  // Should throw if `f` returns null.
+  return 42;
 }
 
-void nullEqualPromoteToNever(int f()) {
-  if (null == f()) { // ignore: unnecessary_null_comparison
-    // Should throw if `f` returns null.
+int nullEqualPromoteToNever(int f()) {
+  if (null == f()) {
+    // ignore: unnecessary_null_comparison
+    return 42;
   }
+  return 0;
 }
 
-void nullEqualPromoteToNever_noIf(int f()) {
+int nullEqualPromoteToNever_noIf(int f()) {
   null == f(); // ignore: unnecessary_null_comparison
-  // Should throw if `f` returns null.
+  return 42;
 }
 
-void nullNotEqualPromoteToNever(int f()) {
-  if (null != f()) return; // ignore: unnecessary_null_comparison
-  // Should throw if `f` returns null.
+int nullNotEqualPromoteToNever(int f()) {
+  if (null != f()) return 0; // ignore: unnecessary_null_comparison
+  return 42;
 }
 
-void nullNotEqualPromoteToNever_noIf(int f()) {
+int nullNotEqualPromoteToNever_noIf(int f()) {
   null != f(); // ignore: unnecessary_null_comparison
-  // Should throw if `f` returns null.
+  return 42;
 }
 
 int unnecessaryIfNull(int f(), int g()) {
   return f() ?? g(); // ignore: dead_null_aware_expression
-  // Should throw if `f` returns null (rather than calling `g`).
 }
 
-void ifNullAssignLocal(int local, int f()) {
-  local ??= f(); // ignore: dead_null_aware_expression
-  // Should throw if `local` returns null (rather than calling `f`).
+int ifNullAssignLocal(int local, int f()) {
+  return local ??= f(); // ignore: dead_null_aware_expression
 }
 
-void ifNullAssignStatic(int f()) {
-  C.staticField ??= f(); // ignore: dead_null_aware_expression
-  // Should throw if `staticField` returns null (rather than calling `f`).
+int ifNullAssignStatic(int f()) {
+  return C.staticField ??= f(); // ignore: dead_null_aware_expression
 }
 
-void ifNullAssignStaticGetter_nullableSetter(int f()) {
-  C.staticGetterSetter ??= f(); // ignore: dead_null_aware_expression
-  // Should throw if `staticGetterSetter` returns null (rather than calling
-  // `f`).
+int ifNullAssignStaticGetter_nullableSetter(int f()) {
+  return C.staticGetterSetter ??= f(); // ignore: dead_null_aware_expression
 }
 
-void ifNullAssignField(C c, int f()) {
-  c.instanceField ??= f(); // ignore: dead_null_aware_expression
-  // Should throw if `instanceField` returns null (rather than calling `f`).
+int ifNullAssignField(C c, int f()) {
+  return c.instanceField ??= f(); // ignore: dead_null_aware_expression
 }
 
-void ifNullAssignGetter_nullableSetter(C c, int f()) {
-  c.instanceGetterSetter ??= f(); // ignore: dead_null_aware_expression
-  // Should throw if `instanceGetterSetter` returns null (rather than calling
-  // `f`).
+int ifNullAssignGetter_nullableSetter(C c, int f()) {
+  return c.instanceGetterSetter ??= f(); // ignore: dead_null_aware_expression
 }
 
-void ifNullAssignGetter_implicitExtension(E e, int f()) {
-  e.instanceGetterSetter ??= f(); // ignore: dead_null_aware_expression
-  // Should throw if `instanceGetterSetter` returns null (rather than calling
-  // `f`).
+int ifNullAssignGetter_implicitExtension(E e, int f()) {
+  return e.instanceGetterSetter ??= f(); // ignore: dead_null_aware_expression
 }
 
-void ifNullAssignGetter_explicitExtension(E e, int f()) {
-  EExt(e).instanceGetterSetter ??= f(); // ignore: dead_null_aware_expression
-  // Should throw if `instanceGetterSetter` returns null (rather than calling
-  // `f`).
+int ifNullAssignGetter_explicitExtension(E e, int f()) {
+  return EExt(e).instanceGetterSetter ??=
+      f(); // ignore: dead_null_aware_expression
 }
 
-void ifNullAssignIndex(List<int> x, int f()) {
-  x[0] ??= f(); // ignore: dead_null_aware_expression
-  // Should throw if `x[0]` returns null (rather than calling `f`).
+int ifNullAssignIndex(List<int> x, int f()) {
+  return x[0] ??= f(); // ignore: dead_null_aware_expression
 }
 
-void ifNullAssignIndex_nullAware(List<int>? x, int f()) {
-  x?[0] ??= f(); // ignore: dead_null_aware_expression
-  // Should throw if `x[0]` returns null (rather than calling `f`).
+int? ifNullAssignIndex_nullAware(List<int>? x, int f()) {
+  return x?[0] ??= f(); // ignore: dead_null_aware_expression
 }
 
-void ifNullAssignIndex_nullableSetter(C x, int f()) {
-  x[0] ??= f(); // ignore: dead_null_aware_expression
-  // Should throw if `x[0]` returns null (rather than calling `f`).
+int ifNullAssignIndex_nullableSetter(C x, int f()) {
+  return x[0] ??= f(); // ignore: dead_null_aware_expression
 }
 
-void ifNullAssignIndex_implicitExtension(E x, int f()) {
-  x[0] ??= f(); // ignore: dead_null_aware_expression
-  // Should throw if `x[0]` returns null (rather than calling `f`).
+int ifNullAssignIndex_implicitExtension(E x, int f()) {
+  return x[0] ??= f(); // ignore: dead_null_aware_expression
 }
 
-void ifNullAssignIndex_explicitExtension(E x, int f()) {
-  EExt(x)[0] ??= f(); // ignore: dead_null_aware_expression
-  // Should throw if `x[0]` returns null (rather than calling `f`).
+int ifNullAssignIndex_explicitExtension(E x, int f()) {
+  return EExt(x)[0] ??= f(); // ignore: dead_null_aware_expression
 }
 
-void ifNullAssignSuper(D d, int f()) {
-  d.ifNullAssignSuper(f);
+int ifNullAssignSuper(D d, int f()) {
+  return d.ifNullAssignSuper(f);
 }
 
-void ifNullAssignSuper_nullableSetter(D d, int f()) {
-  d.ifNullAssignSuper_nullableSetter(f);
+int ifNullAssignSuper_nullableSetter(D d, int f()) {
+  return d.ifNullAssignSuper_nullableSetter(f);
 }
 
-void ifNullAssignSuperIndex(D d, int f()) {
-  d.ifNullAssignSuperIndex(f);
+int ifNullAssignSuperIndex(D d, int f()) {
+  return d.ifNullAssignSuperIndex(f);
 }
 
 int? ifNullAssignNullAwareField(C? c, int f()) {
   return c?.instanceField ??= f(); // ignore: dead_null_aware_expression
-  // Should throw if `instanceField` returns null (rather than calling `f`).
 }
 
-void ifNullAssignNullAwareStatic(int f()) {
-  C?.staticField ??= f(); // ignore: dead_null_aware_expression
-  // Should throw if `staticField` returns null (rather than calling `f`).
+int ifNullAssignNullAwareStatic(int f()) {
+  return C?.staticField ??= f(); // ignore: dead_null_aware_expression
 }
 
-void unnecessaryNullAwareAccess(int f(), String error) {
-  f()?.gcd(throw error); // ignore: invalid_null_aware_operator
-  // Should throw if `f` returns null.
+void unnecessaryNullAwareAccess(int f()) {
+  f()?.gcd(throw 'Null access'); // ignore: invalid_null_aware_operator
 }
 
-void unnecessaryNullAwareAccess_cascaded(int f(), String error) {
-  f()?..gcd(throw error); // ignore: invalid_null_aware_operator
-  // Should throw if `f` returns null.
+void unnecessaryNullAwareAccess_cascaded(int f()) {
+  f()?..gcd(throw 'Null access'); // ignore: invalid_null_aware_operator
 }
 
-void unnecessaryNullAwareAccess_methodOnObject(int f(), String error) {
-  f()?.toString().compareTo(throw error); // ignore: invalid_null_aware_operator
-  // Should throw if `f` returns null.
+void unnecessaryNullAwareAccess_methodOnObject(int f()) {
+  // ignore: invalid_null_aware_operator
+  f()?.toString().compareTo(throw 'Null access');
 }
 
-void unnecessaryNullAwareAccess_cascaded_methodOnObject(int f(), String error) {
-  f()?..toString().compareTo(throw error); // ignore: invalid_null_aware_operator
-  // Should throw if `f` returns null.
+void unnecessaryNullAwareAccess_cascaded_methodOnObject(int f()) {
+  // ignore: invalid_null_aware_operator
+  f()?..toString().compareTo(throw 'Null access');
 }
 
-void unnecessaryNullAwareAccess_methodOnExtension(int f(), String error) {
-  f()?.extendedMethod(throw error); // ignore: invalid_null_aware_operator
-  // Should throw if `f` returns null.
+void unnecessaryNullAwareAccess_methodOnExtension(int f()) {
+  // ignore: invalid_null_aware_operator
+  f()?.extendedMethod(throw 'Null access');
 }
 
-void unnecessaryNullAwareAccess_cascaded_methodOnExtension(
-    int f(), String error) {
-  f()?..extendedMethod(throw error); // ignore: invalid_null_aware_operator
-  // Should throw if `f` returns null.
+void unnecessaryNullAwareAccess_cascaded_methodOnExtension(int f()) {
+  // ignore: invalid_null_aware_operator
+  f()?..extendedMethod(throw 'Null access');
 }
 
-void unnecessaryNullAwareAccess_methodOnExtension_explicit(
-    int f(), String error) {
-  IntQExt(f())?.extendedMethod(throw error); // ignore: invalid_null_aware_operator
-  // Should throw if `f` returns null.
+void unnecessaryNullAwareAccess_methodOnExtension_explicit(int f()) {
+  // ignore: invalid_null_aware_operator
+  IntQExt(f())?.extendedMethod(throw 'Null access');
 }
 
-void unnecessaryNullAwareAccess_getter(C f(), String error) {
-  C.error = error;
+void unnecessaryNullAwareAccess_getter(C f()) {
   f()?.throwingGetter; // ignore: invalid_null_aware_operator
-  // Should throw if `f` returns null.
 }
 
-void unnecessaryNullAwareAccess_cascaded_getter(C f(), String error) {
-  C.error = error;
+void unnecessaryNullAwareAccess_cascaded_getter(C f()) {
   f()?..throwingGetter; // ignore: invalid_null_aware_operator
-  // Should throw if `f` returns null.
 }
 
-void unnecessaryNullAwareAccess_getterOnObject(int f(), String error) {
-  f()?.hashCode.remainder(throw error); // ignore: invalid_null_aware_operator
-  // Should throw if `f` returns null.
+void unnecessaryNullAwareAccess_getterOnObject(int f()) {
+  // ignore: invalid_null_aware_operator
+  f()?.hashCode.remainder(throw 'Null access');
 }
 
-void unnecessaryNullAwareAccess_cascaded_getterOnObject(int f(), String error) {
-  f()?..hashCode.remainder(throw error); // ignore: invalid_null_aware_operator
-  // Should throw if `f` returns null.
+void unnecessaryNullAwareAccess_cascaded_getterOnObject(int f()) {
+// ignore: invalid_null_aware_operator
+  f()?..hashCode.remainder(throw 'Null access');
 }
 
-void unnecessaryNullAwareAccess_getterOnExtension(int f(), String error) {
-  f()?.extendedGetter.remainder(throw error); // ignore: invalid_null_aware_operator
-  // Should throw if `f` returns null.
+void unnecessaryNullAwareAccess_getterOnExtension(int f()) {
+  // ignore: invalid_null_aware_operator
+  f()?.extendedGetter.remainder(throw 'Null access');
 }
 
-void unnecessaryNullAwareAccess_cascaded_getterOnExtension(
-    int f(), String error) {
-  f()?..extendedGetter.remainder(throw error); // ignore: invalid_null_aware_operator
-  // Should throw if `f` returns null.
+void unnecessaryNullAwareAccess_cascaded_getterOnExtension(int f()) {
+  // ignore: invalid_null_aware_operator
+  f()?..extendedGetter.remainder(throw 'Null access');
 }
 
-void unnecessaryNullAwareAccess_getterOnExtension_explicit(
-    int f(), String error) {
-  IntQExt(f())?.extendedGetter.remainder(throw error); // ignore: invalid_null_aware_operator
-  // Should throw if `f` returns null.
+void unnecessaryNullAwareAccess_getterOnExtension_explicit(int f()) {
+  // ignore: invalid_null_aware_operator
+  IntQExt(f())?.extendedGetter.remainder(throw 'Null access');
 }
 
 void getterReturnsNever(A a) {
@@ -353,14 +326,14 @@
   // Should throw if `method` completes normally.
 }
 
-void switchOnBool(bool b) {
+int switchOnBool(bool b) {
   switch (b) {
     case true:
-      return;
+      return 0;
     case false:
-      return;
+      return 1;
   }
-  // Should throw if the implicit `default` branch is taken.
+  return 42;
 }
 
 void switchOnEnum(Hand hand) {
diff --git a/tests/language/nnbd/flow_analysis/never_runtime_check_test.dart b/tests/language/nnbd/flow_analysis/never_runtime_check_test.dart
index d3f2d71..810a435 100644
--- a/tests/language/nnbd/flow_analysis/never_runtime_check_test.dart
+++ b/tests/language/nnbd/flow_analysis/never_runtime_check_test.dart
@@ -22,221 +22,72 @@
 }
 
 main() {
-  Expect.throws(() {
-    neverParameter(null);
-  });
+  Expect.equals(42, neverParameter(null));
 
-  Expect.throws(() {
-    NeverField().n = null;
-  });
+  var neverField = NeverField.initializingFormal(null);
+  // Write.
+  Expect.equals(null, neverField.n = null);
+  // Read.
+  Expect.equals(null, neverField.n);
 
-  Expect.throws(() {
-    // Write.
-    topLevelNever = null;
-  });
+  // Write.
+  Expect.equals(null, topLevelNever = null);
+  // Read.
+  Expect.equals(null, topLevelNever);
 
-  Expect.throws(() {
-    // Read.
-    topLevelNever;
-  });
+  Expect.isFalse(isPromoteToNever(null));
+  Expect.isFalse(isPromoteToNever_noIf(null));
+  Expect.isTrue(isNotPromoteToNever(null));
+  Expect.isTrue(isNotPromoteToNever_noIf(null));
+  Expect.equals(42, equalNullPromoteToNever(() => null));
+  Expect.equals(42, equalNullPromoteToNever_noIf(() => null));
+  Expect.equals(42, notEqualNullPromoteToNever(() => null));
+  Expect.equals(42, notEqualNullPromoteToNever_noIf(() => null));
+  Expect.equals(42, nullEqualPromoteToNever(() => null));
+  Expect.equals(42, nullEqualPromoteToNever_noIf(() => null));
+  Expect.equals(42, nullNotEqualPromoteToNever(() => null));
+  Expect.equals(42, nullNotEqualPromoteToNever_noIf(() => null));
+  Expect.equals(42, unnecessaryIfNull(() => null, () => 42));
+  Expect.equals(42, ifNullAssignLocal(null, () => 42));
 
-  Expect.throws(() {
-    NeverField.initializingFormal(null);
-  });
+  // Write.
+  Expect.equals(null, C.staticField = null);
 
-  Expect.throws(() {
-    isPromoteToNever(null);
-  });
+  // Read.
+  Expect.equals(null, C.staticField);
 
-  Expect.throws(() {
-    isPromoteToNever_noIf(null);
-  });
+  Expect.equals(42, ifNullAssignStatic(() => 42));
+  Expect.equals(42, ifNullAssignStaticGetter_nullableSetter(() => 42));
+  Expect.equals(42, ifNullAssignField(C(null), () => 42));
+  Expect.equals(42, ifNullAssignGetter_nullableSetter(C(null), () => 42));
+  Expect.equals(42, ifNullAssignGetter_implicitExtension(E(null), () => 42));
+  Expect.equals(42, ifNullAssignGetter_explicitExtension(E(null), () => 42));
+  Expect.equals(42, ifNullAssignIndex(<int>[null], () => 42));
+  Expect.equals(42, ifNullAssignIndex_nullAware(<int>[null], () => 42));
+  Expect.equals(42, ifNullAssignIndex_nullableSetter(C(null), () => 42));
+  Expect.equals(42, ifNullAssignIndex_implicitExtension(E(null), () => 42));
+  Expect.equals(42, ifNullAssignIndex_explicitExtension(E(null), () => 42));
+  Expect.equals(42, ifNullAssignSuper(D(null), () => 42));
+  Expect.equals(42, ifNullAssignSuper_nullableSetter(D(null), () => 42));
+  Expect.equals(42, ifNullAssignSuperIndex(D(null), () => 42));
+  Expect.equals(42, ifNullAssignNullAwareField(C(null), () => 42));
+  Expect.equals(null, ifNullAssignNullAwareField(null, () => 42));
+  Expect.equals(42, ifNullAssignNullAwareStatic(() => 42));
 
-  Expect.throws(() {
-    isNotPromoteToNever(null);
-  });
-
-  Expect.throws(() {
-    isNotPromoteToNever_noIf(null);
-  });
-
-  Expect.throws(() {
-    equalNullPromoteToNever(() => null);
-  });
-
-  Expect.throws(() {
-    equalNullPromoteToNever_noIf(() => null);
-  });
-
-  Expect.throws(() {
-    notEqualNullPromoteToNever(() => null);
-  });
-
-  Expect.throws(() {
-    notEqualNullPromoteToNever_noIf(() => null);
-  });
-
-  Expect.throws(() {
-    nullEqualPromoteToNever(() => null);
-  });
-
-  Expect.throws(() {
-    nullEqualPromoteToNever_noIf(() => null);
-  });
-
-  Expect.throws(() {
-    nullNotEqualPromoteToNever(() => null);
-  });
-
-  Expect.throws(() {
-    nullNotEqualPromoteToNever_noIf(() => null);
-  });
-
-  Expect.throws(() {
-    unnecessaryIfNull(() => null, () => throw "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    ifNullAssignLocal(null, () => throw "should not reach");
-  }, (error) => error != "should not reach");
-
-  C.staticField = null;
-  Expect.throws(() {
-    ifNullAssignStatic(() => throw "should not reach");
-  }, (error) => error != "should not reach");
-
-  C.staticField = null;
-  Expect.throws(() {
-    ifNullAssignStaticGetter_nullableSetter(() => throw "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    ifNullAssignField(C(null), () => throw "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    ifNullAssignGetter_nullableSetter(C(null), () => throw "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    ifNullAssignGetter_implicitExtension(
-        E(null), () => throw "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    ifNullAssignGetter_explicitExtension(
-        E(null), () => throw "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    ifNullAssignIndex(<int>[null], () => throw "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    ifNullAssignIndex_nullAware(<int>[null], () => throw "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    ifNullAssignIndex_nullableSetter(C(null), () => throw "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    ifNullAssignIndex_implicitExtension(
-        E(null), () => throw "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    ifNullAssignIndex_explicitExtension(
-        E(null), () => throw "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    ifNullAssignSuper(D(null), () => throw "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    ifNullAssignSuper_nullableSetter(D(null), () => throw "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    ifNullAssignSuperIndex(D(null), () => throw "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    ifNullAssignNullAwareField(C(null), () => throw "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.equals(
-      ifNullAssignNullAwareField(null, () => throw "should not reach"), null);
-
-  C.staticField = null;
-  Expect.throws(() {
-    ifNullAssignNullAwareStatic(() => throw "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    unnecessaryNullAwareAccess(() => null, "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    unnecessaryNullAwareAccess_methodOnObject(() => null, "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    unnecessaryNullAwareAccess_cascaded_methodOnObject(
-        () => null, "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    unnecessaryNullAwareAccess_methodOnExtension(
-        () => null, "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    unnecessaryNullAwareAccess_cascaded_methodOnExtension(
-        () => null, "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    unnecessaryNullAwareAccess_methodOnExtension_explicit(
-        () => null, "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    unnecessaryNullAwareAccess_getter(() => null, "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    unnecessaryNullAwareAccess_cascaded(() => null, "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    unnecessaryNullAwareAccess_cascaded_getter(() => null, "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    unnecessaryNullAwareAccess_getterOnObject(() => null, "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    unnecessaryNullAwareAccess_cascaded_getterOnObject(
-        () => null, "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    unnecessaryNullAwareAccess_getterOnExtension(
-        () => null, "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    unnecessaryNullAwareAccess_cascaded_getterOnExtension(
-        () => null, "should not reach");
-  }, (error) => error != "should not reach");
-
-  Expect.throws(() {
-    unnecessaryNullAwareAccess_getterOnExtension_explicit(
-        () => null, "should not reach");
-  }, (error) => error != "should not reach");
+  unnecessaryNullAwareAccess(() => null);
+  unnecessaryNullAwareAccess_methodOnObject(() => null);
+  unnecessaryNullAwareAccess_cascaded_methodOnObject(() => null);
+  unnecessaryNullAwareAccess_methodOnExtension(() => null);
+  unnecessaryNullAwareAccess_cascaded_methodOnExtension(() => null);
+  unnecessaryNullAwareAccess_methodOnExtension_explicit(() => null);
+  unnecessaryNullAwareAccess_getter(() => null);
+  unnecessaryNullAwareAccess_cascaded(() => null);
+  unnecessaryNullAwareAccess_cascaded_getter(() => null);
+  unnecessaryNullAwareAccess_getterOnObject(() => null);
+  unnecessaryNullAwareAccess_cascaded_getterOnObject(() => null);
+  unnecessaryNullAwareAccess_getterOnExtension(() => null);
+  unnecessaryNullAwareAccess_cascaded_getterOnExtension(() => null);
+  unnecessaryNullAwareAccess_getterOnExtension_explicit(() => null);
 
   Expect.throws(() {
     getterReturnsNever(AImpl());
@@ -262,11 +113,22 @@
     returnsNeverInVariable(AImpl());
   });
 
-  Expect.throws(() {
-    switchOnBool(null);
-  });
+  Expect.equals(42, switchOnBool(null));
 
   Expect.throws(() {
     switchOnEnum(null);
   });
 }
+
+bool isCalled;
+
+registerCallAndReturnNull() {
+  isCalled = true;
+  return null;
+}
+
+expectCall(void Function() f) {
+  isCalled = false;
+  f();
+  Expect.isTrue(isCalled);
+}
diff --git a/tests/language/null_aware/prefix_not_shortening_test.dart b/tests/language/null_aware/prefix_not_shortening_test.dart
new file mode 100644
index 0000000..20ef1af
--- /dev/null
+++ b/tests/language/null_aware/prefix_not_shortening_test.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2020, 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.
+
+class C {
+  C e() => this;
+  C operator -() => this;
+  C operator ~() => this;
+}
+
+void main() {
+  final C? c = new C();
+  /**/ -c?.e();
+  //    ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  //   ^
+  // [cfe] Operator 'unary-' cannot be called on 'C?' because it is potentially null.
+
+  /**/ ~c?.e();
+  //    ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  //   ^
+  // [cfe] Operator '~' cannot be called on 'C?' because it is potentially null.
+}
diff --git a/tests/language/operator/invalid_operators_test.dart b/tests/language/operator/invalid_operators_test.dart
index 52eae80..badafb5 100644
--- a/tests/language/operator/invalid_operators_test.dart
+++ b/tests/language/operator/invalid_operators_test.dart
@@ -572,13 +572,15 @@
   operator ==<T>(a) => true;
   //       ^^
   // [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
-  // [cfe] Declared type variables of 'Operators7.==' doesn't match those on overridden method 'Object.=='.
+  // [cfe] Can't infer a return type for '==' as the overridden members don't have a combined signature.
   //       ^
-  // [cfe] The return type of the method 'Operators7.==' is 'dynamic', which does not match the return type, 'bool', of the overridden method, 'Object.=='.
+  // [cfe] Declared type variables of 'Operators7.==' doesn't match those on overridden method 'Object.=='.
   //         ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
   //          ^
   // [cfe] Types parameters aren't allowed when defining an operator.
+  //             ^
+  // [cfe] Can't infer a type for 'a' as the overridden members don't have a combined signature.
   operator ><T>(a) => true;
   //        ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
@@ -675,7 +677,7 @@
   /*space*/ int operator []=(a, b) => 1;
   //        ^^^
   // [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_OPERATOR
-  // [cfe] unspecified
+  // [cfe] The return type of the operator []= must be 'void'.
 }
 
 main() {}
diff --git a/tools/VERSION b/tools/VERSION
index 178e41b..b4ac9ab 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 11
 PATCH 0
-PRERELEASE 201
+PRERELEASE 202
 PRERELEASE_PATCH 0
\ No newline at end of file
