Update status files after CL 100580

Change-Id: I01efd49885e4c8cca81e2521cbcd45f1a79ba035
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/100849
Reviewed-by: Aske Simon Christensen <askesc@google.com>
diff --git a/pkg/front_end/testcases/abstract_members.dart.hierarchy.expect b/pkg/front_end/testcases/abstract_members.dart.hierarchy.expect
index 231e9e1..99a7137 100644
--- a/pkg/front_end/testcases/abstract_members.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/abstract_members.dart.hierarchy.expect
@@ -288,7 +288,7 @@
     Object._simpleInstanceOf
     B.bMethod
     Object._instanceOf
-    MyMock1.noSuchMethod
+    MyMock2.MyMock1.noSuchMethod%MyMock2.noSuchMethod
     A.abstractMethod
     Object._identityHashCode
     Object.hashCode
@@ -308,7 +308,7 @@
     Object._simpleInstanceOf
     B.bMethod
     Object._instanceOf
-    MyMock1.noSuchMethod
+    MyMock2.MyMock1.noSuchMethod%MyMock2.noSuchMethod
     A.abstractMethod
     Interface1.interfaceMethod1
     Object._identityHashCode
@@ -338,7 +338,7 @@
     Object._simpleInstanceOf
     B.bMethod
     Object._instanceOf
-    Object.noSuchMethod
+    MyMock3.Object.noSuchMethod%MyMock3.noSuchMethod
     A.abstractMethod
     Object._identityHashCode
     Object.hashCode
@@ -358,7 +358,7 @@
     Object._simpleInstanceOf
     B.bMethod
     Object._instanceOf
-    Object.noSuchMethod
+    MyMock3.Object.noSuchMethod%MyMock3.noSuchMethod
     A.abstractMethod
     Interface1.interfaceMethod1
     Object._identityHashCode
diff --git a/pkg/front_end/testcases/abstract_members.dart.legacy.expect b/pkg/front_end/testcases/abstract_members.dart.legacy.expect
index 5a3c3d0..0322fcb 100644
--- a/pkg/front_end/testcases/abstract_members.dart.legacy.expect
+++ b/pkg/front_end/testcases/abstract_members.dart.legacy.expect
@@ -194,7 +194,7 @@
   synthetic constructor •() → self::MyMock1
     : super self::B::•()
     ;
-  method noSuchMethod(dynamic _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     return null;
   no-such-method-forwarder method interfaceMethod2() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod2, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
@@ -217,13 +217,13 @@
   synthetic constructor •() → self::MyMock2
     : super self::MyMock1::•()
     ;
-  abstract method noSuchMethod(dynamic _) → dynamic;
+  abstract method noSuchMethod(core::Invocation _) → dynamic;
 }
 class MyMock3 extends self::B {
   synthetic constructor •() → self::MyMock3
     : super self::B::•()
     ;
-  abstract method noSuchMethod(dynamic _) → dynamic;
+  abstract method noSuchMethod(core::Invocation _) → dynamic;
   no-such-method-forwarder get interfaceMethod1() → dynamic
     return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) as{TypeError} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
diff --git a/pkg/front_end/testcases/abstract_members.dart.legacy.transformed.expect b/pkg/front_end/testcases/abstract_members.dart.legacy.transformed.expect
index 5a3c3d0..0322fcb 100644
--- a/pkg/front_end/testcases/abstract_members.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/abstract_members.dart.legacy.transformed.expect
@@ -194,7 +194,7 @@
   synthetic constructor •() → self::MyMock1
     : super self::B::•()
     ;
-  method noSuchMethod(dynamic _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     return null;
   no-such-method-forwarder method interfaceMethod2() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod2, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
@@ -217,13 +217,13 @@
   synthetic constructor •() → self::MyMock2
     : super self::MyMock1::•()
     ;
-  abstract method noSuchMethod(dynamic _) → dynamic;
+  abstract method noSuchMethod(core::Invocation _) → dynamic;
 }
 class MyMock3 extends self::B {
   synthetic constructor •() → self::MyMock3
     : super self::B::•()
     ;
-  abstract method noSuchMethod(dynamic _) → dynamic;
+  abstract method noSuchMethod(core::Invocation _) → dynamic;
   no-such-method-forwarder get interfaceMethod1() → dynamic
     return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) as{TypeError} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
diff --git a/pkg/front_end/testcases/abstract_members.dart.outline.expect b/pkg/front_end/testcases/abstract_members.dart.outline.expect
index ad1e730..c54c9fb 100644
--- a/pkg/front_end/testcases/abstract_members.dart.outline.expect
+++ b/pkg/front_end/testcases/abstract_members.dart.outline.expect
@@ -197,7 +197,7 @@
 class MyMock1 extends self::B {
   synthetic constructor •() → self::MyMock1
     ;
-  method noSuchMethod(dynamic _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     ;
   no-such-method-forwarder method interfaceMethod2() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod2, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
@@ -219,12 +219,12 @@
 class MyMock2 extends self::MyMock1 {
   synthetic constructor •() → self::MyMock2
     ;
-  abstract method noSuchMethod(dynamic _) → dynamic;
+  abstract method noSuchMethod(core::Invocation _) → dynamic;
 }
 class MyMock3 extends self::B {
   synthetic constructor •() → self::MyMock3
     ;
-  abstract method noSuchMethod(dynamic _) → dynamic;
+  abstract method noSuchMethod(core::Invocation _) → dynamic;
   no-such-method-forwarder get interfaceMethod1() → dynamic
     return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) as{TypeError} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
diff --git a/pkg/front_end/testcases/bad_setter_abstract.dart.legacy.expect b/pkg/front_end/testcases/bad_setter_abstract.dart.legacy.expect
index e84ce6f..f93d1cb 100644
--- a/pkg/front_end/testcases/bad_setter_abstract.dart.legacy.expect
+++ b/pkg/front_end/testcases/bad_setter_abstract.dart.legacy.expect
@@ -47,13 +47,13 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  set a(dynamic #synthetic) → dynamic {
+  set a(dynamic #synthetic) → void {
     invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:10:8: Error: A setter should have exactly one formal parameter.
   set a();
        ^";
     ;
   }
-  set d(dynamic #synthetic) → dynamic {
+  set d(dynamic #synthetic) → void {
     invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.
   set d(x, y);
        ^";
@@ -68,13 +68,13 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  set a(dynamic #synthetic) → dynamic {
+  set a(dynamic #synthetic) → void {
     invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:15:8: Error: A setter should have exactly one formal parameter.
   set a();
        ^";
     ;
   }
-  set d(dynamic #synthetic) → dynamic {
+  set d(dynamic #synthetic) → void {
     invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:16:8: Error: A setter should have exactly one formal parameter.
   set d(x, y);
        ^";
@@ -85,13 +85,13 @@
     }
   }
 }
-static set b(dynamic #synthetic) → dynamic {
+static set b(dynamic #synthetic) → void {
   invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.
 set b();
      ^";
   ;
 }
-static set c(dynamic #synthetic) → dynamic {
+static set c(dynamic #synthetic) → void {
   invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.
 set c(x, y);
      ^";
diff --git a/pkg/front_end/testcases/bad_setter_abstract.dart.legacy.transformed.expect b/pkg/front_end/testcases/bad_setter_abstract.dart.legacy.transformed.expect
index e84ce6f..f93d1cb 100644
--- a/pkg/front_end/testcases/bad_setter_abstract.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/bad_setter_abstract.dart.legacy.transformed.expect
@@ -47,13 +47,13 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  set a(dynamic #synthetic) → dynamic {
+  set a(dynamic #synthetic) → void {
     invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:10:8: Error: A setter should have exactly one formal parameter.
   set a();
        ^";
     ;
   }
-  set d(dynamic #synthetic) → dynamic {
+  set d(dynamic #synthetic) → void {
     invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.
   set d(x, y);
        ^";
@@ -68,13 +68,13 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  set a(dynamic #synthetic) → dynamic {
+  set a(dynamic #synthetic) → void {
     invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:15:8: Error: A setter should have exactly one formal parameter.
   set a();
        ^";
     ;
   }
-  set d(dynamic #synthetic) → dynamic {
+  set d(dynamic #synthetic) → void {
     invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:16:8: Error: A setter should have exactly one formal parameter.
   set d(x, y);
        ^";
@@ -85,13 +85,13 @@
     }
   }
 }
-static set b(dynamic #synthetic) → dynamic {
+static set b(dynamic #synthetic) → void {
   invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.
 set b();
      ^";
   ;
 }
-static set c(dynamic #synthetic) → dynamic {
+static set c(dynamic #synthetic) → void {
   invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.
 set c(x, y);
      ^";
diff --git a/pkg/front_end/testcases/bad_setter_abstract.dart.outline.expect b/pkg/front_end/testcases/bad_setter_abstract.dart.outline.expect
index 68dcc4d..65b27e3 100644
--- a/pkg/front_end/testcases/bad_setter_abstract.dart.outline.expect
+++ b/pkg/front_end/testcases/bad_setter_abstract.dart.outline.expect
@@ -18,22 +18,22 @@
 class A extends core::Object {
   synthetic constructor •() → self::A
     ;
-  set a(dynamic #synthetic) → dynamic
+  set a(dynamic #synthetic) → void
     ;
-  set d(dynamic #synthetic) → dynamic
+  set d(dynamic #synthetic) → void
     ;
 }
 abstract class B extends core::Object {
   synthetic constructor •() → self::B
     ;
-  set a(dynamic #synthetic) → dynamic
+  set a(dynamic #synthetic) → void
     ;
-  set d(dynamic #synthetic) → dynamic
+  set d(dynamic #synthetic) → void
     ;
 }
-static set b(dynamic #synthetic) → dynamic
+static set b(dynamic #synthetic) → void
   ;
-static set c(dynamic #synthetic) → dynamic
+static set c(dynamic #synthetic) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/bug32866.dart.legacy.expect b/pkg/front_end/testcases/bug32866.dart.legacy.expect
index f62f9f6..5cf6726 100644
--- a/pkg/front_end/testcases/bug32866.dart.legacy.expect
+++ b/pkg/front_end/testcases/bug32866.dart.legacy.expect
@@ -9,7 +9,7 @@
   abstract get f() → core::String;
 }
 class A extends core::Object implements self::B {
-  final field dynamic f;
+  final field core::String f;
   constructor •(dynamic f) → self::A
     : self::A::f = f, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/bug32866.dart.legacy.transformed.expect b/pkg/front_end/testcases/bug32866.dart.legacy.transformed.expect
index f62f9f6..5cf6726 100644
--- a/pkg/front_end/testcases/bug32866.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/bug32866.dart.legacy.transformed.expect
@@ -9,7 +9,7 @@
   abstract get f() → core::String;
 }
 class A extends core::Object implements self::B {
-  final field dynamic f;
+  final field core::String f;
   constructor •(dynamic f) → self::A
     : self::A::f = f, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/bug32866.dart.outline.expect b/pkg/front_end/testcases/bug32866.dart.outline.expect
index 0b51724..c902755 100644
--- a/pkg/front_end/testcases/bug32866.dart.outline.expect
+++ b/pkg/front_end/testcases/bug32866.dart.outline.expect
@@ -8,7 +8,7 @@
   abstract get f() → core::String;
 }
 class A extends core::Object implements self::B {
-  final field dynamic f;
+  final field core::String f;
   constructor •(dynamic f) → self::A
     ;
 }
diff --git a/pkg/front_end/testcases/bug33206.dart.legacy.expect b/pkg/front_end/testcases/bug33206.dart.legacy.expect
index b0dba95..1d53254 100644
--- a/pkg/front_end/testcases/bug33206.dart.legacy.expect
+++ b/pkg/front_end/testcases/bug33206.dart.legacy.expect
@@ -11,7 +11,7 @@
   constructor •(dynamic x, dynamic y) → self::X
     : self::X::x = x, self::X::y = y, super core::Object::•()
     ;
-  method toString() → dynamic
+  method toString() → core::String
     return "X(${this.{self::X::x}}, ${this.{self::X::y}})";
 }
 class Y extends core::Object {
diff --git a/pkg/front_end/testcases/bug33206.dart.legacy.transformed.expect b/pkg/front_end/testcases/bug33206.dart.legacy.transformed.expect
index 2a26c19..f484e4b 100644
--- a/pkg/front_end/testcases/bug33206.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/bug33206.dart.legacy.transformed.expect
@@ -11,7 +11,7 @@
   constructor •(dynamic x, dynamic y) → self::X
     : self::X::x = x, self::X::y = y, super core::Object::•()
     ;
-  method toString() → dynamic
+  method toString() → core::String
     return "X(${this.{self::X::x}}, ${this.{self::X::y}})";
 }
 class Y extends core::Object {
diff --git a/pkg/front_end/testcases/bug33206.dart.outline.expect b/pkg/front_end/testcases/bug33206.dart.outline.expect
index 95d83e8..3dd6634 100644
--- a/pkg/front_end/testcases/bug33206.dart.outline.expect
+++ b/pkg/front_end/testcases/bug33206.dart.outline.expect
@@ -10,7 +10,7 @@
   final field dynamic y;
   constructor •(dynamic x, dynamic y) → self::X
     ;
-  method toString() → dynamic
+  method toString() → core::String
     ;
 }
 class Y extends core::Object {
diff --git a/pkg/front_end/testcases/covariant_generic.dart.outline.expect b/pkg/front_end/testcases/covariant_generic.dart.outline.expect
index 4b44219..da79e5c 100644
--- a/pkg/front_end/testcases/covariant_generic.dart.outline.expect
+++ b/pkg/front_end/testcases/covariant_generic.dart.outline.expect
@@ -12,7 +12,7 @@
     ;
   method method(generic-covariant-impl self::Foo::T x) → void
     ;
-  set setter(generic-covariant-impl self::Foo::T x) → dynamic
+  set setter(generic-covariant-impl self::Foo::T x) → void
     ;
   method withCallback((self::Foo::T) → void callback) → void
     ;
diff --git a/pkg/front_end/testcases/escape.dart.legacy.expect b/pkg/front_end/testcases/escape.dart.legacy.expect
index 389e93a..ec93320 100644
--- a/pkg/front_end/testcases/escape.dart.legacy.expect
+++ b/pkg/front_end/testcases/escape.dart.legacy.expect
@@ -18,7 +18,7 @@
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator ==(dynamic x) → dynamic
+  operator ==(dynamic x) → core::bool
     return false;
 }
 class X extends core::Object implements self::A, self::B {
diff --git a/pkg/front_end/testcases/escape.dart.legacy.transformed.expect b/pkg/front_end/testcases/escape.dart.legacy.transformed.expect
index 389e93a..ec93320 100644
--- a/pkg/front_end/testcases/escape.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/escape.dart.legacy.transformed.expect
@@ -18,7 +18,7 @@
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator ==(dynamic x) → dynamic
+  operator ==(dynamic x) → core::bool
     return false;
 }
 class X extends core::Object implements self::A, self::B {
diff --git a/pkg/front_end/testcases/escape.dart.outline.expect b/pkg/front_end/testcases/escape.dart.outline.expect
index e98ed5f..1bccd65 100644
--- a/pkg/front_end/testcases/escape.dart.outline.expect
+++ b/pkg/front_end/testcases/escape.dart.outline.expect
@@ -15,7 +15,7 @@
 class C extends core::Object {
   synthetic constructor •() → self::C
     ;
-  operator ==(dynamic x) → dynamic
+  operator ==(dynamic x) → core::bool
     ;
 }
 class X extends core::Object implements self::A, self::B {
diff --git a/pkg/front_end/testcases/ignore_function.dart.hierarchy.expect b/pkg/front_end/testcases/ignore_function.dart.hierarchy.expect
new file mode 100644
index 0000000..329fb74
--- /dev/null
+++ b/pkg/front_end/testcases/ignore_function.dart.hierarchy.expect
@@ -0,0 +1,83 @@
+Object:
+  superclasses:
+  interfaces:
+  classMembers:
+    Object._haveSameRuntimeType
+    Object.toString
+    Object.runtimeType
+    Object._toString
+    Object._simpleInstanceOf
+    Object._hashCodeRnd
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._objectHashCode
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+
+A:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    A.==
+  classSetters:
+
+Function:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Function.==
+  classSetters:
+
+B:
+  Longest path to Object: 2
+  superclasses:
+    Object
+  interfaces: Function
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    B.==
+  classSetters:
+  interfaceMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    B.==
+  interfaceSetters:
diff --git a/pkg/front_end/testcases/ignore_function.dart.legacy.expect b/pkg/front_end/testcases/ignore_function.dart.legacy.expect
new file mode 100644
index 0000000..5b8a8d2
--- /dev/null
+++ b/pkg/front_end/testcases/ignore_function.dart.legacy.expect
@@ -0,0 +1,36 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/ignore_function.dart:14:15: Error: Can't infer a type for 'other' as some of the inherited members have different types.
+// Try adding an explicit type.
+//   operator ==(other) => false;
+//               ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:core" as core;
+
+class A extends core::Object implements core::Function {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  operator ==(dynamic other) → core::bool
+    return false;
+}
+class B extends core::Object implements self::Function {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  operator ==(invalid-type other) → core::bool
+    return false;
+}
+class Function extends core::Object {
+  synthetic constructor •() → self::Function
+    : super core::Object::•()
+    ;
+  operator ==(core::Object other) → core::bool
+    return false;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/ignore_function.dart.legacy.transformed.expect b/pkg/front_end/testcases/ignore_function.dart.legacy.transformed.expect
new file mode 100644
index 0000000..5b8a8d2
--- /dev/null
+++ b/pkg/front_end/testcases/ignore_function.dart.legacy.transformed.expect
@@ -0,0 +1,36 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/ignore_function.dart:14:15: Error: Can't infer a type for 'other' as some of the inherited members have different types.
+// Try adding an explicit type.
+//   operator ==(other) => false;
+//               ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:core" as core;
+
+class A extends core::Object implements core::Function {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  operator ==(dynamic other) → core::bool
+    return false;
+}
+class B extends core::Object implements self::Function {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  operator ==(invalid-type other) → core::bool
+    return false;
+}
+class Function extends core::Object {
+  synthetic constructor •() → self::Function
+    : super core::Object::•()
+    ;
+  operator ==(core::Object other) → core::bool
+    return false;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/ignore_function.dart.outline.expect b/pkg/front_end/testcases/ignore_function.dart.outline.expect
new file mode 100644
index 0000000..a1585c3
--- /dev/null
+++ b/pkg/front_end/testcases/ignore_function.dart.outline.expect
@@ -0,0 +1,34 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/ignore_function.dart:14:15: Error: Can't infer a type for 'other' as some of the inherited members have different types.
+// Try adding an explicit type.
+//   operator ==(other) => false;
+//               ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:core" as core;
+
+class A extends core::Object implements core::Function {
+  synthetic constructor •() → self::A
+    ;
+  operator ==(dynamic other) → core::bool
+    ;
+}
+class B extends core::Object implements self::Function {
+  synthetic constructor •() → self::B
+    ;
+  operator ==(invalid-type other) → core::bool
+    ;
+}
+class Function extends core::Object {
+  synthetic constructor •() → self::Function
+    ;
+  operator ==(core::Object other) → core::bool
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/ignore_function.dart.strong.expect b/pkg/front_end/testcases/ignore_function.dart.strong.expect
new file mode 100644
index 0000000..5b8a8d2
--- /dev/null
+++ b/pkg/front_end/testcases/ignore_function.dart.strong.expect
@@ -0,0 +1,36 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/ignore_function.dart:14:15: Error: Can't infer a type for 'other' as some of the inherited members have different types.
+// Try adding an explicit type.
+//   operator ==(other) => false;
+//               ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:core" as core;
+
+class A extends core::Object implements core::Function {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  operator ==(dynamic other) → core::bool
+    return false;
+}
+class B extends core::Object implements self::Function {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  operator ==(invalid-type other) → core::bool
+    return false;
+}
+class Function extends core::Object {
+  synthetic constructor •() → self::Function
+    : super core::Object::•()
+    ;
+  operator ==(core::Object other) → core::bool
+    return false;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.expect
index 73adfd1..bd67e53 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.expect
@@ -2,18 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/circular_reference_via_closures.dart:9:5: Error: Can't infer the type of 'y': circularity found during type inference.
-// Specify the type explicitly.
-// var y = /*@returnType=invalid-type*/ () => x;
-//     ^
-//
 // pkg/front_end/testcases/inference/circular_reference_via_closures.dart:8:5: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
-// var x = /*@returnType=invalid-type*/ () => y;
+// var x = /*@returnType=() -> invalid-type*/ () => y;
 //     ^
 //
 import self as self;
 
-static field invalid-type x = (() → invalid-type => self::y) as{TypeError} invalid-type;
-static field invalid-type y = (() → invalid-type => self::x) as{TypeError} invalid-type;
+static field invalid-type x = (() → () → invalid-type => self::y) as{TypeError} invalid-type;
+static field () → invalid-type y = () → invalid-type => self::x;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.transformed.expect
index 73adfd1..bd67e53 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.transformed.expect
@@ -2,18 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/circular_reference_via_closures.dart:9:5: Error: Can't infer the type of 'y': circularity found during type inference.
-// Specify the type explicitly.
-// var y = /*@returnType=invalid-type*/ () => x;
-//     ^
-//
 // pkg/front_end/testcases/inference/circular_reference_via_closures.dart:8:5: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
-// var x = /*@returnType=invalid-type*/ () => y;
+// var x = /*@returnType=() -> invalid-type*/ () => y;
 //     ^
 //
 import self as self;
 
-static field invalid-type x = (() → invalid-type => self::y) as{TypeError} invalid-type;
-static field invalid-type y = (() → invalid-type => self::x) as{TypeError} invalid-type;
+static field invalid-type x = (() → () → invalid-type => self::y) as{TypeError} invalid-type;
+static field () → invalid-type y = () → invalid-type => self::x;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.expect
index 4f81f83..88a970d 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.expect
@@ -2,18 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:9:5: Error: Can't infer the type of 'y': circularity found during type inference.
-// Specify the type explicitly.
-// var y = /*@returnType=invalid-type*/ () => x;
-//     ^
-//
 // pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:8:5: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
-// var x = /*@returnType=invalid-type*/ () => y;
+// var x = /*@returnType=() -> invalid-type*/ () => y;
 //     ^
 //
 import self as self;
 
-static field invalid-type x = (() → invalid-type => self::y) as{TypeError} invalid-type;
-static field invalid-type y = (() → invalid-type => self::x) as{TypeError} invalid-type;
+static field invalid-type x = (() → () → invalid-type => self::y) as{TypeError} invalid-type;
+static field () → invalid-type y = () → invalid-type => self::x;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.transformed.expect
index 4f81f83..88a970d 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.transformed.expect
@@ -2,18 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:9:5: Error: Can't infer the type of 'y': circularity found during type inference.
-// Specify the type explicitly.
-// var y = /*@returnType=invalid-type*/ () => x;
-//     ^
-//
 // pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:8:5: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
-// var x = /*@returnType=invalid-type*/ () => y;
+// var x = /*@returnType=() -> invalid-type*/ () => y;
 //     ^
 //
 import self as self;
 
-static field invalid-type x = (() → invalid-type => self::y) as{TypeError} invalid-type;
-static field invalid-type y = (() → invalid-type => self::x) as{TypeError} invalid-type;
+static field invalid-type x = (() → () → invalid-type => self::y) as{TypeError} invalid-type;
+static field () → invalid-type y = () → invalid-type => self::x;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/conflicting_fields.dart.hierarchy.expect b/pkg/front_end/testcases/inference/conflicting_fields.dart.hierarchy.expect
index 058c190..b2b061e 100644
--- a/pkg/front_end/testcases/inference/conflicting_fields.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart.hierarchy.expect
@@ -79,8 +79,8 @@
     Object._simpleInstanceOfTrue
     Object.==
   classSetters:
-    A.field1
-    A.field2
+    B.field1
+    B.field2
   interfaceMembers:
     B.field1
     Object.toString
@@ -95,5 +95,5 @@
     Object._simpleInstanceOfTrue
     Object.==
   interfaceSetters:
-    A.field1
-    A.field2
+    B.field1
+    B.field2
diff --git a/pkg/front_end/testcases/inference/conflicting_fields.dart.legacy.expect b/pkg/front_end/testcases/inference/conflicting_fields.dart.legacy.expect
index 67e1ae7..0a84181 100644
--- a/pkg/front_end/testcases/inference/conflicting_fields.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart.legacy.expect
@@ -1,4 +1,17 @@
 library;
+//
+// Problems in library:
+//
+// 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.
+// Try adding an explicit type.
+//   set field1(value) {}
+//              ^^^^^
+//
+// 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.
+// Try adding an explicit type.
+//   set field2(value) {}
+//              ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -20,9 +33,11 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  get field1() → dynamic
+  get field1() → core::int
     return null;
-  get field2() → dynamic
+  get field2() → core::int
     return null;
+  set field1(invalid-type value) → void {}
+  set field2(invalid-type value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/conflicting_fields.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/conflicting_fields.dart.legacy.transformed.expect
index 67e1ae7..0a84181 100644
--- a/pkg/front_end/testcases/inference/conflicting_fields.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart.legacy.transformed.expect
@@ -1,4 +1,17 @@
 library;
+//
+// Problems in library:
+//
+// 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.
+// Try adding an explicit type.
+//   set field1(value) {}
+//              ^^^^^
+//
+// 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.
+// Try adding an explicit type.
+//   set field2(value) {}
+//              ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -20,9 +33,11 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  get field1() → dynamic
+  get field1() → core::int
     return null;
-  get field2() → dynamic
+  get field2() → core::int
     return null;
+  set field1(invalid-type value) → void {}
+  set field2(invalid-type value) → void {}
 }
 static method main() → dynamic {}
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 6963ff2..57c1e7c 100644
--- a/pkg/front_end/testcases/inference/conflicting_fields.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart.outline.expect
@@ -1,4 +1,17 @@
 library;
+//
+// Problems in library:
+//
+// 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.
+// Try adding an explicit type.
+//   set field1(value) {}
+//              ^^^^^
+//
+// 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.
+// Try adding an explicit type.
+//   set field2(value) {}
+//              ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -17,9 +30,13 @@
 class B extends self::A implements self::I {
   synthetic constructor •() → self::B
     ;
-  get field1() → dynamic
+  get field1() → core::int
     ;
-  get field2() → dynamic
+  get field2() → core::int
+    ;
+  set field1(invalid-type value) → void
+    ;
+  set field2(invalid-type value) → void
     ;
 }
 static method main() → dynamic
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 3f45ef6..0a84181 100644
--- a/pkg/front_end/testcases/inference/conflicting_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart.strong.expect
@@ -2,42 +2,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/conflicting_fields.dart:18:7: Error: Can't infer a type for 'field1' 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 inherited members have different types.
 // Try adding an explicit type.
-//   get field1 => null;
-//       ^
+//   set field1(value) {}
+//              ^^^^^
 //
-// pkg/front_end/testcases/inference/conflicting_fields.dart:19:7: Error: Can't infer a type for 'field2' 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 inherited members have different types.
 // Try adding an explicit type.
-//   get field2 => null;
-//       ^
-//
-// pkg/front_end/testcases/inference/conflicting_fields.dart:19:7: Error: The return type of the method 'B.field2' is 'dynamic', which does not match the return type, 'int', of the overridden method, 'A.field2'.
-// Change to a subtype of 'int'.
-//   get field2 => null;
-//       ^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is the overridden method ('field2').
-//   int field2;
-//       ^
-//
-// pkg/front_end/testcases/inference/conflicting_fields.dart:18:7: Error: The return type of the method 'B.field1' is 'dynamic', which does not match the return type, 'int', of the overridden method, 'I.field1'.
-// Change to a subtype of 'int'.
-//   get field1 => null;
-//       ^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is the overridden method ('field1').
-//   int field1;
-//       ^
-//
-// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Error: The return type of the method 'A.field1' is 'dynamic', which does not match the return type, 'int', of the overridden method, 'I.field1'.
-// Change to a subtype of 'int'.
-//   dynamic field1;
-//           ^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is the overridden method ('field1').
-//   int field1;
-//       ^
-// pkg/front_end/testcases/inference/conflicting_fields.dart:17:7: Context: Both members are inherited by the non-abstract class 'B'.
-// class B extends A implements I {
-//       ^
+//   set field2(value) {}
+//              ^^^^^
 //
 import self as self;
 import "dart:core" as core;
@@ -60,10 +33,11 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  get field1() → dynamic
+  get field1() → core::int
     return null;
-  get field2() → dynamic
+  get field2() → core::int
     return null;
-  abstract forwarding-stub set field2(dynamic _) → void;
+  set field1(invalid-type value) → void {}
+  set field2(invalid-type value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.legacy.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.legacy.expect
index ae8c8ce..3e2c41e 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.legacy.expect
@@ -1,4 +1,17 @@
 library test;
+//
+// 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.
+// Try adding an explicit type.
+//   get 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.
+// Try adding an explicit type.
+//   get a => null;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -30,14 +43,14 @@
   synthetic constructor •() → self::C1
     : super core::Object::•()
     ;
-  get a() → dynamic
+  get a() → invalid-type
     return null;
 }
 class C2 extends core::Object implements self::B, self::A {
   synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
-  get a() → dynamic
+  get a() → invalid-type
     return null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.legacy.transformed.expect
index ae8c8ce..3e2c41e 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.legacy.transformed.expect
@@ -1,4 +1,17 @@
 library test;
+//
+// 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.
+// Try adding an explicit type.
+//   get 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.
+// Try adding an explicit type.
+//   get a => null;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -30,14 +43,14 @@
   synthetic constructor •() → self::C1
     : super core::Object::•()
     ;
-  get a() → dynamic
+  get a() → invalid-type
     return null;
 }
 class C2 extends core::Object implements self::B, self::A {
   synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
-  get a() → dynamic
+  get a() → invalid-type
     return null;
 }
 static method main() → dynamic {}
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 6e8c47d..3e2c41e 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,52 +2,16 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:7: Error: Can't infer a 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 inherited members have different types.
 // Try adding an explicit type.
 //   get a => null;
 //       ^
 //
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:30:7: Error: Can't infer a 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 inherited members have different types.
 // Try adding an explicit type.
 //   get a => null;
 //       ^
 //
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:7: Error: The return type of the method 'C1.a' is 'dynamic', which does not match the return type, 'I1', of the overridden method, 'A.a'.
-//  - 'I1' is from 'pkg/front_end/testcases/inference/conflicts_can_happen.dart'.
-// Change to a subtype of 'I1'.
-//   get a => null;
-//       ^
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is the overridden method ('a').
-//   final I1 a = null;
-//            ^
-//
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:7: Error: The return type of the method 'C1.a' is 'dynamic', which does not match the return type, 'I2', of the overridden method, 'B.a'.
-//  - 'I2' is from 'pkg/front_end/testcases/inference/conflicts_can_happen.dart'.
-// Change to a subtype of 'I2'.
-//   get a => null;
-//       ^
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is the overridden method ('a').
-//   final I2 a = null;
-//            ^
-//
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:30:7: Error: The return type of the method 'C2.a' is 'dynamic', which does not match the return type, 'I2', of the overridden method, 'B.a'.
-//  - 'I2' is from 'pkg/front_end/testcases/inference/conflicts_can_happen.dart'.
-// Change to a subtype of 'I2'.
-//   get a => null;
-//       ^
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is the overridden method ('a').
-//   final I2 a = null;
-//            ^
-//
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:30:7: Error: The return type of the method 'C2.a' is 'dynamic', which does not match the return type, 'I1', of the overridden method, 'A.a'.
-//  - 'I1' is from 'pkg/front_end/testcases/inference/conflicts_can_happen.dart'.
-// Change to a subtype of 'I1'.
-//   get a => null;
-//       ^
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is the overridden method ('a').
-//   final I1 a = null;
-//            ^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -79,14 +43,14 @@
   synthetic constructor •() → self::C1
     : super core::Object::•()
     ;
-  get a() → dynamic
+  get a() → invalid-type
     return null;
 }
 class C2 extends core::Object implements self::B, self::A {
   synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
-  get a() → dynamic
+  get a() → invalid-type
     return null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.legacy.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.legacy.expect
index e3d2868..7883099 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.legacy.expect
@@ -1,4 +1,12 @@
 library test;
+//
+// 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.
+// Try adding an explicit type.
+//   get a => null;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -44,7 +52,7 @@
   synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
-  get a() → dynamic
+  get a() → invalid-type
     return null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.legacy.transformed.expect
index e3d2868..7883099 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.legacy.transformed.expect
@@ -1,4 +1,12 @@
 library test;
+//
+// 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.
+// Try adding an explicit type.
+//   get a => null;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -44,7 +52,7 @@
   synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
-  get a() → dynamic
+  get a() → invalid-type
     return null;
 }
 static method main() → dynamic {}
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 411506a..7883099 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,29 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:7: Error: Can't infer a 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 inherited members have different types.
 // Try adding an explicit type.
 //   get a => null;
 //       ^
 //
-// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:7: Error: The return type of the method 'C2.a' is 'dynamic', which does not match the return type, 'I1', of the overridden method, 'A.a'.
-//  - 'I1' is from 'pkg/front_end/testcases/inference/conflicts_can_happen2.dart'.
-// Change to a subtype of 'I1'.
-//   get a => null;
-//       ^
-// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:22:12: Context: This is the overridden method ('a').
-//   final I1 a = null;
-//            ^
-//
-// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:7: Error: The return type of the method 'C2.a' is 'dynamic', which does not match the return type, 'I2', of the overridden method, 'B.a'.
-//  - 'I2' is from 'pkg/front_end/testcases/inference/conflicts_can_happen2.dart'.
-// Change to a subtype of 'I2'.
-//   get a => null;
-//       ^
-// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:26:12: Context: This is the overridden method ('a').
-//   final I2 a = null;
-//            ^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -70,7 +52,7 @@
   synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
-  get a() → dynamic
+  get a() → invalid-type
     return null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.legacy.expect b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.legacy.expect
index 9a63601..ebc33e7 100644
--- a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.legacy.expect
@@ -9,7 +9,7 @@
   abstract get foo() → core::Iterable<core::String>;
 }
 class B extends core::Object implements self::A {
-  final field dynamic foo = const <dynamic>[];
+  final field core::Iterable<core::String> foo = const <dynamic>[];
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.legacy.transformed.expect
index 9a63601..ebc33e7 100644
--- a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.legacy.transformed.expect
@@ -9,7 +9,7 @@
   abstract get foo() → core::Iterable<core::String>;
 }
 class B extends core::Object implements self::A {
-  final field dynamic foo = const <dynamic>[];
+  final field core::Iterable<core::String> foo = const <dynamic>[];
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.outline.expect
index 65ee9d5..945a5e0 100644
--- a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.outline.expect
@@ -8,7 +8,7 @@
   abstract get foo() → core::Iterable<core::String>;
 }
 class B extends core::Object implements self::A {
-  final field dynamic foo;
+  final field core::Iterable<core::String> foo;
   synthetic constructor •() → self::B
     ;
 }
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.legacy.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.legacy.expect
index d1361ce..a97723a 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.legacy.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object implements self::B {
-  final field dynamic x;
+  final field core::int x;
   constructor •() → self::C
     : self::C::x = self::f<dynamic>(), super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.legacy.transformed.expect
index d1361ce..a97723a 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.legacy.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object implements self::B {
-  final field dynamic x;
+  final field core::int x;
   constructor •() → self::C
     : self::C::x = self::f<dynamic>(), super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.outline.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.outline.expect
index e84a002..eda87a3 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object implements self::B {
-  final field dynamic x;
+  final field core::int x;
   constructor •() → self::C
     ;
 }
diff --git a/pkg/front_end/testcases/inference/future_then.dart.legacy.expect b/pkg/front_end/testcases/inference/future_then.dart.legacy.expect
index 88b6639..7126780 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_then.dart.legacy.transformed.expect
index 4f440e2..0e46318 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then.dart.outline.expect b/pkg/front_end/testcases/inference/future_then.dart.outline.expect
index 18f6651..6c0b0d6 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.legacy.expect b/pkg/front_end/testcases/inference/future_then_2.dart.legacy.expect
index a91d75e..c555879 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_then_2.dart.legacy.transformed.expect
index 6538f9e..63c4c5c 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_2.dart.outline.expect
index 18f6651..6c0b0d6 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.legacy.expect b/pkg/front_end/testcases/inference/future_then_3.dart.legacy.expect
index 2a3484c..075602a 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_then_3.dart.legacy.transformed.expect
index 346e77b8..895ce5a 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_3.dart.outline.expect
index 18f6651..6c0b0d6 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.legacy.expect b/pkg/front_end/testcases/inference/future_then_4.dart.legacy.expect
index c7d577e..8a393fd 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_then_4.dart.legacy.transformed.expect
index c90b143..98c8918 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_4.dart.outline.expect
index 18f6651..6c0b0d6 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.legacy.expect b/pkg/front_end/testcases/inference/future_then_5.dart.legacy.expect
index 141e3e7..58d742b 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_then_5.dart.legacy.transformed.expect
index 33b2911..5d553da 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_5.dart.outline.expect
index 18f6651..6c0b0d6 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.legacy.expect b/pkg/front_end/testcases/inference/future_then_6.dart.legacy.expect
index cc6a439..0cc6848 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_then_6.dart.legacy.transformed.expect
index 9ad93e8..6d284e6 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_6.dart.outline.expect
index 18f6651..6c0b0d6 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.legacy.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.legacy.expect
index 579d81d..d16fb57 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.legacy.transformed.expect
index 1ae82f7..37a9eaf 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.outline.expect
index 18f6651..6c0b0d6 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.legacy.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.legacy.expect
index 3fbb4f7..b5e3e79 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.legacy.transformed.expect
index 9b1db02..e3526c6 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.outline.expect
index 18f6651..6c0b0d6 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.legacy.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.legacy.expect
index a38c5ae..dc6b8a1 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.legacy.transformed.expect
index 364a78a..8031722 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.outline.expect
index 18f6651..6c0b0d6 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.legacy.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.legacy.expect
index 189b93e..ac112f8 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.legacy.transformed.expect
index 4a5e294..0ebe142 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.outline.expect
index 18f6651..6c0b0d6 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.legacy.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.legacy.expect
index 8b21e2e..f359eff 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.legacy.transformed.expect
index e5e7c73..d73e7d4 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.outline.expect
index 18f6651..6c0b0d6 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.legacy.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.legacy.expect
index d4392fe..6231476 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.legacy.transformed.expect
index fecb72e..b10c087 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.outline.expect
index 18f6651..6c0b0d6 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.legacy.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.legacy.expect
index 985e5ba..211f9f3 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.legacy.transformed.expect
index f3c12bb..a55a43b 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.outline.expect
index 18f6651..6c0b0d6 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.legacy.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.legacy.expect
index c454264..c131aa9 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.legacy.transformed.expect
index c454264..c131aa9 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.outline.expect
index e5a534c..68201b4 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.legacy.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.legacy.expect
index 4c532cc..b418fd7 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.legacy.transformed.expect
index 4c532cc..b418fd7 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.outline.expect
index e5a534c..68201b4 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.legacy.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.legacy.expect
index 86abe95..93fd95b 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.legacy.transformed.expect
index 86abe95..93fd95b 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.outline.expect
index 9162c9b..a644d90 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value(self::MyFuture::T x) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.legacy.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.legacy.expect
index aed7501..f9b1dde 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(dynamic x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.legacy.transformed.expect
index 7697712..24f847d 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(dynamic x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.outline.expect
index e80eb43..3e05a12 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value(dynamic x) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.legacy.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.legacy.expect
index b3989b2..85cc477 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(dynamic x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.legacy.transformed.expect
index 8c463d9..7395c33 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value(dynamic x) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.outline.expect
index e80eb43..3e05a12 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value(dynamic x) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.legacy.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.legacy.expect
index c309ae6..3e9e23f 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.legacy.transformed.expect
index 5fb66a8..86df2a1 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.outline.expect
index 263a94f..6fbd438 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value([dynamic x]) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.legacy.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.legacy.expect
index a89b874..1f70652 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.legacy.transformed.expect
index ec5724d..1afd6d8 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.outline.expect
index 263a94f..6fbd438 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value([dynamic x]) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.legacy.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.legacy.expect
index 9b07131..51e5fde 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.legacy.transformed.expect
index a3884a8..ec3fde4 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.outline.expect
index da18d4d..2d1e70e 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value([dynamic x]) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.legacy.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.legacy.expect
index b27e6d9..ab6a0d3 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.legacy.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.legacy.transformed.expect
index ca29563..7fc5179 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T>
     : super core::Object::•() {}
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.outline.expect
index da18d4d..2d1e70e 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor value([dynamic x]) → self::MyFuture<self::MyFuture::T>
     ;
-  method noSuchMethod(dynamic invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.legacy.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.legacy.expect
index 1f86d32..b9c4222 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.legacy.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → self::C<self::C::T>
     : super self::D::•()
     ;
-  method f<U extends core::Object = dynamic>(dynamic x) → dynamic {}
+  method f<U extends core::Object = dynamic>(self::C::f::U x) → (self::C::f::U) → void {}
 }
 class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → self::D<self::D::T>
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.legacy.transformed.expect
index 1f86d32..b9c4222 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.legacy.transformed.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → self::C<self::C::T>
     : super self::D::•()
     ;
-  method f<U extends core::Object = dynamic>(dynamic x) → dynamic {}
+  method f<U extends core::Object = dynamic>(self::C::f::U x) → (self::C::f::U) → void {}
 }
 class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → self::D<self::D::T>
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.legacy.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.legacy.expect
index 08648c6..c1d63d6 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.legacy.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → self::C<self::C::T>
     : super self::D::•()
     ;
-  method f<U extends core::Object = dynamic>(dynamic g) → dynamic
+  method f<U extends core::Object = dynamic>(() → core::List<self::C::f::U> g) → void
     return null;
 }
 abstract class D<T extends core::Object = dynamic> extends core::Object {
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.legacy.transformed.expect
index 08648c6..c1d63d6 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.legacy.transformed.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → self::C<self::C::T>
     : super self::D::•()
     ;
-  method f<U extends core::Object = dynamic>(dynamic g) → dynamic
+  method f<U extends core::Object = dynamic>(() → core::List<self::C::f::U> g) → void
     return null;
 }
 abstract class D<T extends core::Object = dynamic> extends core::Object {
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.legacy.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.legacy.expect
index 57033a4..c9c76f5 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.legacy.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → self::C<self::C::T>
     : super self::D::•()
     ;
-  method f<U extends core::Object = dynamic>(dynamic x) → dynamic {}
+  method f<U extends core::Object = dynamic>(self::C::f::U x) → () → self::C::f::U {}
 }
 class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → self::D<self::D::T>
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.legacy.transformed.expect
index 57033a4..c9c76f5 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.legacy.transformed.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → self::C<self::C::T>
     : super self::D::•()
     ;
-  method f<U extends core::Object = dynamic>(dynamic x) → dynamic {}
+  method f<U extends core::Object = dynamic>(self::C::f::U x) → () → self::C::f::U {}
 }
 class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → self::D<self::D::T>
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.legacy.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.legacy.expect
index 29528fb..0500661 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.legacy.expect
@@ -13,7 +13,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method m<S extends core::Object = dynamic>(dynamic x) → dynamic
+  method m<S extends core::Object = dynamic>(self::D::m::S x) → self::D::m::S
     return x;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.legacy.transformed.expect
index 29528fb..0500661 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.legacy.transformed.expect
@@ -13,7 +13,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method m<S extends core::Object = dynamic>(dynamic x) → dynamic
+  method m<S extends core::Object = dynamic>(self::D::m::S x) → self::D::m::S
     return x;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.hierarchy.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.hierarchy.expect
new file mode 100644
index 0000000..ad5bb3a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.hierarchy.expect
@@ -0,0 +1,95 @@
+Object:
+  superclasses:
+  interfaces:
+  classMembers:
+    Object._haveSameRuntimeType
+    Object.toString
+    Object.runtimeType
+    Object._toString
+    Object._simpleInstanceOf
+    Object._hashCodeRnd
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._objectHashCode
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+
+A:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    A.f
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    A.h
+    Object.hashCode
+    A.g
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+
+I:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    I.f
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    I.h
+    Object.hashCode
+    I.g
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+
+B:
+  superclasses:
+    Object
+      -> A
+  interfaces: I
+  classMembers:
+    B.f
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    B.h
+    Object.hashCode
+    B.g
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+  interfaceMembers:
+    B.f
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    B.h
+    Object.hashCode
+    B.g
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  interfaceSetters:
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.legacy.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.legacy.expect
new file mode 100644
index 0000000..d8b5742
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.legacy.expect
@@ -0,0 +1,62 @@
+library test;
+//
+// 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.
+// Try adding an explicit type.
+//   f(x, {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.
+// Try adding an explicit type.
+//   f(x, {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.
+// Try adding an explicit type.
+//   f(x, {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.
+// Try adding an explicit type.
+//   h(x, {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.
+// Try adding an explicit type.
+//   g(x, {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.
+// Try adding an explicit type.
+//   g(x, {y}) {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method f(self::A x, {self::A y = null}) → self::A {}
+  method g(self::A x, {self::A y = null}) → self::A {}
+  method h(self::A x, {self::A y = null}) → self::A {}
+}
+class B extends self::A implements self::I {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  method f(invalid-type x, {invalid-type y = null}) → invalid-type {}
+  method g(invalid-type x, {invalid-type y = null}) → self::A {}
+  method h(self::A x, {invalid-type y = null}) → self::A {}
+}
+class I extends core::Object {
+  synthetic constructor •() → self::I
+    : super core::Object::•()
+    ;
+  method f(self::I x, {self::I y = null}) → self::I {}
+  method g(self::I x, {self::I y = null}) → self::A {}
+  method h(self::A x, {self::I y = null}) → self::A {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.legacy.transformed.expect
new file mode 100644
index 0000000..d8b5742
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.legacy.transformed.expect
@@ -0,0 +1,62 @@
+library test;
+//
+// 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.
+// Try adding an explicit type.
+//   f(x, {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.
+// Try adding an explicit type.
+//   f(x, {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.
+// Try adding an explicit type.
+//   f(x, {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.
+// Try adding an explicit type.
+//   h(x, {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.
+// Try adding an explicit type.
+//   g(x, {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.
+// Try adding an explicit type.
+//   g(x, {y}) {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method f(self::A x, {self::A y = null}) → self::A {}
+  method g(self::A x, {self::A y = null}) → self::A {}
+  method h(self::A x, {self::A y = null}) → self::A {}
+}
+class B extends self::A implements self::I {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  method f(invalid-type x, {invalid-type y = null}) → invalid-type {}
+  method g(invalid-type x, {invalid-type y = null}) → self::A {}
+  method h(self::A x, {invalid-type y = null}) → self::A {}
+}
+class I extends core::Object {
+  synthetic constructor •() → self::I
+    : super core::Object::•()
+    ;
+  method f(self::I x, {self::I y = null}) → self::I {}
+  method g(self::I x, {self::I y = null}) → self::A {}
+  method h(self::A x, {self::I y = null}) → self::A {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.outline.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.outline.expect
new file mode 100644
index 0000000..26eafa0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.outline.expect
@@ -0,0 +1,69 @@
+library test;
+//
+// 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.
+// Try adding an explicit type.
+//   f(x, {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.
+// Try adding an explicit type.
+//   f(x, {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.
+// Try adding an explicit type.
+//   f(x, {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.
+// Try adding an explicit type.
+//   h(x, {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.
+// Try adding an explicit type.
+//   g(x, {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.
+// Try adding an explicit type.
+//   g(x, {y}) {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+  method f(self::A x, {self::A y}) → self::A
+    ;
+  method g(self::A x, {self::A y}) → self::A
+    ;
+  method h(self::A x, {self::A y}) → self::A
+    ;
+}
+class B extends self::A implements self::I {
+  synthetic constructor •() → self::B
+    ;
+  method f(invalid-type x, {invalid-type y}) → invalid-type
+    ;
+  method g(invalid-type x, {invalid-type y}) → self::A
+    ;
+  method h(self::A x, {invalid-type y}) → self::A
+    ;
+}
+class I extends core::Object {
+  synthetic constructor •() → self::I
+    ;
+  method f(self::I x, {self::I y}) → self::I
+    ;
+  method g(self::I x, {self::I y}) → self::A
+    ;
+  method h(self::A x, {self::I y}) → self::A
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.expect
new file mode 100644
index 0000000..d8b5742
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.expect
@@ -0,0 +1,62 @@
+library test;
+//
+// 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.
+// Try adding an explicit type.
+//   f(x, {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.
+// Try adding an explicit type.
+//   f(x, {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.
+// Try adding an explicit type.
+//   f(x, {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.
+// Try adding an explicit type.
+//   h(x, {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.
+// Try adding an explicit type.
+//   g(x, {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.
+// Try adding an explicit type.
+//   g(x, {y}) {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method f(self::A x, {self::A y = null}) → self::A {}
+  method g(self::A x, {self::A y = null}) → self::A {}
+  method h(self::A x, {self::A y = null}) → self::A {}
+}
+class B extends self::A implements self::I {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  method f(invalid-type x, {invalid-type y = null}) → invalid-type {}
+  method g(invalid-type x, {invalid-type y = null}) → self::A {}
+  method h(self::A x, {invalid-type y = null}) → self::A {}
+}
+class I extends core::Object {
+  synthetic constructor •() → self::I
+    : super core::Object::•()
+    ;
+  method f(self::I x, {self::I y = null}) → self::I {}
+  method g(self::I x, {self::I y = null}) → self::A {}
+  method h(self::A x, {self::I y = null}) → self::A {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.legacy.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.legacy.expect
index b9f3f55..ba7aef9 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.legacy.expect
@@ -18,6 +18,6 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  operator []=(dynamic index, dynamic value) → dynamic {}
+  operator []=(dynamic index, dynamic value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.legacy.transformed.expect
index b9f3f55..ba7aef9 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.legacy.transformed.expect
@@ -18,6 +18,6 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  operator []=(dynamic index, dynamic value) → dynamic {}
+  operator []=(dynamic index, dynamic value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.outline.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.outline.expect
index 431131a..ef008c4 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.outline.expect
@@ -17,7 +17,7 @@
 class D extends self::C implements self::I {
   synthetic constructor •() → self::D
     ;
-  operator []=(dynamic index, dynamic value) → dynamic
+  operator []=(dynamic index, dynamic value) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.legacy.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.legacy.expect
index 5ffc002..587faf3 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.legacy.expect
@@ -18,6 +18,6 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  operator []=(core::int index, dynamic value) → dynamic {}
+  operator []=(core::int index, dynamic value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.legacy.transformed.expect
index 5ffc002..587faf3 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.legacy.transformed.expect
@@ -18,6 +18,6 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  operator []=(core::int index, dynamic value) → dynamic {}
+  operator []=(core::int index, dynamic value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.outline.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.outline.expect
index e1dc0dc..68f38e5 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.outline.expect
@@ -17,7 +17,7 @@
 class D extends self::C implements self::I {
   synthetic constructor •() → self::D
     ;
-  operator []=(core::int index, dynamic value) → dynamic
+  operator []=(core::int index, dynamic value) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.legacy.expect
index 6657368..4b35f0e 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.legacy.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get x() → dynamic;
+  abstract get x() → core::int;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.legacy.transformed.expect
index 6657368..4b35f0e 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.legacy.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get x() → dynamic;
+  abstract get x() → core::int;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.outline.expect
index 41317cd..b7b8fe3 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field dynamic x;
+  field core::int x;
   synthetic constructor •() → self::A
     ;
 }
 abstract class B extends core::Object implements self::C {
   synthetic constructor •() → self::B
     ;
-  abstract get x() → dynamic;
+  abstract get x() → core::int;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.legacy.expect
index 67fa407..94de153 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.legacy.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract set x(dynamic value) → void;
+  abstract set x(core::int value) → void;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.legacy.transformed.expect
index 67fa407..94de153 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.legacy.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract set x(dynamic value) → void;
+  abstract set x(core::int value) → void;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.outline.expect
index 9de155a..25d6786 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field dynamic x;
+  field core::int x;
   synthetic constructor •() → self::A
     ;
 }
 abstract class B extends core::Object implements self::C {
   synthetic constructor •() → self::B
     ;
-  abstract set x(dynamic value) → void;
+  abstract set x(core::int value) → void;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.legacy.expect
index 34995f9..b67d77f 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.legacy.expect
@@ -1,4 +1,22 @@
 library test;
+//
+// 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.
+// Try adding an explicit type.
+//   var 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.
+// Try adding an explicit type.
+//   var 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.
+// Try adding an explicit type.
+//   var x;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -27,25 +45,25 @@
   abstract get x() → core::double;
 }
 class E extends self::A implements self::B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::E
     : super self::A::•()
     ;
 }
 class F extends self::A implements self::C {
-  field dynamic x = null;
+  field invalid-type x = null;
   synthetic constructor •() → self::F
     : super self::A::•()
     ;
 }
 class G extends self::A implements self::D {
-  field dynamic x = null;
+  field invalid-type x = null;
   synthetic constructor •() → self::G
     : super self::A::•()
     ;
 }
 class H extends self::C implements self::D {
-  field dynamic x = null;
+  field invalid-type x = null;
   synthetic constructor •() → self::H
     : super self::C::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.legacy.transformed.expect
index 34995f9..b67d77f 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.legacy.transformed.expect
@@ -1,4 +1,22 @@
 library test;
+//
+// 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.
+// Try adding an explicit type.
+//   var 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.
+// Try adding an explicit type.
+//   var 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.
+// Try adding an explicit type.
+//   var x;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -27,25 +45,25 @@
   abstract get x() → core::double;
 }
 class E extends self::A implements self::B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::E
     : super self::A::•()
     ;
 }
 class F extends self::A implements self::C {
-  field dynamic x = null;
+  field invalid-type x = null;
   synthetic constructor •() → self::F
     : super self::A::•()
     ;
 }
 class G extends self::A implements self::D {
-  field dynamic x = null;
+  field invalid-type x = null;
   synthetic constructor •() → self::G
     : super self::A::•()
     ;
 }
 class H extends self::C implements self::D {
-  field dynamic x = null;
+  field invalid-type x = null;
   synthetic constructor •() → self::H
     : super self::C::•()
     ;
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 c55fa65..ac7a863 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
@@ -1,4 +1,22 @@
 library test;
+//
+// 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.
+// Try adding an explicit type.
+//   var 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.
+// Try adding an explicit type.
+//   var 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.
+// Try adding an explicit type.
+//   var x;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -23,22 +41,22 @@
   abstract get x() → core::double;
 }
 class E extends self::A implements self::B {
-  field dynamic x;
+  field core::int x;
   synthetic constructor •() → self::E
     ;
 }
 class F extends self::A implements self::C {
-  field dynamic x;
+  field invalid-type x;
   synthetic constructor •() → self::F
     ;
 }
 class G extends self::A implements self::D {
-  field dynamic x;
+  field invalid-type x;
   synthetic constructor •() → self::G
     ;
 }
 class H extends self::C implements self::D {
-  field dynamic x;
+  field invalid-type x;
   synthetic constructor •() → self::H
     ;
 }
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 c24c0bb..b67d77f 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
@@ -17,54 +17,6 @@
 //   var x;
 //       ^
 //
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:7: Error: The return type of the method 'F.x' is 'dynamic', which does not match the return type, 'int', of the overridden method, 'A.x'.
-// Change to a subtype of 'int'.
-//   var x;
-//       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is the overridden method ('x').
-//   int get x;
-//           ^
-//
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:7: Error: The return type of the method 'F.x' is 'dynamic', which does not match the return type, 'num', of the overridden method, 'C.x'.
-// Change to a subtype of 'num'.
-//   var x;
-//       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is the overridden method ('x').
-//   num get x;
-//           ^
-//
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:7: Error: The return type of the method 'G.x' is 'dynamic', which does not match the return type, 'int', of the overridden method, 'A.x'.
-// Change to a subtype of 'int'.
-//   var x;
-//       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is the overridden method ('x').
-//   int get x;
-//           ^
-//
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:7: Error: The return type of the method 'G.x' is 'dynamic', which does not match the return type, 'double', of the overridden method, 'D.x'.
-// Change to a subtype of 'double'.
-//   var x;
-//       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is the overridden method ('x').
-//   double get x;
-//              ^
-//
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:7: Error: The return type of the method 'H.x' is 'dynamic', which does not match the return type, 'num', of the overridden method, 'C.x'.
-// Change to a subtype of 'num'.
-//   var x;
-//       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is the overridden method ('x').
-//   num get x;
-//           ^
-//
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:7: Error: The return type of the method 'H.x' is 'dynamic', which does not match the return type, 'double', of the overridden method, 'D.x'.
-// Change to a subtype of 'double'.
-//   var x;
-//       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is the overridden method ('x').
-//   double get x;
-//              ^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -99,19 +51,19 @@
     ;
 }
 class F extends self::A implements self::C {
-  field dynamic x = null;
+  field invalid-type x = null;
   synthetic constructor •() → self::F
     : super self::A::•()
     ;
 }
 class G extends self::A implements self::D {
-  field dynamic x = null;
+  field invalid-type x = null;
   synthetic constructor •() → self::G
     : super self::A::•()
     ;
 }
 class H extends self::C implements self::D {
-  field dynamic x = null;
+  field invalid-type x = null;
   synthetic constructor •() → self::H
     : super self::C::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.legacy.expect
index 651b972..f9b40cd 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.legacy.expect
@@ -15,7 +15,7 @@
   abstract get x() → core::int;
 }
 class C extends self::B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.legacy.transformed.expect
index 651b972..f9b40cd 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.legacy.transformed.expect
@@ -15,7 +15,7 @@
   abstract get x() → core::int;
 }
 class C extends self::B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.outline.expect
index 07bf8f9..f76fc3b 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.outline.expect
@@ -13,7 +13,7 @@
   abstract get x() → core::int;
 }
 class C extends self::B {
-  field dynamic x;
+  field core::int x;
   synthetic constructor •() → self::C
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.legacy.expect
index 6e31b6d..c395f30 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.legacy.expect
@@ -11,9 +11,9 @@
   abstract set y(generic-covariant-impl core::List<self::A::T> value) → void;
 }
 class B extends self::A<core::int> {
-  field dynamic x = null;
-  field dynamic y = null;
-  field dynamic z = null;
+  field core::List<core::int> x = null;
+  generic-covariant-impl field core::List<core::int> y = null;
+  generic-covariant-impl field core::List<core::int> z = null;
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.legacy.transformed.expect
index 6e31b6d..c395f30 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.legacy.transformed.expect
@@ -11,9 +11,9 @@
   abstract set y(generic-covariant-impl core::List<self::A::T> value) → void;
 }
 class B extends self::A<core::int> {
-  field dynamic x = null;
-  field dynamic y = null;
-  field dynamic z = null;
+  field core::List<core::int> x = null;
+  generic-covariant-impl field core::List<core::int> y = null;
+  generic-covariant-impl field core::List<core::int> z = null;
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.outline.expect
index 2fc6225..711058e 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.outline.expect
@@ -10,9 +10,9 @@
   abstract set y(generic-covariant-impl core::List<self::A::T> value) → void;
 }
 class B extends self::A<core::int> {
-  field dynamic x;
-  field dynamic y;
-  field dynamic z;
+  field core::List<core::int> x;
+  generic-covariant-impl field core::List<core::int> y;
+  generic-covariant-impl field core::List<core::int> z;
   synthetic constructor •() → self::B
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.legacy.expect
index 72b90ee..9f9de47 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.legacy.expect
@@ -16,25 +16,25 @@
     return 0;
 }
 class C extends self::A {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
 class D extends self::B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::D
     : super self::B::•()
     ;
 }
 class E extends core::Object implements self::A {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::E
     : super core::Object::•()
     ;
 }
 class F extends core::Object implements self::B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::F
     : super core::Object::•()
     ;
@@ -45,7 +45,7 @@
     ;
 }
 class G extends self::_G&Object&B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::G
     : super self::_G&Object&B::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.legacy.transformed.expect
index 31c9fee..9f7817b 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.legacy.transformed.expect
@@ -16,25 +16,25 @@
     return 0;
 }
 class C extends self::A {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
 class D extends self::B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::D
     : super self::B::•()
     ;
 }
 class E extends core::Object implements self::A {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::E
     : super core::Object::•()
     ;
 }
 class F extends core::Object implements self::B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::F
     : super core::Object::•()
     ;
@@ -47,7 +47,7 @@
     return 0;
 }
 class G extends self::_G&Object&B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::G
     : super self::_G&Object&B::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.outline.expect
index b627b29..99e2051 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.outline.expect
@@ -14,22 +14,22 @@
     ;
 }
 class C extends self::A {
-  field dynamic x;
+  field core::int x;
   synthetic constructor •() → self::C
     ;
 }
 class D extends self::B {
-  field dynamic x;
+  field core::int x;
   synthetic constructor •() → self::D
     ;
 }
 class E extends core::Object implements self::A {
-  field dynamic x;
+  field core::int x;
   synthetic constructor •() → self::E
     ;
 }
 class F extends core::Object implements self::B {
-  field dynamic x;
+  field core::int x;
   synthetic constructor •() → self::F
     ;
 }
@@ -39,7 +39,7 @@
     ;
 }
 class G extends self::_G&Object&B {
-  field dynamic x;
+  field core::int x;
   synthetic constructor •() → self::G
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.legacy.expect
index 8baaa28..3c16ce0 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.legacy.expect
@@ -15,25 +15,25 @@
   set x(core::int value) → void {}
 }
 class C extends self::A {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
 class D extends self::B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::D
     : super self::B::•()
     ;
 }
 class E extends core::Object implements self::A {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::E
     : super core::Object::•()
     ;
 }
 class F extends core::Object implements self::B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::F
     : super core::Object::•()
     ;
@@ -44,7 +44,7 @@
     ;
 }
 class G extends self::_G&Object&B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::G
     : super self::_G&Object&B::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.legacy.transformed.expect
index 1a36773..e3da27e 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.legacy.transformed.expect
@@ -15,25 +15,25 @@
   set x(core::int value) → void {}
 }
 class C extends self::A {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
 class D extends self::B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::D
     : super self::B::•()
     ;
 }
 class E extends core::Object implements self::A {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::E
     : super core::Object::•()
     ;
 }
 class F extends core::Object implements self::B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::F
     : super core::Object::•()
     ;
@@ -45,7 +45,7 @@
   set x(core::int value) → void {}
 }
 class G extends self::_G&Object&B {
-  field dynamic x = null;
+  field core::int x = null;
   synthetic constructor •() → self::G
     : super self::_G&Object&B::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.outline.expect
index 02e0c2b..0ce880d 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.outline.expect
@@ -14,22 +14,22 @@
     ;
 }
 class C extends self::A {
-  field dynamic x;
+  field core::int x;
   synthetic constructor •() → self::C
     ;
 }
 class D extends self::B {
-  field dynamic x;
+  field core::int x;
   synthetic constructor •() → self::D
     ;
 }
 class E extends core::Object implements self::A {
-  field dynamic x;
+  field core::int x;
   synthetic constructor •() → self::E
     ;
 }
 class F extends core::Object implements self::B {
-  field dynamic x;
+  field core::int x;
   synthetic constructor •() → self::F
     ;
 }
@@ -39,7 +39,7 @@
     ;
 }
 class G extends self::_G&Object&B {
-  field dynamic x;
+  field core::int x;
   synthetic constructor •() → self::G
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.legacy.expect
index 18097da..e03bb9e 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.legacy.expect
@@ -10,7 +10,7 @@
   set x(core::double value) → void {}
 }
 class B extends self::A {
-  final field dynamic x;
+  final field core::int x;
   constructor •(dynamic x) → self::B
     : self::B::x = x, super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.legacy.transformed.expect
index 18097da..e03bb9e 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.legacy.transformed.expect
@@ -10,7 +10,7 @@
   set x(core::double value) → void {}
 }
 class B extends self::A {
-  final field dynamic x;
+  final field core::int x;
   constructor •(dynamic x) → self::B
     : self::B::x = x, super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.outline.expect
index 96dbb50..4709de3 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.outline.expect
@@ -10,7 +10,7 @@
     ;
 }
 class B extends self::A {
-  final field dynamic x;
+  final field core::int x;
   constructor •(dynamic x) → self::B
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.legacy.expect
index 28bd84b..7dea358 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.legacy.expect
@@ -9,7 +9,7 @@
   abstract get x() → core::int;
 }
 class B extends self::A {
-  final field dynamic x;
+  final field core::int x;
   constructor •(dynamic x) → self::B
     : self::B::x = x, super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.legacy.transformed.expect
index 28bd84b..7dea358 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.legacy.transformed.expect
@@ -9,7 +9,7 @@
   abstract get x() → core::int;
 }
 class B extends self::A {
-  final field dynamic x;
+  final field core::int x;
   constructor •(dynamic x) → self::B
     : self::B::x = x, super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.outline.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.outline.expect
index 11b26c0..5e18eaa 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.outline.expect
@@ -8,7 +8,7 @@
   abstract get x() → core::int;
 }
 class B extends self::A {
-  final field dynamic x;
+  final field core::int x;
   constructor •(dynamic x) → self::B
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.legacy.expect
index d9bfe67..148028f 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.legacy.expect
@@ -9,7 +9,7 @@
   set x(core::double value) → void {}
 }
 class B extends self::A {
-  final field dynamic x;
+  final field core::double x;
   constructor •(dynamic x) → self::B
     : self::B::x = x, super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.legacy.transformed.expect
index d9bfe67..148028f 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.legacy.transformed.expect
@@ -9,7 +9,7 @@
   set x(core::double value) → void {}
 }
 class B extends self::A {
-  final field dynamic x;
+  final field core::double x;
   constructor •(dynamic x) → self::B
     : self::B::x = x, super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.outline.expect b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.outline.expect
index b2085f3..b0206ee 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.outline.expect
@@ -9,7 +9,7 @@
     ;
 }
 class B extends self::A {
-  final field dynamic x;
+  final field core::double x;
   constructor •(dynamic x) → self::B
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.legacy.expect
index 3d410db..1bb410b 100644
--- a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.legacy.expect
@@ -12,6 +12,6 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract get x() → dynamic;
+  abstract get x() → core::double;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.legacy.transformed.expect
index 3d410db..1bb410b 100644
--- a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.legacy.transformed.expect
@@ -12,6 +12,6 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract get x() → dynamic;
+  abstract get x() → core::double;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.outline.expect
index 35c511d..83d3f12 100644
--- a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.outline.expect
@@ -10,7 +10,7 @@
 abstract class B extends self::A {
   synthetic constructor •() → self::B
     ;
-  abstract get x() → dynamic;
+  abstract get x() → core::double;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.legacy.expect
index 69eff1f1..62a80b3 100644
--- a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.legacy.expect
@@ -6,14 +6,14 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  get x() → dynamic
+  get x() → core::int
     return self::f();
 }
 abstract class B extends core::Object implements self::C {
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get x() → dynamic;
+  abstract get x() → core::int;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.legacy.transformed.expect
index 69eff1f1..62a80b3 100644
--- a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.legacy.transformed.expect
@@ -6,14 +6,14 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  get x() → dynamic
+  get x() → core::int
     return self::f();
 }
 abstract class B extends core::Object implements self::C {
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get x() → dynamic;
+  abstract get x() → core::int;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.outline.expect
index a346b2f..64fa771 100644
--- a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.outline.expect
@@ -5,13 +5,13 @@
 class A extends core::Object implements self::B {
   synthetic constructor •() → self::A
     ;
-  get x() → dynamic
+  get x() → core::int
     ;
 }
 abstract class B extends core::Object implements self::C {
   synthetic constructor •() → self::B
     ;
-  abstract get x() → dynamic;
+  abstract get x() → core::int;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.legacy.expect
index 5337a40..3c40a1e 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.legacy.expect
@@ -1,14 +1,4 @@
 library test;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/inference/infer_method_missing_params.dart:23:3: Warning: The method 'C.f' has more required arguments than those of overridden method 'B.f'.
-//   f(x, y);
-//   ^
-// pkg/front_end/testcases/inference/infer_method_missing_params.dart:17:7: Context: This is the overridden method ('f').
-//   int f(int x);
-//       ^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -32,8 +22,8 @@
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract method f(dynamic x, dynamic y) → dynamic;
-  abstract method g(dynamic x, [dynamic y = null]) → dynamic;
-  abstract method h(dynamic x, {dynamic y = null}) → dynamic;
+  abstract method f(core::int x, core::int y) → core::int;
+  abstract method g(core::int x, [core::int y = null]) → core::int;
+  abstract method h(core::int x, {core::int y = null}) → core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.legacy.transformed.expect
index 5337a40..3c40a1e 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.legacy.transformed.expect
@@ -1,14 +1,4 @@
 library test;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/inference/infer_method_missing_params.dart:23:3: Warning: The method 'C.f' has more required arguments than those of overridden method 'B.f'.
-//   f(x, y);
-//   ^
-// pkg/front_end/testcases/inference/infer_method_missing_params.dart:17:7: Context: This is the overridden method ('f').
-//   int f(int x);
-//       ^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -32,8 +22,8 @@
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract method f(dynamic x, dynamic y) → dynamic;
-  abstract method g(dynamic x, [dynamic y = null]) → dynamic;
-  abstract method h(dynamic x, {dynamic y = null}) → dynamic;
+  abstract method f(core::int x, core::int y) → core::int;
+  abstract method g(core::int x, [core::int y = null]) → core::int;
+  abstract method h(core::int x, {core::int y = null}) → core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.outline.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.outline.expect
index 0ae3513..332234b 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.outline.expect
@@ -1,14 +1,4 @@
 library test;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/inference/infer_method_missing_params.dart:23:3: Warning: The method 'C.f' has more required arguments than those of overridden method 'B.f'.
-//   f(x, y);
-//   ^
-// pkg/front_end/testcases/inference/infer_method_missing_params.dart:17:7: Context: This is the overridden method ('f').
-//   int f(int x);
-//       ^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -29,9 +19,9 @@
 abstract class C extends core::Object implements self::A, self::B {
   synthetic constructor •() → self::C
     ;
-  abstract method f(dynamic x, dynamic y) → dynamic;
-  abstract method g(dynamic x, [dynamic y]) → dynamic;
-  abstract method h(dynamic x, {dynamic y}) → dynamic;
+  abstract method f(core::int x, core::int y) → core::int;
+  abstract method g(core::int x, [core::int y]) → core::int;
+  abstract method h(core::int x, {core::int y}) → core::int;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.legacy.expect
index b4be5c0..1b88745 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.legacy.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::C
     : super self::D::•()
     ;
-  set foo(dynamic x) → dynamic {}
+  set foo(core::int x) → void {}
 }
 class D extends core::Object {
   field core::int foo = null;
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.legacy.transformed.expect
index b4be5c0..1b88745 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.legacy.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::C
     : super self::D::•()
     ;
-  set foo(dynamic x) → dynamic {}
+  set foo(core::int x) → void {}
 }
 class D extends core::Object {
   field core::int foo = null;
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.legacy.expect
index 6288aaf..688faaf 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.legacy.expect
@@ -6,12 +6,12 @@
   synthetic constructor •() → self::C
     : super self::D::•()
     ;
-  set foo(dynamic x) → dynamic {}
+  set foo(core::int x) → void {}
 }
 class D extends core::Object {
   synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  set foo(core::int x) → dynamic {}
+  set foo(core::int x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.legacy.transformed.expect
index 6288aaf..688faaf 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.legacy.transformed.expect
@@ -6,12 +6,12 @@
   synthetic constructor •() → self::C
     : super self::D::•()
     ;
-  set foo(dynamic x) → dynamic {}
+  set foo(core::int x) → void {}
 }
 class D extends core::Object {
   synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  set foo(core::int x) → dynamic {}
+  set foo(core::int x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.legacy.expect
index 24beb1d..6f68db4 100644
--- a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.legacy.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static set foo(core::int x) → dynamic {}
+  static set foo(core::int x) → void {}
 }
-static set bar(core::int x) → dynamic {}
+static set bar(core::int x) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.legacy.transformed.expect
index 24beb1d..6f68db4 100644
--- a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.legacy.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static set foo(core::int x) → dynamic {}
+  static set foo(core::int x) → void {}
 }
-static set bar(core::int x) → dynamic {}
+static set bar(core::int x) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.outline.expect
index e12c95b..42e1a1a 100644
--- a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.outline.expect
@@ -5,10 +5,10 @@
 class C extends core::Object {
   synthetic constructor •() → self::C
     ;
-  static set foo(core::int x) → dynamic
+  static set foo(core::int x) → void
     ;
 }
-static set bar(core::int x) → dynamic
+static set bar(core::int x) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.legacy.expect
index db7fb96..849953f 100644
--- a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.legacy.expect
@@ -12,6 +12,6 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract set x(dynamic value) → void;
+  abstract set x(core::double value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.legacy.transformed.expect
index db7fb96..849953f 100644
--- a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.legacy.transformed.expect
@@ -12,6 +12,6 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract set x(dynamic value) → void;
+  abstract set x(core::double value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.outline.expect
index e80537c..1d8285f 100644
--- a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.outline.expect
@@ -10,7 +10,7 @@
 abstract class B extends self::A {
   synthetic constructor •() → self::B
     ;
-  abstract set x(dynamic value) → void;
+  abstract set x(core::double value) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.legacy.expect
index 0c5bffd..d58802b 100644
--- a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.legacy.expect
@@ -6,13 +6,13 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  set x(dynamic value) → void {}
+  set x(core::int value) → void {}
 }
 abstract class B extends core::Object implements self::C {
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract set x(dynamic value) → void;
+  abstract set x(core::int value) → void;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
diff --git a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.legacy.transformed.expect
index 0c5bffd..d58802b 100644
--- a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.legacy.transformed.expect
@@ -6,13 +6,13 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  set x(dynamic value) → void {}
+  set x(core::int value) → void {}
 }
 abstract class B extends core::Object implements self::C {
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract set x(dynamic value) → void;
+  abstract set x(core::int value) → void;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
diff --git a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.outline.expect
index 47cd14e..462e7c5 100644
--- a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.outline.expect
@@ -5,13 +5,13 @@
 class A extends core::Object implements self::B {
   synthetic constructor •() → self::A
     ;
-  set x(dynamic value) → void
+  set x(core::int value) → void
     ;
 }
 abstract class B extends core::Object implements self::C {
   synthetic constructor •() → self::B
     ;
-  abstract set x(dynamic value) → void;
+  abstract set x(core::int value) → void;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
diff --git a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.legacy.expect
index a8e04fb..670abbd 100644
--- a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.legacy.expect
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  set x(core::Object o) → dynamic {}
+  set x(core::Object o) → void {}
 }
 static method main() → dynamic {
   new self::B::•().x = "hello";
diff --git a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.legacy.transformed.expect
index a8e04fb..670abbd 100644
--- a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.legacy.transformed.expect
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  set x(core::Object o) → dynamic {}
+  set x(core::Object o) → void {}
 }
 static method main() → dynamic {
   new self::B::•().x = "hello";
diff --git a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.outline.expect b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.outline.expect
index 4afa24f..2f2f40b 100644
--- a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.outline.expect
@@ -11,7 +11,7 @@
 class B extends self::A {
   synthetic constructor •() → self::B
     ;
-  set x(core::Object o) → dynamic
+  set x(core::Object o) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.legacy.expect
index 26d089c..2f5e471 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.legacy.expect
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  get x() → dynamic
+  get x() → core::int
     return 3;
 }
 static method foo() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.legacy.transformed.expect
index 26d089c..2f5e471 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.legacy.transformed.expect
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  get x() → dynamic
+  get x() → core::int
     return 3;
 }
 static method foo() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.legacy.expect
index 1159f05..922bf72 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.legacy.expect
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → dynamic
+  get x() → core::int
     return 3;
 }
 static method foo() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.legacy.transformed.expect
index 1159f05..922bf72 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.legacy.transformed.expect
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → dynamic
+  get x() → core::int
     return 3;
 }
 static method foo() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.legacy.expect
index 707d09d..601e9bb 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.legacy.expect
@@ -9,7 +9,7 @@
   synthetic constructor •() → self::C
     : super inf::B::•()
     ;
-  get x() → dynamic
+  get x() → core::int
     return null;
 }
 class A extends core::Object {
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.legacy.transformed.expect
index 707d09d..601e9bb 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.legacy.transformed.expect
@@ -9,7 +9,7 @@
   synthetic constructor •() → self::C
     : super inf::B::•()
     ;
-  get x() → dynamic
+  get x() → core::int
     return null;
 }
 class A extends core::Object {
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.legacy.expect
index f32c8d5..0b1b2b0 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.legacy.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → test::C
     : super self::B::•()
     ;
-  get x() → dynamic
+  get x() → core::int
     return null;
 }
 class A extends core::Object {
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.legacy.transformed.expect
index f32c8d5..0b1b2b0 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.legacy.transformed.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → test::C
     : super self::B::•()
     ;
-  get x() → dynamic
+  get x() → core::int
     return null;
 }
 class A extends core::Object {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.legacy.expect
index 927f51d..0360763 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.legacy.expect
@@ -13,9 +13,9 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → dynamic
+  get x() → core::int
     return 3;
-  get w() → dynamic
+  get w() → core::int
     return "hello";
 }
 static method foo() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.legacy.transformed.expect
index 927f51d..0360763 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.legacy.transformed.expect
@@ -13,9 +13,9 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → dynamic
+  get x() → core::int
     return 3;
-  get w() → dynamic
+  get w() → core::int
     return "hello";
 }
 static method foo() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.legacy.expect
index 3c624e6..4f44d59 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.legacy.expect
@@ -13,7 +13,7 @@
   synthetic constructor •() → self::B<self::B::E>
     : super self::A::•()
     ;
-  get x() → dynamic
+  get x() → self::B::E
     return this.{self::B::y};
 }
 static method foo() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.legacy.transformed.expect
index 3c624e6..4f44d59 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.legacy.transformed.expect
@@ -13,7 +13,7 @@
   synthetic constructor •() → self::B<self::B::E>
     : super self::A::•()
     ;
-  get x() → dynamic
+  get x() → self::B::E
     return this.{self::B::y};
 }
 static method foo() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.legacy.expect
index 23fb83d..2a0386f 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.legacy.expect
@@ -26,7 +26,7 @@
     ;
   get y() → core::int
     return 0;
-  method m(dynamic a, (dynamic, self::B::E) → dynamic f) → dynamic {}
+  method m(dynamic a, (dynamic, self::B::E) → dynamic f) → core::String {}
 }
 static method foo() → dynamic {
   core::int y = new self::B::•<dynamic>().m(null, null);
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.legacy.transformed.expect
index 23fb83d..2a0386f 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.legacy.transformed.expect
@@ -26,7 +26,7 @@
     ;
   get y() → core::int
     return 0;
-  method m(dynamic a, (dynamic, self::B::E) → dynamic f) → dynamic {}
+  method m(dynamic a, (dynamic, self::B::E) → dynamic f) → core::String {}
 }
 static method foo() → dynamic {
   core::int y = new self::B::•<dynamic>().m(null, null);
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.legacy.expect
index ecee2c6..be1a80f 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.legacy.expect
@@ -23,7 +23,7 @@
     ;
   get y() → core::int
     return 0;
-  method m(dynamic a, (dynamic, core::int) → dynamic f) → dynamic {}
+  method m(dynamic a, (dynamic, core::int) → dynamic f) → self::A<self::B::E> {}
 }
 static method foo() → dynamic {
   core::int y = new self::B::•<core::String>().m(null, null).value;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.legacy.transformed.expect
index ecee2c6..be1a80f 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.legacy.transformed.expect
@@ -23,7 +23,7 @@
     ;
   get y() → core::int
     return 0;
-  method m(dynamic a, (dynamic, core::int) → dynamic f) → dynamic {}
+  method m(dynamic a, (dynamic, core::int) → dynamic f) → self::A<self::B::E> {}
 }
 static method foo() → dynamic {
   core::int y = new self::B::•<core::String>().m(null, null).value;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.legacy.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.legacy.expect
index 54ed9fa..c669cd7 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.legacy.expect
@@ -38,7 +38,7 @@
     ;
   get y() → core::int
     return 0;
-  method m(dynamic a, (dynamic, core::int) → dynamic f) → dynamic {}
+  method m(dynamic a, (dynamic, core::int) → dynamic f) → test::A<test::B::E> {}
 }
 static method foo() → dynamic {
   core::int y = new test::B::•<core::String>().m(null, null).value;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.legacy.transformed.expect
index 54ed9fa..c669cd7 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.legacy.transformed.expect
@@ -38,7 +38,7 @@
     ;
   get y() → core::int
     return 0;
-  method m(dynamic a, (dynamic, core::int) → dynamic f) → dynamic {}
+  method m(dynamic a, (dynamic, core::int) → dynamic f) → test::A<test::B::E> {}
 }
 static method foo() → dynamic {
   core::int y = new test::B::•<core::String>().m(null, null).value;
diff --git a/pkg/front_end/testcases/inference/setter_return_type.dart.legacy.expect b/pkg/front_end/testcases/inference/setter_return_type.dart.legacy.expect
index e0cd00f..7e9ace6 100644
--- a/pkg/front_end/testcases/inference/setter_return_type.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/setter_return_type.dart.legacy.expect
@@ -18,6 +18,6 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(dynamic value) → dynamic {}
+  set x(core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/setter_return_type.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/setter_return_type.dart.legacy.transformed.expect
index e0cd00f..7e9ace6 100644
--- a/pkg/front_end/testcases/inference/setter_return_type.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/setter_return_type.dart.legacy.transformed.expect
@@ -18,6 +18,6 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(dynamic value) → dynamic {}
+  set x(core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/setter_return_type.dart.outline.expect b/pkg/front_end/testcases/inference/setter_return_type.dart.outline.expect
index 5052808..1ae8232 100644
--- a/pkg/front_end/testcases/inference/setter_return_type.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/setter_return_type.dart.outline.expect
@@ -17,7 +17,7 @@
 class D extends self::C implements self::I {
   synthetic constructor •() → self::D
     ;
-  set x(dynamic value) → dynamic
+  set x(core::int value) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.legacy.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.legacy.expect
index b1c6c5f..8793d9b 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.legacy.expect
@@ -15,7 +15,7 @@
   synthetic constructor •() → self::C<self::C::U>
     : super self::B::•()
     ;
-  operator []=(core::Object x, core::Object y) → void {}
+  operator []=(generic-covariant-impl core::Object x, generic-covariant-impl core::Object y) → void {}
   method h() → void {
     super.{self::B::[]=}(self::f<dynamic>(), self::f<dynamic>());
   }
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.legacy.transformed.expect
index b1c6c5f..8793d9b 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.legacy.transformed.expect
@@ -15,7 +15,7 @@
   synthetic constructor •() → self::C<self::C::U>
     : super self::B::•()
     ;
-  operator []=(core::Object x, core::Object y) → void {}
+  operator []=(generic-covariant-impl core::Object x, generic-covariant-impl core::Object y) → void {}
   method h() → void {
     super.{self::B::[]=}(self::f<dynamic>(), self::f<dynamic>());
   }
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.outline.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.outline.expect
index 80fd653..adfd796 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.outline.expect
@@ -14,7 +14,7 @@
 class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → self::C<self::C::U>
     ;
-  operator []=(core::Object x, core::Object y) → void
+  operator []=(generic-covariant-impl core::Object x, generic-covariant-impl core::Object y) → void
     ;
   method h() → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.legacy.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.legacy.expect
index 20df3bc..219fa54 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.legacy.expect
@@ -26,7 +26,7 @@
   synthetic constructor •() → self::C<self::C::U>
     : super self::B::•()
     ;
-  method g(core::Object x) → self::E<asy::Future<self::C::U>>
+  method g(generic-covariant-impl core::Object x) → self::E<asy::Future<self::C::U>>
     return null;
   method h() → void {
     dynamic x = super.{self::B::g}(self::f<dynamic>());
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.legacy.transformed.expect
index 20df3bc..219fa54 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.legacy.transformed.expect
@@ -26,7 +26,7 @@
   synthetic constructor •() → self::C<self::C::U>
     : super self::B::•()
     ;
-  method g(core::Object x) → self::E<asy::Future<self::C::U>>
+  method g(generic-covariant-impl core::Object x) → self::E<asy::Future<self::C::U>>
     return null;
   method h() → void {
     dynamic x = super.{self::B::g}(self::f<dynamic>());
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.outline.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.outline.expect
index f2b99a5..07019f3 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.outline.expect
@@ -22,7 +22,7 @@
 class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → self::C<self::C::U>
     ;
-  method g(core::Object x) → self::E<asy::Future<self::C::U>>
+  method g(generic-covariant-impl core::Object x) → self::E<asy::Future<self::C::U>>
     ;
   method h() → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.legacy.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.legacy.expect
index fd035f1..87b866d 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.legacy.expect
@@ -27,7 +27,7 @@
     ;
   get x() → self::E<asy::Future<self::C::U>>
     return null;
-  set x(core::Object x) → void {}
+  set x(generic-covariant-impl core::Object x) → void {}
   method g() → void {
     dynamic y = super.{self::B::x};
   }
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.legacy.transformed.expect
index fd035f1..87b866d 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.legacy.transformed.expect
@@ -27,7 +27,7 @@
     ;
   get x() → self::E<asy::Future<self::C::U>>
     return null;
-  set x(core::Object x) → void {}
+  set x(generic-covariant-impl core::Object x) → void {}
   method g() → void {
     dynamic y = super.{self::B::x};
   }
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.outline.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.outline.expect
index caa88dc..941b8de 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.outline.expect
@@ -23,7 +23,7 @@
     ;
   get x() → self::E<asy::Future<self::C::U>>
     ;
-  set x(core::Object x) → void
+  set x(generic-covariant-impl core::Object x) → void
     ;
   method g() → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.legacy.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.legacy.expect
index ae129dc..fec3618 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.legacy.expect
@@ -27,7 +27,7 @@
     ;
   get x() → self::E<asy::Future<self::C::U>>
     return null;
-  set x(core::Object x) → void {}
+  set x(generic-covariant-impl core::Object x) → void {}
   method g() → void {
     super.{self::B::x} = self::f<dynamic>();
   }
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.legacy.transformed.expect
index ae129dc..fec3618 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.legacy.transformed.expect
@@ -27,7 +27,7 @@
     ;
   get x() → self::E<asy::Future<self::C::U>>
     return null;
-  set x(core::Object x) → void {}
+  set x(generic-covariant-impl core::Object x) → void {}
   method g() → void {
     super.{self::B::x} = self::f<dynamic>();
   }
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.outline.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.outline.expect
index 1fa178c..cf71077 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.outline.expect
@@ -23,7 +23,7 @@
     ;
   get x() → self::E<asy::Future<self::C::U>>
     ;
-  set x(core::Object x) → void
+  set x(generic-covariant-impl core::Object x) → void
     ;
   method g() → void
     ;
diff --git a/pkg/front_end/testcases/inference/try_catch_promotion.dart.hierarchy.expect b/pkg/front_end/testcases/inference/try_catch_promotion.dart.hierarchy.expect
index 148400f..3a8a7d9 100644
--- a/pkg/front_end/testcases/inference/try_catch_promotion.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/try_catch_promotion.dart.hierarchy.expect
@@ -58,7 +58,7 @@
     Object
   interfaces:
   classMembers:
-    Object.toString
+    StackTrace.Object.toString%StackTrace.toString
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
@@ -77,7 +77,7 @@
       -> StackTrace
   interfaces:
   classMembers:
-    Object.toString
+    StackTrace.Object.toString%StackTrace.toString
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect
index 1681eb9..2e9f7aa 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect
@@ -2,14 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:20:5: Error: Can't infer the type of 'c': circularity found during type inference.
-// Specify the type explicitly.
-// var c = /*@returnType=invalid-type*/ () =>
-//     ^
-//
 // pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:18:5: Error: Can't infer the type of 'b': circularity found during type inference.
 // Specify the type explicitly.
-// var b = /*@returnType=invalid-type*/ () =>
+// var b = /*@returnType=() -> invalid-type*/ () =>
 //     ^
 //
 import self as self;
@@ -25,8 +20,8 @@
     return 0;
 }
 static field self::A a = new self::A::•();
-static field invalid-type b = (() → invalid-type => self::a.{self::A::f}<invalid-type>(self::c)) as{TypeError} invalid-type;
-static field invalid-type c = (() → invalid-type => self::a.{self::A::f}<invalid-type>(self::b)) as{TypeError} invalid-type;
+static field invalid-type b = (() → () → invalid-type => self::a.{self::A::f}<() → invalid-type>(self::c)) as{TypeError} invalid-type;
+static field () → invalid-type c = () → invalid-type => self::a.{self::A::f}<invalid-type>(self::b);
 static field () → () → core::int d = () → () → core::int => self::a.{self::A::f}<() → core::int>(self::e);
 static field () → core::int e = () → core::int => self::a.{self::A::g}(self::d);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.transformed.expect
index 1681eb9..2e9f7aa 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.transformed.expect
@@ -2,14 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:20:5: Error: Can't infer the type of 'c': circularity found during type inference.
-// Specify the type explicitly.
-// var c = /*@returnType=invalid-type*/ () =>
-//     ^
-//
 // pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:18:5: Error: Can't infer the type of 'b': circularity found during type inference.
 // Specify the type explicitly.
-// var b = /*@returnType=invalid-type*/ () =>
+// var b = /*@returnType=() -> invalid-type*/ () =>
 //     ^
 //
 import self as self;
@@ -25,8 +20,8 @@
     return 0;
 }
 static field self::A a = new self::A::•();
-static field invalid-type b = (() → invalid-type => self::a.{self::A::f}<invalid-type>(self::c)) as{TypeError} invalid-type;
-static field invalid-type c = (() → invalid-type => self::a.{self::A::f}<invalid-type>(self::b)) as{TypeError} invalid-type;
+static field invalid-type b = (() → () → invalid-type => self::a.{self::A::f}<() → invalid-type>(self::c)) as{TypeError} invalid-type;
+static field () → invalid-type c = () → invalid-type => self::a.{self::A::f}<invalid-type>(self::b);
 static field () → () → core::int d = () → () → core::int => self::a.{self::A::f}<() → core::int>(self::e);
 static field () → core::int e = () → core::int => self::a.{self::A::g}(self::d);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect
index f2657ee..88b2f85 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect
@@ -2,11 +2,6 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:16:5: Error: Can't infer the type of 'b': circularity found during type inference.
-// Specify the type explicitly.
-// var b = a();
-//     ^
-//
 // pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:15:5: Error: Can't infer the type of 'a': circularity found during type inference.
 // Specify the type explicitly.
 // var a = /*@returnType=num*/ () => intValue /*@target=num::+*/ + b;
@@ -19,7 +14,7 @@
 static field core::num numValue = 0;
 static field core::double doubleValue = 0.0;
 static field invalid-type a = (() → core::num => self::intValue.{core::num::+}(self::b as{TypeError} core::num)) as{TypeError} invalid-type;
-static field invalid-type b = self::a.call() as{TypeError} invalid-type;
+static field dynamic b = self::a.call();
 static field () → core::num c = () → core::num => self::numValue.{core::num::+}(self::d);
 static field core::num d = self::c.call();
 static field () → core::double e = () → core::double => self::doubleValue.{core::double::+}(self::f);
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect
index e436c4f..4f2a4c9 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect
@@ -7,11 +7,6 @@
 //   var x = /*@returnType=invalid-type*/ () => new B(). /*@target=B::x*/ x;
 //       ^
 //
-// pkg/front_end/testcases/inference_new/field_inference_circularity.dart:17:7: Error: Can't infer the type of 'x': circularity found during type inference.
-// Specify the type explicitly.
-//   var x;
-//       ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.transformed.expect
index e436c4f..4f2a4c9 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.transformed.expect
@@ -7,11 +7,6 @@
 //   var x = /*@returnType=invalid-type*/ () => new B(). /*@target=B::x*/ x;
 //       ^
 //
-// pkg/front_end/testcases/inference_new/field_inference_circularity.dart:17:7: Error: Can't infer the type of 'x': circularity found during type inference.
-// Specify the type explicitly.
-//   var x;
-//       ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.hierarchy.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.hierarchy.expect
index 7848afa..cf2893f 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.hierarchy.expect
@@ -56,3 +56,460 @@
     Object.==
   classSetters:
     B.x
+
+Comparable:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Comparable.compareTo
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+    Comparable.compare
+  classSetters:
+
+num:
+  Longest path to Object: 2
+  superclasses:
+    Object
+  interfaces: Comparable<num>
+  classMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  classSetters:
+  interfaceMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  interfaceSetters:
+
+double:
+  Longest path to Object: 3
+  superclasses:
+    Object
+      -> num
+  interfaces: Comparable<num>
+  classMembers:
+    double.~/
+    double.minPositive
+    num.<=
+    num._equalToInteger
+    double.maxFinite
+    num.isInfinite
+    num.<
+    double._tryParseDouble
+    double.Object.toString%double.toString
+    double.+
+    double.negativeInfinity
+    num.clamp
+    num.toDouble
+    double._nativeParse
+    double.ceil
+    double.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    double./
+    double.abs
+    double.nan
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    double.remainder
+    double.infinity
+    num.isFinite
+    num.toInt
+    double.%
+    double.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    double.floorToDouble
+    Object._identityHashCode
+    num.>
+    double.roundToDouble
+    double.round
+    double.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    double.truncate
+    double.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    double.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    double.truncateToDouble
+    double.parse
+    double.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    double._parse
+    double.*
+  classSetters:
+  interfaceMembers:
+    double.~/
+    double.minPositive
+    num.<=
+    num._equalToInteger
+    double.maxFinite
+    num.isInfinite
+    num.<
+    double._tryParseDouble
+    double.Object.toString%double.toString
+    double.+
+    double.negativeInfinity
+    num.clamp
+    num.toDouble
+    double._nativeParse
+    double.ceil
+    double.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    double./
+    double.abs
+    double.nan
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    double.remainder
+    double.infinity
+    num.isFinite
+    num.toInt
+    double.%
+    double.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    double.floorToDouble
+    Object._identityHashCode
+    num.>
+    double.roundToDouble
+    double.round
+    double.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    double.truncate
+    double.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    double.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    double.truncateToDouble
+    double.parse
+    double.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    double._parse
+    double.*
+  interfaceSetters:
+
+int:
+  Longest path to Object: 3
+  superclasses:
+    Object
+      -> num
+  interfaces: Comparable<num>
+  classMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  classSetters:
+  interfaceMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  interfaceSetters:
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.legacy.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.legacy.expect
index 30f357c..86fb4dd 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.legacy.expect
@@ -1,4 +1,12 @@
 library test;
+//
+// 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.
+// Try adding an explicit type.
+//   var x;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -10,7 +18,7 @@
   abstract set x(core::double value) → void;
 }
 class B extends self::A {
-  field dynamic x = null;
+  field invalid-type x = null;
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.legacy.transformed.expect
index 30f357c..86fb4dd 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.legacy.transformed.expect
@@ -1,4 +1,12 @@
 library test;
+//
+// 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.
+// Try adding an explicit type.
+//   var x;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -10,7 +18,7 @@
   abstract set x(core::double value) → void;
 }
 class B extends self::A {
-  field dynamic x = null;
+  field invalid-type x = null;
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
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 5006f0f..faa675a 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
@@ -1,4 +1,12 @@
 library test;
+//
+// 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.
+// Try adding an explicit type.
+//   var x;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -9,7 +17,7 @@
   abstract set x(core::double value) → void;
 }
 class B extends self::A {
-  field dynamic x;
+  field invalid-type x;
   synthetic constructor •() → self::B
     ;
 }
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 9a78098..86fb4dd 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,13 +2,10 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:16:7: Error: The return type of the method 'B.x' is 'int', which does not match the return type, 'double', of the overridden method, 'A.x'.
-// Change to a subtype of 'double'.
+// 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.
+// Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:10:12: Context: This is the overridden method ('x').
-//   void set x(double value);
-//            ^
 //
 import self as self;
 import "dart:core" as core;
@@ -21,7 +18,7 @@
   abstract set x(core::double value) → void;
 }
 class B extends self::A {
-  field core::int x = null;
+  field invalid-type x = null;
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.hierarchy.expect b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.hierarchy.expect
new file mode 100644
index 0000000..b7417eb
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.hierarchy.expect
@@ -0,0 +1,85 @@
+Object:
+  superclasses:
+  interfaces:
+  classMembers:
+    Object._haveSameRuntimeType
+    Object.toString
+    Object.runtimeType
+    Object._toString
+    Object._simpleInstanceOf
+    Object._hashCodeRnd
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._objectHashCode
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+
+A:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    A.y
+    Object.toString
+    A.x
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+    A.y
+    A.x
+
+B:
+  superclasses:
+    Object
+      -> A
+  interfaces:
+  classMembers:
+    A.y
+    Object.toString
+    A.x
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+    A.y
+    A.x
+
+C:
+  superclasses:
+    Object
+      -> A
+        -> B
+  interfaces:
+  classMembers:
+    C.y
+    Object.toString
+    C.x
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+    C.y
+    C.x
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.legacy.expect b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.legacy.expect
new file mode 100644
index 0000000..0517fd9
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.legacy.expect
@@ -0,0 +1,34 @@
+library;
+//
+// Problems in library:
+//
+// 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.
+// Try adding an explicit type.
+//   var y;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  abstract get x() → self::A;
+  abstract set x(self::B value) → void;
+  abstract get y() → self::B;
+  abstract set y(self::A value) → void;
+}
+abstract class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  field self::A x = null;
+  field invalid-type y = null;
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.legacy.transformed.expect
new file mode 100644
index 0000000..0517fd9
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.legacy.transformed.expect
@@ -0,0 +1,34 @@
+library;
+//
+// Problems in library:
+//
+// 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.
+// Try adding an explicit type.
+//   var y;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  abstract get x() → self::A;
+  abstract set x(self::B value) → void;
+  abstract get y() → self::B;
+  abstract set y(self::A value) → void;
+}
+abstract class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  field self::A x = null;
+  field invalid-type y = null;
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static method main() → dynamic {}
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
new file mode 100644
index 0000000..b6f7118
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.outline.expect
@@ -0,0 +1,32 @@
+library;
+//
+// Problems in library:
+//
+// 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.
+// Try adding an explicit type.
+//   var y;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+  abstract get x() → self::A;
+  abstract set x(self::B value) → void;
+  abstract get y() → self::B;
+  abstract set y(self::A value) → void;
+}
+abstract class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+}
+class C extends self::B {
+  field self::A x;
+  field invalid-type y;
+  synthetic constructor •() → self::C
+    ;
+}
+static method main() → dynamic
+  ;
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
new file mode 100644
index 0000000..0517fd9
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.strong.expect
@@ -0,0 +1,34 @@
+library;
+//
+// Problems in library:
+//
+// 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.
+// Try adding an explicit type.
+//   var y;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  abstract get x() → self::A;
+  abstract set x(self::B value) → void;
+  abstract get y() → self::B;
+  abstract set y(self::A value) → void;
+}
+abstract class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  field self::A x = null;
+  field invalid-type y = null;
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.hierarchy.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.hierarchy.expect
index 167e1f9..b0e92da 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.hierarchy.expect
@@ -76,3 +76,327 @@
     Object.==
   classSetters:
     C.x
+
+Comparable:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Comparable.compareTo
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+    Comparable.compare
+  classSetters:
+
+num:
+  Longest path to Object: 2
+  superclasses:
+    Object
+  interfaces: Comparable<num>
+  classMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  classSetters:
+  interfaceMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  interfaceSetters:
+
+int:
+  Longest path to Object: 3
+  superclasses:
+    Object
+      -> num
+  interfaces: Comparable<num>
+  classMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  classSetters:
+  interfaceMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  interfaceSetters:
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.legacy.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.legacy.expect
index d397440..d21c794 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.legacy.expect
@@ -1,4 +1,12 @@
 library test;
+//
+// 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.
+// Try adding an explicit type.
+//   var x;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -15,7 +23,7 @@
   abstract get x() → core::int;
 }
 class C extends self::B {
-  field dynamic x = null;
+  field invalid-type x = null;
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.legacy.transformed.expect
index d397440..d21c794 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.legacy.transformed.expect
@@ -1,4 +1,12 @@
 library test;
+//
+// 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.
+// Try adding an explicit type.
+//   var x;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -15,7 +23,7 @@
   abstract get x() → core::int;
 }
 class C extends self::B {
-  field dynamic x = null;
+  field invalid-type x = null;
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
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 c425d73..42cca77 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
@@ -1,4 +1,12 @@
 library test;
+//
+// 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.
+// Try adding an explicit type.
+//   var x;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -13,7 +21,7 @@
   abstract get x() → core::int;
 }
 class C extends self::B {
-  field dynamic x;
+  field invalid-type x;
   synthetic constructor •() → self::C
     ;
 }
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 83026ec..d21c794 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,13 +2,10 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:19:7: Error: The return type of the method 'C.x' is 'int', which does not match the return type, 'num', of the overridden method, 'A.x'.
-// Change to a subtype of 'num'.
+// 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.
+// Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:9:12: Context: This is the overridden method ('x').
-//   void set x(num value);
-//            ^
 //
 import self as self;
 import "dart:core" as core;
@@ -26,7 +23,7 @@
   abstract get x() → core::int;
 }
 class C extends self::B {
-  field core::int x = null;
+  field invalid-type x = null;
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.hierarchy.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.hierarchy.expect
index 3dbfb21..6c951d9 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.hierarchy.expect
@@ -76,3 +76,327 @@
     Object.==
   classSetters:
     C.x
+
+Comparable:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Comparable.compareTo
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+    Comparable.compare
+  classSetters:
+
+num:
+  Longest path to Object: 2
+  superclasses:
+    Object
+  interfaces: Comparable<num>
+  classMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  classSetters:
+  interfaceMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  interfaceSetters:
+
+int:
+  Longest path to Object: 3
+  superclasses:
+    Object
+      -> num
+  interfaces: Comparable<num>
+  classMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  classSetters:
+  interfaceMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  interfaceSetters:
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.legacy.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.legacy.expect
index 24c6ed9..eec7015 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.legacy.expect
@@ -15,7 +15,7 @@
   abstract set x(core::int value) → void;
 }
 class C extends self::B {
-  field dynamic x = null;
+  field core::num x = null;
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.legacy.transformed.expect
index 24c6ed9..eec7015 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.legacy.transformed.expect
@@ -15,7 +15,7 @@
   abstract set x(core::int value) → void;
 }
 class C extends self::B {
-  field dynamic x = null;
+  field core::num x = null;
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
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 2d2fda0..ef2b978 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
@@ -13,7 +13,7 @@
   abstract set x(core::int value) → void;
 }
 class C extends self::B {
-  field dynamic x;
+  field core::num x;
   synthetic constructor •() → self::C
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect
index 46baf2b..73a2dd9 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect
@@ -4,25 +4,20 @@
 //
 // pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:11:7: Error: Can't infer the type of 'b': circularity found during type inference.
 // Specify the type explicitly.
-//   var b = /*@returnType=invalid-type*/ () => x;
+//   var b = /*@returnType=() -> invalid-type*/ () => x;
 //       ^
 //
-// pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:16:5: Error: Can't infer the type of 'x': circularity found during type inference.
-// Specify the type explicitly.
-// var x = /*@returnType=invalid-type*/ () => a. /*@target=A::b*/ b;
-//     ^
-//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field invalid-type b = (() → invalid-type => self::x) as{TypeError} invalid-type;
-  field () → invalid-type c = () → invalid-type => self::x;
+  field invalid-type b = (() → () → invalid-type => self::x) as{TypeError} invalid-type;
+  field () → () → invalid-type c = () → () → invalid-type => self::x;
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
 }
 static field self::A a = new self::A::•();
-static field invalid-type x = (() → invalid-type => self::a.{self::A::b}) as{TypeError} invalid-type;
-static field () → () → invalid-type y = () → () → invalid-type => self::a.{self::A::c};
+static field () → invalid-type x = () → invalid-type => self::a.{self::A::b};
+static field () → () → () → invalid-type y = () → () → () → invalid-type => self::a.{self::A::c};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.transformed.expect
index 46baf2b..73a2dd9 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.transformed.expect
@@ -4,25 +4,20 @@
 //
 // pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:11:7: Error: Can't infer the type of 'b': circularity found during type inference.
 // Specify the type explicitly.
-//   var b = /*@returnType=invalid-type*/ () => x;
+//   var b = /*@returnType=() -> invalid-type*/ () => x;
 //       ^
 //
-// pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:16:5: Error: Can't infer the type of 'x': circularity found during type inference.
-// Specify the type explicitly.
-// var x = /*@returnType=invalid-type*/ () => a. /*@target=A::b*/ b;
-//     ^
-//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field invalid-type b = (() → invalid-type => self::x) as{TypeError} invalid-type;
-  field () → invalid-type c = () → invalid-type => self::x;
+  field invalid-type b = (() → () → invalid-type => self::x) as{TypeError} invalid-type;
+  field () → () → invalid-type c = () → () → invalid-type => self::x;
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
 }
 static field self::A a = new self::A::•();
-static field invalid-type x = (() → invalid-type => self::a.{self::A::b}) as{TypeError} invalid-type;
-static field () → () → invalid-type y = () → () → invalid-type => self::a.{self::A::c};
+static field () → invalid-type x = () → invalid-type => self::a.{self::A::b};
+static field () → () → () → invalid-type y = () → () → () → invalid-type => self::a.{self::A::c};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.legacy.expect b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.legacy.expect
index f8f9e8f..3493bd8 100644
--- a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.legacy.expect
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  method f() → dynamic {}
+  method f() → void {}
 }
 static field dynamic x = new self::C::•().f();
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.legacy.transformed.expect
index f8f9e8f..3493bd8 100644
--- a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.legacy.transformed.expect
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  method f() → dynamic {}
+  method f() → void {}
 }
 static field dynamic x = new self::C::•().f();
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.outline.expect
index ac467ff..fbaac00 100644
--- a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.outline.expect
@@ -11,7 +11,7 @@
 class C extends self::B {
   synthetic constructor •() → self::C
     ;
-  method f() → dynamic
+  method f() → void
     ;
 }
 static field dynamic x;
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.hierarchy.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.hierarchy.expect
index f92d773..5a9daa5 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.hierarchy.expect
@@ -72,7 +72,7 @@
     Object.==
   classSetters:
   interfaceMembers:
-    I1.f
+    C.I1.f%I2.f
     Object.toString
     Object.runtimeType
     Object._simpleInstanceOf
@@ -136,7 +136,7 @@
     Object.==
   classSetters:
   interfaceMembers:
-    I2.f
+    E.I2.f%I1.f
     Object.toString
     Object.runtimeType
     Object._simpleInstanceOf
@@ -181,3 +181,327 @@
     Object._simpleInstanceOfTrue
     Object.==
   interfaceSetters:
+
+Comparable:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Comparable.compareTo
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+    Comparable.compare
+  classSetters:
+
+num:
+  Longest path to Object: 2
+  superclasses:
+    Object
+  interfaces: Comparable<num>
+  classMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  classSetters:
+  interfaceMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  interfaceSetters:
+
+int:
+  Longest path to Object: 3
+  superclasses:
+    Object
+      -> num
+  interfaces: Comparable<num>
+  classMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  classSetters:
+  interfaceMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  interfaceSetters:
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.legacy.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.legacy.expect
index 525f04b..e52d854 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.legacy.expect
@@ -18,6 +18,7 @@
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
+  abstract forwarding-stub method f(core::Object o) → void;
 }
 class D extends self::C {
   synthetic constructor •() → self::D
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.legacy.transformed.expect
index 525f04b..e52d854 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.legacy.transformed.expect
@@ -18,6 +18,7 @@
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
+  abstract forwarding-stub method f(core::Object o) → void;
 }
 class D extends self::C {
   synthetic constructor •() → self::D
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.outline.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.outline.expect
index cbba19d..68748a3 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.outline.expect
@@ -15,6 +15,7 @@
 abstract class C extends core::Object implements self::I1, self::I2 {
   synthetic constructor •() → self::C
     ;
+  abstract forwarding-stub method f(core::Object o) → void;
 }
 class D extends self::C {
   synthetic constructor •() → self::D
diff --git a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.expect b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.expect
index 88bfdb0..b228e01 100644
--- a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.expect
@@ -2,22 +2,17 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/strongly_connected_component.dart:18:5: Error: Can't infer the type of 'y': circularity found during type inference.
-// Specify the type explicitly.
-// var y = /*@returnType=invalid-type*/ () => x;
-//     ^
-//
 // pkg/front_end/testcases/inference_new/strongly_connected_component.dart:17:5: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
-// var x = /*@returnType=invalid-type*/ () => f() ? y : z;
+// var x = /*@returnType=() -> invalid-type*/ () => f() ? y : z;
 //     ^
 //
 import self as self;
 import "dart:core" as core;
 
-static field invalid-type x = (() → invalid-type => self::f() ?{invalid-type} self::y : self::z) as{TypeError} invalid-type;
-static field invalid-type y = (() → invalid-type => self::x) as{TypeError} invalid-type;
-static field () → dynamic z = () → invalid-type => self::x;
+static field invalid-type x = (() → () → invalid-type => self::f() ?{() → invalid-type} self::y : self::z) as{TypeError} invalid-type;
+static field () → invalid-type y = () → invalid-type => self::x;
+static field () → invalid-type z = () → invalid-type => self::x;
 static method f() → core::bool
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.transformed.expect
index 9a54331..b228e01 100644
--- a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.transformed.expect
@@ -2,22 +2,17 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/strongly_connected_component.dart:19:67: Error: Can't infer the type of 'y': circularity found during type inference.
+// pkg/front_end/testcases/inference_new/strongly_connected_component.dart:17:5: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
-// var  /*@error=CantInferTypeDueToCircularity*/ y = /*@returnType=dynamic*/ () =>
-//                                                                   ^
-//
-// pkg/front_end/testcases/inference_new/strongly_connected_component.dart:17:67: Error: Can't infer the type of 'x': circularity found during type inference.
-// Specify the type explicitly.
-// var  /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>
-//                                                                   ^
+// var x = /*@returnType=() -> invalid-type*/ () => f() ? y : z;
+//     ^
 //
 import self as self;
 import "dart:core" as core;
 
-static field dynamic x = () → dynamic => self::f() ?{dynamic} self::y : self::z;
-static field dynamic y = () → dynamic => self::x;
-static field () → dynamic z = () → dynamic => self::x;
+static field invalid-type x = (() → () → invalid-type => self::f() ?{() → invalid-type} self::y : self::z) as{TypeError} invalid-type;
+static field () → invalid-type y = () → invalid-type => self::x;
+static field () → invalid-type z = () → invalid-type => self::x;
 static method f() → core::bool
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.legacy.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.legacy.expect
index 0f54c8d..bae8810 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.legacy.expect
@@ -26,7 +26,7 @@
   synthetic constructor •() → self::C<self::C::U>
     : super self::B::•()
     ;
-  operator [](core::Object x) → self::E<asy::Future<self::C::U>>
+  operator [](generic-covariant-impl core::Object x) → self::E<asy::Future<self::C::U>>
     return null;
   method h() → void {
     dynamic x = super.{self::B::[]}(self::f<dynamic>());
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.legacy.transformed.expect
index 0f54c8d..bae8810 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.legacy.transformed.expect
@@ -26,7 +26,7 @@
   synthetic constructor •() → self::C<self::C::U>
     : super self::B::•()
     ;
-  operator [](core::Object x) → self::E<asy::Future<self::C::U>>
+  operator [](generic-covariant-impl core::Object x) → self::E<asy::Future<self::C::U>>
     return null;
   method h() → void {
     dynamic x = super.{self::B::[]}(self::f<dynamic>());
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.outline.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.outline.expect
index 12ca495..482f685 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.outline.expect
@@ -22,7 +22,7 @@
 class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → self::C<self::C::U>
     ;
-  operator [](core::Object x) → self::E<asy::Future<self::C::U>>
+  operator [](generic-covariant-impl core::Object x) → self::E<asy::Future<self::C::U>>
     ;
   method h() → void
     ;
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.hierarchy.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.hierarchy.expect
index 00d3da3..59b9ccc 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.hierarchy.expect
@@ -148,7 +148,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    D.foo
+    G.D.foo%E.foo%F.foo
     Object.noSuchMethod
     Object._identityHashCode
     Object.hashCode
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.legacy.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.legacy.expect
index cef6169..869fb78 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.legacy.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.legacy.expect
@@ -39,6 +39,7 @@
   synthetic constructor •() → self::G
     : super core::Object::•()
     ;
+  abstract forwarding-stub method foo() → self::B;
 }
 class H extends self::G {
   synthetic constructor •() → self::H
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.legacy.transformed.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.legacy.transformed.expect
index cef6169..869fb78 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.legacy.transformed.expect
@@ -39,6 +39,7 @@
   synthetic constructor •() → self::G
     : super core::Object::•()
     ;
+  abstract forwarding-stub method foo() → self::B;
 }
 class H extends self::G {
   synthetic constructor •() → self::H
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect
index 8801b74..b028b33 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect
@@ -32,6 +32,7 @@
 abstract class G extends core::Object implements self::D, self::E, self::F {
   synthetic constructor •() → self::G
     ;
+  abstract forwarding-stub method foo() → self::B;
 }
 class H extends self::G {
   synthetic constructor •() → self::H
diff --git a/pkg/front_end/testcases/issue129167943.dart.hierarchy.expect b/pkg/front_end/testcases/issue129167943.dart.hierarchy.expect
new file mode 100644
index 0000000..5b7b04e
--- /dev/null
+++ b/pkg/front_end/testcases/issue129167943.dart.hierarchy.expect
@@ -0,0 +1,778 @@
+Object:
+  superclasses:
+  interfaces:
+  classMembers:
+    Object._haveSameRuntimeType
+    Object.toString
+    Object.runtimeType
+    Object._toString
+    Object._simpleInstanceOf
+    Object._hashCodeRnd
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._objectHashCode
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+
+A:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+
+B:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    B.foo
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+
+C:
+  Longest path to Object: 2
+  superclasses:
+    Object
+  interfaces: B
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    C.foo
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+  interfaceMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    C.foo
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  interfaceSetters:
+
+D1:
+  Longest path to Object: 3
+  superclasses:
+    Object
+  interfaces: A, C, B
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    D1.foo
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+  interfaceMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    D1.foo
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  interfaceSetters:
+
+D2:
+  Longest path to Object: 3
+  superclasses:
+    Object
+  interfaces: A, C, B
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    D2.foo
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+  interfaceMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    D2.foo
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  interfaceSetters:
+
+D3:
+  Longest path to Object: 3
+  superclasses:
+    Object
+  interfaces: A, C, B
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+  interfaceMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    D3.C.foo%B.foo
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  interfaceSetters:
+
+D4:
+  Longest path to Object: 3
+  superclasses:
+    Object
+  interfaces: A, C, B
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    D4.foo
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+  interfaceMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    D4.foo
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  interfaceSetters:
+
+D5:
+  Longest path to Object: 3
+  superclasses:
+    Object
+  interfaces: A, C, B
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    D5.foo
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+  interfaceMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    D5.foo
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  interfaceSetters:
+
+E:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+    E.foo
+
+G:
+  Longest path to Object: 2
+  superclasses:
+    Object
+  interfaces: E
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+    G.foo
+  interfaceMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  interfaceSetters:
+    G.foo
+
+H1:
+  Longest path to Object: 3
+  superclasses:
+    Object
+  interfaces: A, E, G
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+    H1.foo
+  interfaceMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  interfaceSetters:
+    H1.foo
+
+H2:
+  Longest path to Object: 3
+  superclasses:
+    Object
+  interfaces: A, E, G
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+    H2.foo
+  interfaceMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  interfaceSetters:
+    H2.foo
+
+H3:
+  Longest path to Object: 3
+  superclasses:
+    Object
+  interfaces: A, E, G
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+  interfaceMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  interfaceSetters:
+    H3.E.foo%G.foo
+
+H4:
+  Longest path to Object: 3
+  superclasses:
+    Object
+  interfaces: A, E, G
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+    H4.foo
+  interfaceMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  interfaceSetters:
+    H4.foo
+
+H5:
+  Longest path to Object: 3
+  superclasses:
+    Object
+  interfaces: A, E, G
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  classSetters:
+    H5.foo
+  interfaceMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+  interfaceSetters:
+    H5.foo
+
+Comparable:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Comparable.compareTo
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+    Comparable.compare
+  classSetters:
+
+num:
+  Longest path to Object: 2
+  superclasses:
+    Object
+  interfaces: Comparable<num>
+  classMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  classSetters:
+  interfaceMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  interfaceSetters:
+
+int:
+  Longest path to Object: 3
+  superclasses:
+    Object
+      -> num
+  interfaces: Comparable<num>
+  classMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  classSetters:
+  interfaceMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  interfaceSetters:
diff --git a/pkg/front_end/testcases/issue129167943.dart.legacy.expect b/pkg/front_end/testcases/issue129167943.dart.legacy.expect
new file mode 100644
index 0000000..5e60b76
--- /dev/null
+++ b/pkg/front_end/testcases/issue129167943.dart.legacy.expect
@@ -0,0 +1,94 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  abstract method foo(core::num x) → void;
+}
+abstract class C extends core::Object implements self::B {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant core::int x) → void;
+}
+abstract class D1 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D1
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant core::int x) → void;
+}
+class D2 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D2
+    : super core::Object::•()
+    ;
+  method foo(covariant core::int x) → void {}
+}
+abstract class D3 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D3
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub method foo(covariant core::num x) → void;
+}
+abstract class D4 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D4
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant core::int x) → void;
+}
+abstract class D5 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D5
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant core::num x) → void;
+}
+abstract class E extends core::Object {
+  synthetic constructor •() → self::E
+    : super core::Object::•()
+    ;
+  abstract set foo(core::num x) → void;
+}
+abstract class G extends core::Object implements self::E {
+  synthetic constructor •() → self::G
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant core::int x) → void;
+}
+abstract class H1 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H1
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant core::int x) → void;
+}
+class H2 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H2
+    : super core::Object::•()
+    ;
+  set foo(covariant core::int x) → void {}
+}
+abstract class H3 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H3
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub set foo(covariant core::num x) → void;
+}
+abstract class H4 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H4
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant core::int x) → void;
+}
+abstract class H5 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H5
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant core::num x) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/issue129167943.dart.legacy.transformed.expect b/pkg/front_end/testcases/issue129167943.dart.legacy.transformed.expect
new file mode 100644
index 0000000..5e60b76
--- /dev/null
+++ b/pkg/front_end/testcases/issue129167943.dart.legacy.transformed.expect
@@ -0,0 +1,94 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  abstract method foo(core::num x) → void;
+}
+abstract class C extends core::Object implements self::B {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant core::int x) → void;
+}
+abstract class D1 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D1
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant core::int x) → void;
+}
+class D2 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D2
+    : super core::Object::•()
+    ;
+  method foo(covariant core::int x) → void {}
+}
+abstract class D3 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D3
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub method foo(covariant core::num x) → void;
+}
+abstract class D4 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D4
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant core::int x) → void;
+}
+abstract class D5 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D5
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant core::num x) → void;
+}
+abstract class E extends core::Object {
+  synthetic constructor •() → self::E
+    : super core::Object::•()
+    ;
+  abstract set foo(core::num x) → void;
+}
+abstract class G extends core::Object implements self::E {
+  synthetic constructor •() → self::G
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant core::int x) → void;
+}
+abstract class H1 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H1
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant core::int x) → void;
+}
+class H2 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H2
+    : super core::Object::•()
+    ;
+  set foo(covariant core::int x) → void {}
+}
+abstract class H3 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H3
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub set foo(covariant core::num x) → void;
+}
+abstract class H4 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H4
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant core::int x) → void;
+}
+abstract class H5 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H5
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant core::num x) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/issue129167943.dart.outline.expect b/pkg/front_end/testcases/issue129167943.dart.outline.expect
new file mode 100644
index 0000000..f6d1af6
--- /dev/null
+++ b/pkg/front_end/testcases/issue129167943.dart.outline.expect
@@ -0,0 +1,82 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B
+    ;
+  abstract method foo(core::num x) → void;
+}
+abstract class C extends core::Object implements self::B {
+  synthetic constructor •() → self::C
+    ;
+  abstract method foo(covariant core::int x) → void;
+}
+abstract class D1 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D1
+    ;
+  abstract method foo(covariant core::int x) → void;
+}
+class D2 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D2
+    ;
+  method foo(covariant core::int x) → void
+    ;
+}
+abstract class D3 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D3
+    ;
+  abstract forwarding-stub method foo(covariant core::num x) → void;
+}
+abstract class D4 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D4
+    ;
+  abstract method foo(covariant core::int x) → void;
+}
+abstract class D5 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D5
+    ;
+  abstract method foo(covariant core::num x) → void;
+}
+abstract class E extends core::Object {
+  synthetic constructor •() → self::E
+    ;
+  abstract set foo(core::num x) → void;
+}
+abstract class G extends core::Object implements self::E {
+  synthetic constructor •() → self::G
+    ;
+  abstract set foo(covariant core::int x) → void;
+}
+abstract class H1 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H1
+    ;
+  abstract set foo(covariant core::int x) → void;
+}
+class H2 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H2
+    ;
+  set foo(covariant core::int x) → void
+    ;
+}
+abstract class H3 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H3
+    ;
+  abstract forwarding-stub set foo(covariant core::num x) → void;
+}
+abstract class H4 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H4
+    ;
+  abstract set foo(covariant core::int x) → void;
+}
+abstract class H5 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H5
+    ;
+  abstract set foo(covariant core::num x) → void;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/issue129167943.dart.strong.expect b/pkg/front_end/testcases/issue129167943.dart.strong.expect
new file mode 100644
index 0000000..5e60b76
--- /dev/null
+++ b/pkg/front_end/testcases/issue129167943.dart.strong.expect
@@ -0,0 +1,94 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  abstract method foo(core::num x) → void;
+}
+abstract class C extends core::Object implements self::B {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant core::int x) → void;
+}
+abstract class D1 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D1
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant core::int x) → void;
+}
+class D2 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D2
+    : super core::Object::•()
+    ;
+  method foo(covariant core::int x) → void {}
+}
+abstract class D3 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D3
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub method foo(covariant core::num x) → void;
+}
+abstract class D4 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D4
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant core::int x) → void;
+}
+abstract class D5 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D5
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant core::num x) → void;
+}
+abstract class E extends core::Object {
+  synthetic constructor •() → self::E
+    : super core::Object::•()
+    ;
+  abstract set foo(core::num x) → void;
+}
+abstract class G extends core::Object implements self::E {
+  synthetic constructor •() → self::G
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant core::int x) → void;
+}
+abstract class H1 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H1
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant core::int x) → void;
+}
+class H2 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H2
+    : super core::Object::•()
+    ;
+  set foo(covariant core::int x) → void {}
+}
+abstract class H3 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H3
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub set foo(covariant core::num x) → void;
+}
+abstract class H4 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H4
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant core::int x) → void;
+}
+abstract class H5 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H5
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant core::num x) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/issue129167943.dart.strong.transformed.expect b/pkg/front_end/testcases/issue129167943.dart.strong.transformed.expect
new file mode 100644
index 0000000..5e60b76
--- /dev/null
+++ b/pkg/front_end/testcases/issue129167943.dart.strong.transformed.expect
@@ -0,0 +1,94 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  abstract method foo(core::num x) → void;
+}
+abstract class C extends core::Object implements self::B {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant core::int x) → void;
+}
+abstract class D1 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D1
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant core::int x) → void;
+}
+class D2 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D2
+    : super core::Object::•()
+    ;
+  method foo(covariant core::int x) → void {}
+}
+abstract class D3 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D3
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub method foo(covariant core::num x) → void;
+}
+abstract class D4 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D4
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant core::int x) → void;
+}
+abstract class D5 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D5
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant core::num x) → void;
+}
+abstract class E extends core::Object {
+  synthetic constructor •() → self::E
+    : super core::Object::•()
+    ;
+  abstract set foo(core::num x) → void;
+}
+abstract class G extends core::Object implements self::E {
+  synthetic constructor •() → self::G
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant core::int x) → void;
+}
+abstract class H1 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H1
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant core::int x) → void;
+}
+class H2 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H2
+    : super core::Object::•()
+    ;
+  set foo(covariant core::int x) → void {}
+}
+abstract class H3 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H3
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub set foo(covariant core::num x) → void;
+}
+abstract class H4 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H4
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant core::int x) → void;
+}
+abstract class H5 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H5
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant core::num x) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/mixin_application_override.dart.hierarchy.expect b/pkg/front_end/testcases/mixin_application_override.dart.hierarchy.expect
index 8351797..bec105b 100644
--- a/pkg/front_end/testcases/mixin_application_override.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/mixin_application_override.dart.hierarchy.expect
@@ -193,7 +193,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    M.foo
+    A1.M.foo%S.foo
     Object.noSuchMethod
     Object._identityHashCode
     Object.hashCode
@@ -292,7 +292,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    M.foo
+    A2.M.foo%S.foo
     Object.noSuchMethod
     Object._identityHashCode
     Object.hashCode
@@ -422,7 +422,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    M.foo
+    _A1X&S&M1 with M.M.foo%S.foo
     Object.noSuchMethod
     Object._identityHashCode
     Object.hashCode
@@ -456,7 +456,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    M.foo
+    A1X.M.foo%S.foo
     Object.noSuchMethod
     Object._identityHashCode
     Object.hashCode
@@ -555,7 +555,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    M.foo
+    _A2X&S&M1&M2 with M.M.foo%S.foo
     Object.noSuchMethod
     Object._identityHashCode
     Object.hashCode
@@ -590,7 +590,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    M.foo
+    A2X.M.foo%S.foo
     Object.noSuchMethod
     Object._identityHashCode
     Object.hashCode
@@ -720,7 +720,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    M.foo
+    _B1&S&M1 with M.M.foo%S.foo
     Object.noSuchMethod
     Object._identityHashCode
     Object.hashCode
@@ -754,7 +754,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    M.foo
+    B1.M.foo%S.foo
     Object.noSuchMethod
     Object._identityHashCode
     Object.hashCode
@@ -853,7 +853,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    M.foo
+    _B2&S&M1&M2 with M.M.foo%S.foo
     Object.noSuchMethod
     Object._identityHashCode
     Object.hashCode
@@ -888,7 +888,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    M.foo
+    B2.M.foo%S.foo
     Object.noSuchMethod
     Object._identityHashCode
     Object.hashCode
@@ -1052,7 +1052,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    M.foo
+    _B1X&S&M1 with M.M.foo%S.foo
     Object.noSuchMethod
     Object._identityHashCode
     Object.hashCode
@@ -1086,7 +1086,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    M.foo
+    _B1X&S&M1&M with MX.M.foo%S.foo
     Object.noSuchMethod
     Object._identityHashCode
     Object.hashCode
@@ -1121,7 +1121,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    M.foo
+    B1X.M.foo%S.foo
     Object.noSuchMethod
     Object._identityHashCode
     Object.hashCode
@@ -1220,7 +1220,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    M.foo
+    _B2X&S&M1&M2 with M.M.foo%S.foo
     Object.noSuchMethod
     Object._identityHashCode
     Object.hashCode
@@ -1255,7 +1255,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    M.foo
+    _B2X&S&M1&M2&M with MX.M.foo%S.foo
     Object.noSuchMethod
     Object._identityHashCode
     Object.hashCode
@@ -1291,7 +1291,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    M.foo
+    B2X.M.foo%S.foo
     Object.noSuchMethod
     Object._identityHashCode
     Object.hashCode
diff --git a/pkg/front_end/testcases/mixin_application_override.dart.legacy.expect b/pkg/front_end/testcases/mixin_application_override.dart.legacy.expect
index b5c4a61..0900d21 100644
--- a/pkg/front_end/testcases/mixin_application_override.dart.legacy.expect
+++ b/pkg/front_end/testcases/mixin_application_override.dart.legacy.expect
@@ -122,6 +122,66 @@
 // class B2X extends S with M1, M2, M, MX {}
 //       ^^^
 //
+// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:26:7: Context: Override was introduced in the mixin application class 'A1X'.
+// class A1X = S with M1, M, MX;
+//       ^^^
+//
+// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:27:7: Context: Override was introduced in the mixin application class 'A2X'.
+// class A2X = S with M1, M2, M, MX;
+//       ^^^
+//
+// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:31:7: Context: Both members are inherited by the non-abstract class 'B1'.
+// class B1 extends S with M1, M {}
+//       ^^
+//
+// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:33:7: Context: Both members are inherited by the non-abstract class 'B2'.
+// class B2 extends S with M1, M2, M {}
+//       ^^
+//
+// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:37:7: Context: Both members are inherited by the non-abstract class 'B1X'.
+// class B1X extends S with M1, M, MX {}
+//       ^^^
+//
+// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:39:7: Context: Both members are inherited by the non-abstract class 'B2X'.
+// class B2X extends S with M1, M2, M, MX {}
+//       ^^^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -166,6 +226,7 @@
   synthetic constructor •() → self::A1
     : super self::_A1&S&M1::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 abstract class _A2&S&M1 = self::S with self::M1 {
   synthetic constructor •() → self::_A2&S&M1
@@ -181,6 +242,7 @@
   synthetic constructor •() → self::A2
     : super self::_A2&S&M1&M2::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 abstract class _A0X&S&M = self::S with self::M {
   synthetic constructor •() → self::_A0X&S&M
@@ -201,11 +263,13 @@
   synthetic constructor •() → self::_A1X&S&M1&M
     : super self::_A1X&S&M1::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 class A1X = self::_A1X&S&M1&M with self::MX {
   synthetic constructor •() → self::A1X
     : super self::_A1X&S&M1&M::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 abstract class _A2X&S&M1 = self::S with self::M1 {
   synthetic constructor •() → self::_A2X&S&M1
@@ -221,11 +285,13 @@
   synthetic constructor •() → self::_A2X&S&M1&M2&M
     : super self::_A2X&S&M1&M2::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 class A2X = self::_A2X&S&M1&M2&M with self::MX {
   synthetic constructor •() → self::A2X
     : super self::_A2X&S&M1&M2&M::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 abstract class _B0&S&M = self::S with self::M {
   synthetic constructor •() → self::_B0&S&M
@@ -246,11 +312,13 @@
   synthetic constructor •() → self::_B1&S&M1&M
     : super self::_B1&S&M1::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 class B1 extends self::_B1&S&M1&M {
   synthetic constructor •() → self::B1
     : super self::_B1&S&M1&M::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 abstract class _B2&S&M1 = self::S with self::M1 {
   synthetic constructor •() → self::_B2&S&M1
@@ -266,11 +334,13 @@
   synthetic constructor •() → self::_B2&S&M1&M2&M
     : super self::_B2&S&M1&M2::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 class B2 extends self::_B2&S&M1&M2&M {
   synthetic constructor •() → self::B2
     : super self::_B2&S&M1&M2&M::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 abstract class _B0X&S&M = self::S with self::M {
   synthetic constructor •() → self::_B0X&S&M
@@ -296,16 +366,19 @@
   synthetic constructor •() → self::_B1X&S&M1&M
     : super self::_B1X&S&M1::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 abstract class _B1X&S&M1&M&MX = self::_B1X&S&M1&M with self::MX {
   synthetic constructor •() → self::_B1X&S&M1&M&MX
     : super self::_B1X&S&M1&M::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 class B1X extends self::_B1X&S&M1&M&MX {
   synthetic constructor •() → self::B1X
     : super self::_B1X&S&M1&M&MX::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 abstract class _B2X&S&M1 = self::S with self::M1 {
   synthetic constructor •() → self::_B2X&S&M1
@@ -321,15 +394,18 @@
   synthetic constructor •() → self::_B2X&S&M1&M2&M
     : super self::_B2X&S&M1&M2::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 abstract class _B2X&S&M1&M2&M&MX = self::_B2X&S&M1&M2&M with self::MX {
   synthetic constructor •() → self::_B2X&S&M1&M2&M&MX
     : super self::_B2X&S&M1&M2&M::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 class B2X extends self::_B2X&S&M1&M2&M&MX {
   synthetic constructor •() → self::B2X
     : super self::_B2X&S&M1&M2&M&MX::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/mixin_application_override.dart.legacy.transformed.expect b/pkg/front_end/testcases/mixin_application_override.dart.legacy.transformed.expect
index c5a8827..49aba4d 100644
--- a/pkg/front_end/testcases/mixin_application_override.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/mixin_application_override.dart.legacy.transformed.expect
@@ -122,6 +122,66 @@
 // class B2X extends S with M1, M2, M, MX {}
 //       ^^^
 //
+// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:26:7: Context: Override was introduced in the mixin application class 'A1X'.
+// class A1X = S with M1, M, MX;
+//       ^^^
+//
+// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:27:7: Context: Override was introduced in the mixin application class 'A2X'.
+// class A2X = S with M1, M2, M, MX;
+//       ^^^
+//
+// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:31:7: Context: Both members are inherited by the non-abstract class 'B1'.
+// class B1 extends S with M1, M {}
+//       ^^
+//
+// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:33:7: Context: Both members are inherited by the non-abstract class 'B2'.
+// class B2 extends S with M1, M2, M {}
+//       ^^
+//
+// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:37:7: Context: Both members are inherited by the non-abstract class 'B1X'.
+// class B1X extends S with M1, M, MX {}
+//       ^^^
+//
+// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:39:7: Context: Both members are inherited by the non-abstract class 'B2X'.
+// class B2X extends S with M1, M2, M, MX {}
+//       ^^^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -167,7 +227,7 @@
   synthetic constructor •() → self::A1
     : super self::_A1&S&M1::•()
     ;
-  method foo() → dynamic {}
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 abstract class _A2&S&M1 extends self::S implements self::M1 {
   synthetic constructor •() → self::_A2&S&M1
@@ -183,7 +243,7 @@
   synthetic constructor •() → self::A2
     : super self::_A2&S&M1&M2::•()
     ;
-  method foo() → dynamic {}
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 abstract class _A0X&S&M extends self::S implements self::M {
   synthetic constructor •() → self::_A0X&S&M
@@ -205,12 +265,13 @@
   synthetic constructor •() → self::_A1X&S&M1&M
     : super self::_A1X&S&M1::•()
     ;
-  method foo() → dynamic {}
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 class A1X extends self::_A1X&S&M1&M implements self::MX {
   synthetic constructor •() → self::A1X
     : super self::_A1X&S&M1&M::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 abstract class _A2X&S&M1 extends self::S implements self::M1 {
   synthetic constructor •() → self::_A2X&S&M1
@@ -226,12 +287,13 @@
   synthetic constructor •() → self::_A2X&S&M1&M2&M
     : super self::_A2X&S&M1&M2::•()
     ;
-  method foo() → dynamic {}
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 class A2X extends self::_A2X&S&M1&M2&M implements self::MX {
   synthetic constructor •() → self::A2X
     : super self::_A2X&S&M1&M2&M::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 abstract class _B0&S&M extends self::S implements self::M {
   synthetic constructor •() → self::_B0&S&M
@@ -253,12 +315,13 @@
   synthetic constructor •() → self::_B1&S&M1&M
     : super self::_B1&S&M1::•()
     ;
-  method foo() → dynamic {}
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 class B1 extends self::_B1&S&M1&M {
   synthetic constructor •() → self::B1
     : super self::_B1&S&M1&M::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 abstract class _B2&S&M1 extends self::S implements self::M1 {
   synthetic constructor •() → self::_B2&S&M1
@@ -274,12 +337,13 @@
   synthetic constructor •() → self::_B2&S&M1&M2&M
     : super self::_B2&S&M1&M2::•()
     ;
-  method foo() → dynamic {}
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 class B2 extends self::_B2&S&M1&M2&M {
   synthetic constructor •() → self::B2
     : super self::_B2&S&M1&M2&M::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 abstract class _B0X&S&M extends self::S implements self::M {
   synthetic constructor •() → self::_B0X&S&M
@@ -306,17 +370,19 @@
   synthetic constructor •() → self::_B1X&S&M1&M
     : super self::_B1X&S&M1::•()
     ;
-  method foo() → dynamic {}
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 abstract class _B1X&S&M1&M&MX extends self::_B1X&S&M1&M implements self::MX {
   synthetic constructor •() → self::_B1X&S&M1&M&MX
     : super self::_B1X&S&M1&M::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 class B1X extends self::_B1X&S&M1&M&MX {
   synthetic constructor •() → self::B1X
     : super self::_B1X&S&M1&M&MX::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 abstract class _B2X&S&M1 extends self::S implements self::M1 {
   synthetic constructor •() → self::_B2X&S&M1
@@ -332,16 +398,18 @@
   synthetic constructor •() → self::_B2X&S&M1&M2&M
     : super self::_B2X&S&M1&M2::•()
     ;
-  method foo() → dynamic {}
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 abstract class _B2X&S&M1&M2&M&MX extends self::_B2X&S&M1&M2&M implements self::MX {
   synthetic constructor •() → self::_B2X&S&M1&M2&M&MX
     : super self::_B2X&S&M1&M2&M::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 class B2X extends self::_B2X&S&M1&M2&M&MX {
   synthetic constructor •() → self::B2X
     : super self::_B2X&S&M1&M2&M&MX::•()
     ;
+  abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/mixin_application_override.dart.outline.expect b/pkg/front_end/testcases/mixin_application_override.dart.outline.expect
index 9983cfb..90453d9 100644
--- a/pkg/front_end/testcases/mixin_application_override.dart.outline.expect
+++ b/pkg/front_end/testcases/mixin_application_override.dart.outline.expect
@@ -122,6 +122,66 @@
 // class B2X extends S with M1, M2, M, MX {}
 //       ^^^
 //
+// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:26:7: Context: Override was introduced in the mixin application class 'A1X'.
+// class A1X = S with M1, M, MX;
+//       ^^^
+//
+// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:27:7: Context: Override was introduced in the mixin application class 'A2X'.
+// class A2X = S with M1, M2, M, MX;
+//       ^^^
+//
+// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:31:7: Context: Both members are inherited by the non-abstract class 'B1'.
+// class B1 extends S with M1, M {}
+//       ^^
+//
+// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:33:7: Context: Both members are inherited by the non-abstract class 'B2'.
+// class B2 extends S with M1, M2, M {}
+//       ^^
+//
+// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:37:7: Context: Both members are inherited by the non-abstract class 'B1X'.
+// class B1X extends S with M1, M, MX {}
+//       ^^^
+//
+// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+// pkg/front_end/testcases/mixin_application_override.dart:39:7: Context: Both members are inherited by the non-abstract class 'B2X'.
+// class B2X extends S with M1, M2, M, MX {}
+//       ^^^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -163,6 +223,7 @@
   synthetic constructor •() → self::A1
     : super self::_A1&S&M1::•()
     ;
+  abstract forwarding-stub method foo([dynamic x]) → dynamic;
 }
 abstract class _A2&S&M1 = self::S with self::M1 {
   synthetic constructor •() → self::_A2&S&M1
@@ -178,6 +239,7 @@
   synthetic constructor •() → self::A2
     : super self::_A2&S&M1&M2::•()
     ;
+  abstract forwarding-stub method foo([dynamic x]) → dynamic;
 }
 abstract class _A0X&S&M = self::S with self::M {
   synthetic constructor •() → self::_A0X&S&M
@@ -198,11 +260,13 @@
   synthetic constructor •() → self::_A1X&S&M1&M
     : super self::_A1X&S&M1::•()
     ;
+  abstract forwarding-stub method foo([dynamic x]) → dynamic;
 }
 class A1X = self::_A1X&S&M1&M with self::MX {
   synthetic constructor •() → self::A1X
     : super self::_A1X&S&M1&M::•()
     ;
+  abstract forwarding-stub method foo([dynamic x]) → dynamic;
 }
 abstract class _A2X&S&M1 = self::S with self::M1 {
   synthetic constructor •() → self::_A2X&S&M1
@@ -218,11 +282,13 @@
   synthetic constructor •() → self::_A2X&S&M1&M2&M
     : super self::_A2X&S&M1&M2::•()
     ;
+  abstract forwarding-stub method foo([dynamic x]) → dynamic;
 }
 class A2X = self::_A2X&S&M1&M2&M with self::MX {
   synthetic constructor •() → self::A2X
     : super self::_A2X&S&M1&M2&M::•()
     ;
+  abstract forwarding-stub method foo([dynamic x]) → dynamic;
 }
 abstract class _B0&S&M = self::S with self::M {
   synthetic constructor •() → self::_B0&S&M
@@ -242,10 +308,12 @@
   synthetic constructor •() → self::_B1&S&M1&M
     : super self::_B1&S&M1::•()
     ;
+  abstract forwarding-stub method foo([dynamic x]) → dynamic;
 }
 class B1 extends self::_B1&S&M1&M {
   synthetic constructor •() → self::B1
     ;
+  abstract forwarding-stub method foo([dynamic x]) → dynamic;
 }
 abstract class _B2&S&M1 = self::S with self::M1 {
   synthetic constructor •() → self::_B2&S&M1
@@ -261,10 +329,12 @@
   synthetic constructor •() → self::_B2&S&M1&M2&M
     : super self::_B2&S&M1&M2::•()
     ;
+  abstract forwarding-stub method foo([dynamic x]) → dynamic;
 }
 class B2 extends self::_B2&S&M1&M2&M {
   synthetic constructor •() → self::B2
     ;
+  abstract forwarding-stub method foo([dynamic x]) → dynamic;
 }
 abstract class _B0X&S&M = self::S with self::M {
   synthetic constructor •() → self::_B0X&S&M
@@ -289,15 +359,18 @@
   synthetic constructor •() → self::_B1X&S&M1&M
     : super self::_B1X&S&M1::•()
     ;
+  abstract forwarding-stub method foo([dynamic x]) → dynamic;
 }
 abstract class _B1X&S&M1&M&MX = self::_B1X&S&M1&M with self::MX {
   synthetic constructor •() → self::_B1X&S&M1&M&MX
     : super self::_B1X&S&M1&M::•()
     ;
+  abstract forwarding-stub method foo([dynamic x]) → dynamic;
 }
 class B1X extends self::_B1X&S&M1&M&MX {
   synthetic constructor •() → self::B1X
     ;
+  abstract forwarding-stub method foo([dynamic x]) → dynamic;
 }
 abstract class _B2X&S&M1 = self::S with self::M1 {
   synthetic constructor •() → self::_B2X&S&M1
@@ -313,15 +386,18 @@
   synthetic constructor •() → self::_B2X&S&M1&M2&M
     : super self::_B2X&S&M1&M2::•()
     ;
+  abstract forwarding-stub method foo([dynamic x]) → dynamic;
 }
 abstract class _B2X&S&M1&M2&M&MX = self::_B2X&S&M1&M2&M with self::MX {
   synthetic constructor •() → self::_B2X&S&M1&M2&M&MX
     : super self::_B2X&S&M1&M2&M::•()
     ;
+  abstract forwarding-stub method foo([dynamic x]) → dynamic;
 }
 class B2X extends self::_B2X&S&M1&M2&M&MX {
   synthetic constructor •() → self::B2X
     ;
+  abstract forwarding-stub method foo([dynamic x]) → dynamic;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/native_as_name.dart.legacy.expect b/pkg/front_end/testcases/native_as_name.dart.legacy.expect
index 52a151a..b2691b8 100644
--- a/pkg/front_end/testcases/native_as_name.dart.legacy.expect
+++ b/pkg/front_end/testcases/native_as_name.dart.legacy.expect
@@ -34,7 +34,7 @@
   synthetic constructor •() → self::Z
     : super core::Object::•()
     ;
-  set native(core::String s) → dynamic
+  set native(core::String s) → void
     return this.{self::Z::f} = s;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/native_as_name.dart.legacy.transformed.expect b/pkg/front_end/testcases/native_as_name.dart.legacy.transformed.expect
index 52a151a..b2691b8 100644
--- a/pkg/front_end/testcases/native_as_name.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/native_as_name.dart.legacy.transformed.expect
@@ -34,7 +34,7 @@
   synthetic constructor •() → self::Z
     : super core::Object::•()
     ;
-  set native(core::String s) → dynamic
+  set native(core::String s) → void
     return this.{self::Z::f} = s;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/native_as_name.dart.outline.expect b/pkg/front_end/testcases/native_as_name.dart.outline.expect
index b78f8ae..c2df01d 100644
--- a/pkg/front_end/testcases/native_as_name.dart.outline.expect
+++ b/pkg/front_end/testcases/native_as_name.dart.outline.expect
@@ -29,7 +29,7 @@
   field core::String f;
   synthetic constructor •() → self::Z
     ;
-  set native(core::String s) → dynamic
+  set native(core::String s) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.legacy.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.legacy.expect
index 11c8d48..d420935 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.legacy.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.legacy.expect
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     return "bar";
   no-such-method-forwarder get foo() → core::int
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) as{TypeError} core::int;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.legacy.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.legacy.transformed.expect
index 11c8d48..d420935 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.legacy.transformed.expect
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     return "bar";
   no-such-method-forwarder get foo() → core::int
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) as{TypeError} core::int;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.outline.expect
index 1756340..e7230a4 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.outline.expect
@@ -10,7 +10,7 @@
 class A extends core::Object implements self::I {
   synthetic constructor •() → self::A
     ;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     ;
   no-such-method-forwarder get foo() → core::int
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) as{TypeError} core::int;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.expect
index 2e65c41..8387d6d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.expect
@@ -34,6 +34,6 @@
 }
 static method main() → dynamic {
   self::A a = new self::A::•();
-  self::expectTypeError(() → core::int => a.{self::A::foo});
+  self::expectTypeError(() → core::int => a.{self::I::foo});
   self::expectTypeError(() → core::String => (a as dynamic).foo = "bar");
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.transformed.expect
index 2e65c41..8387d6d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.transformed.expect
@@ -34,6 +34,6 @@
 }
 static method main() → dynamic {
   self::A a = new self::A::•();
-  self::expectTypeError(() → core::int => a.{self::A::foo});
+  self::expectTypeError(() → core::int => a.{self::I::foo});
   self::expectTypeError(() → core::String => (a as dynamic).foo = "bar");
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.legacy.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.legacy.expect
index 0e0e756..fa7bf1f 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.legacy.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.legacy.expect
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method noSuchMethod(dynamic i) → dynamic {
+  method noSuchMethod(core::Invocation i) → dynamic {
     self::count = self::count.+(1);
     return null;
   }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.legacy.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.legacy.transformed.expect
index e0f993c..dae5f70 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.legacy.transformed.expect
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method noSuchMethod(dynamic i) → dynamic {
+  method noSuchMethod(core::Invocation i) → dynamic {
     self::count = self::count.+(1);
     return null;
   }
@@ -25,7 +25,7 @@
   const synthetic constructor •() → self::_C&Object&B
     : super core::Object::•()
     ;
-  method noSuchMethod(dynamic i) → dynamic {
+  method noSuchMethod(core::Invocation i) → dynamic {
     self::count = self::count.+(1);
     return null;
   }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.outline.expect
index d92df10..11ba2e6 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.outline.expect
@@ -10,7 +10,7 @@
 class B extends core::Object implements self::A {
   synthetic constructor •() → self::B
     ;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     ;
   no-such-method-forwarder get foo() → core::int
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) as{TypeError} core::int;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.legacy.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.legacy.expect
index c7fedd2..b172437 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.legacy.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.legacy.expect
@@ -14,7 +14,7 @@
     ;
   get foo() → core::int
     return 42;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     return "bar";
 }
 class C extends self::B {
@@ -29,7 +29,7 @@
     : super core::Object::•()
     ;
   set foo(core::int value) → void {}
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     return "bar";
 }
 class E extends self::D {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.legacy.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.legacy.transformed.expect
index c7fedd2..b172437 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.legacy.transformed.expect
@@ -14,7 +14,7 @@
     ;
   get foo() → core::int
     return 42;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     return "bar";
 }
 class C extends self::B {
@@ -29,7 +29,7 @@
     : super core::Object::•()
     ;
   set foo(core::int value) → void {}
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     return "bar";
 }
 class E extends self::D {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.outline.expect
index 523367d..ed38e84 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.outline.expect
@@ -12,7 +12,7 @@
     ;
   get foo() → core::int
     ;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     ;
 }
 class C extends self::B {
@@ -26,7 +26,7 @@
     ;
   set foo(core::int value) → void
     ;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     ;
 }
 class E extends self::D {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.expect
index cb4a71e..7417039 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.expect
@@ -51,5 +51,5 @@
   self::C c = new self::C::•();
   self::expectTypeError(() → core::String => (c as dynamic).foo = "bar");
   self::E e = new self::E::•();
-  self::expectTypeError(() → core::int => e.{self::E::foo});
+  self::expectTypeError(() → core::int => e.{self::A::foo});
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.transformed.expect
index cb4a71e..7417039 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.transformed.expect
@@ -51,5 +51,5 @@
   self::C c = new self::C::•();
   self::expectTypeError(() → core::String => (c as dynamic).foo = "bar");
   self::E e = new self::E::•();
-  self::expectTypeError(() → core::int => e.{self::E::foo});
+  self::expectTypeError(() → core::int => e.{self::A::foo});
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.legacy.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.legacy.expect
index ed949f6..3daf444 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.legacy.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.legacy.expect
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     return <dynamic>[];
   no-such-method-forwarder get foo() → core::List<core::int>
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) as{TypeError} core::List<core::int>;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.legacy.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.legacy.transformed.expect
index ed949f6..3daf444 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.legacy.transformed.expect
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     return <dynamic>[];
   no-such-method-forwarder get foo() → core::List<core::int>
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) as{TypeError} core::List<core::int>;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.outline.expect
index 9679fbf..0cdcb88 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.outline.expect
@@ -10,7 +10,7 @@
 class B extends core::Object implements self::A<core::int> {
   synthetic constructor •() → self::B
     ;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     ;
   no-such-method-forwarder get foo() → core::List<core::int>
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) as{TypeError} core::List<core::int>;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.expect
index 0b0b415..a705020 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.expect
@@ -29,6 +29,6 @@
 }
 static method main() → dynamic {
   self::B b = new self::B::•();
-  self::expectTypeError(() → core::List<core::int> => b.{self::B::foo});
+  self::expectTypeError(() → core::List<core::int> => b.{self::A::foo});
   self::expectTypeError(() → core::List<dynamic> => (b as dynamic).foo = <dynamic>[]);
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.transformed.expect
index 0b0b415..a705020 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.transformed.expect
@@ -29,6 +29,6 @@
 }
 static method main() → dynamic {
   self::B b = new self::B::•();
-  self::expectTypeError(() → core::List<core::int> => b.{self::B::foo});
+  self::expectTypeError(() → core::List<core::int> => b.{self::A::foo});
   self::expectTypeError(() → core::List<dynamic> => (b as dynamic).foo = <dynamic>[]);
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.legacy.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.legacy.expect
index 521bedd..b71a516 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.legacy.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.legacy.expect
@@ -18,7 +18,7 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method noSuchMethod(dynamic _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     return null;
   no-such-method-forwarder method foo() → dynamic
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) as{TypeError} dynamic;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.legacy.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.legacy.transformed.expect
index 528ca88..7cd29a7 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.legacy.transformed.expect
@@ -18,7 +18,7 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method noSuchMethod(dynamic _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     return null;
   no-such-method-forwarder method foo() → dynamic
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) as{TypeError} dynamic;
@@ -27,7 +27,7 @@
   synthetic constructor •() → self::_C&A&B
     : super self::A::•()
     ;
-  method noSuchMethod(dynamic _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     return null;
 }
 class C extends self::_C&A&B {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect
index 8007c45..f04505e 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect
@@ -16,7 +16,7 @@
 class B extends core::Object implements self::I {
   synthetic constructor •() → self::B
     ;
-  method noSuchMethod(dynamic _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     ;
   no-such-method-forwarder method foo() → dynamic
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) as{TypeError} dynamic;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.expect
index 5f6f35b..075405d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.expect
@@ -31,10 +31,10 @@
 static method main() → dynamic {
   self::B b = new self::B::•();
   dynamic value;
-  if(!(value = b.{self::B::foo}()).{core::String::==}("baz")) {
+  if(!(value = b.{self::A::foo}()).{core::String::==}("baz")) {
     throw "Unexpected value: '${value}'; expected 'baz'.";
   }
-  if(!(value = b.{self::B::hest}()).{core::num::==}(42)) {
+  if(!(value = b.{self::A::hest}()).{core::num::==}(42)) {
     throw "Unexpected value: '${value}'; expected '42'.";
   }
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.transformed.expect
index 5f6f35b..075405d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.transformed.expect
@@ -31,10 +31,10 @@
 static method main() → dynamic {
   self::B b = new self::B::•();
   dynamic value;
-  if(!(value = b.{self::B::foo}()).{core::String::==}("baz")) {
+  if(!(value = b.{self::A::foo}()).{core::String::==}("baz")) {
     throw "Unexpected value: '${value}'; expected 'baz'.";
   }
-  if(!(value = b.{self::B::hest}()).{core::num::==}(42)) {
+  if(!(value = b.{self::A::hest}()).{core::num::==}(42)) {
     throw "Unexpected value: '${value}'; expected '42'.";
   }
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.legacy.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.legacy.expect
index f0470a5..f405f12 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.legacy.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.legacy.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     return null;
   abstract method foo() → void;
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.legacy.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.legacy.transformed.expect
index f0470a5..f405f12 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.legacy.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     return null;
   abstract method foo() → void;
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.outline.expect
index 32e8f80..e5f2ba8 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.outline.expect
@@ -5,7 +5,7 @@
 abstract class A extends core::Object {
   synthetic constructor •() → self::A
     ;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     ;
   abstract method foo() → void;
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.legacy.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.legacy.expect
index bf620af..05f2839 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.legacy.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.legacy.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     return null;
   abstract method foo() → void;
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.legacy.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.legacy.transformed.expect
index bf620af..05f2839 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.legacy.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     return null;
   abstract method foo() → void;
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.outline.expect
index e72d0cf..df83640 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.outline.expect
@@ -5,7 +5,7 @@
 abstract class A extends core::Object {
   synthetic constructor •() → self::A
     ;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     ;
   abstract method foo() → void;
 }
diff --git a/pkg/front_end/testcases/operators.dart.legacy.expect b/pkg/front_end/testcases/operators.dart.legacy.expect
index 9760fe2..639223b 100644
--- a/pkg/front_end/testcases/operators.dart.legacy.expect
+++ b/pkg/front_end/testcases/operators.dart.legacy.expect
@@ -18,7 +18,7 @@
     return null;
   operator /(dynamic other) → dynamic
     return null;
-  operator ==(dynamic other) → dynamic
+  operator ==(dynamic other) → core::bool
     return null;
   operator >(dynamic other) → dynamic
     return null;
diff --git a/pkg/front_end/testcases/operators.dart.legacy.transformed.expect b/pkg/front_end/testcases/operators.dart.legacy.transformed.expect
index 9760fe2..639223b 100644
--- a/pkg/front_end/testcases/operators.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/operators.dart.legacy.transformed.expect
@@ -18,7 +18,7 @@
     return null;
   operator /(dynamic other) → dynamic
     return null;
-  operator ==(dynamic other) → dynamic
+  operator ==(dynamic other) → core::bool
     return null;
   operator >(dynamic other) → dynamic
     return null;
diff --git a/pkg/front_end/testcases/operators.dart.outline.expect b/pkg/front_end/testcases/operators.dart.outline.expect
index 22aa8c4..68ed1ff 100644
--- a/pkg/front_end/testcases/operators.dart.outline.expect
+++ b/pkg/front_end/testcases/operators.dart.outline.expect
@@ -17,7 +17,7 @@
     ;
   operator /(dynamic other) → dynamic
     ;
-  operator ==(dynamic other) → dynamic
+  operator ==(dynamic other) → core::bool
     ;
   operator >(dynamic other) → dynamic
     ;
diff --git a/pkg/front_end/testcases/optional.dart.outline.expect b/pkg/front_end/testcases/optional.dart.outline.expect
index 0f681fd..03d2b6e 100644
--- a/pkg/front_end/testcases/optional.dart.outline.expect
+++ b/pkg/front_end/testcases/optional.dart.outline.expect
@@ -22,13 +22,13 @@
 class TestListener extends self::Listener {
   synthetic constructor •() → self::TestListener
     ;
-  method event(dynamic input, [dynamic x, dynamic y]) → void
+  method event(core::String input, [core::int x, core::int y]) → void
     ;
 }
 class ExtendedListener extends self::Listener {
   synthetic constructor •() → self::ExtendedListener
     ;
-  method event(dynamic input, [dynamic x, dynamic y, dynamic z]) → void
+  method event(core::String input, [core::int x, core::int y, dynamic z]) → void
     ;
 }
 class InvalidListener extends core::Object {
diff --git a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.legacy.expect b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.legacy.expect
index cf84a61..b8259ec 100644
--- a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.legacy.expect
+++ b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.legacy.expect
@@ -24,8 +24,8 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(dynamic value) → void {}
-  get y() → dynamic
+  set x(self::A value) → void {}
+  get y() → self::B
     return null;
 }
 class E extends self::D {
diff --git a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.legacy.transformed.expect b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.legacy.transformed.expect
index cf84a61..b8259ec 100644
--- a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.legacy.transformed.expect
@@ -24,8 +24,8 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(dynamic value) → void {}
-  get y() → dynamic
+  set x(self::A value) → void {}
+  get y() → self::B
     return null;
 }
 class E extends self::D {
diff --git a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.outline.expect b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.outline.expect
index 98a1f1b..f6baaa1 100644
--- a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.outline.expect
@@ -21,9 +21,9 @@
 class D extends self::C {
   synthetic constructor •() → self::D
     ;
-  set x(dynamic value) → void
+  set x(self::A value) → void
     ;
-  get y() → dynamic
+  get y() → self::B
     ;
 }
 class E extends self::D {
diff --git a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.legacy.expect b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.legacy.expect
index 7a03141..ec9f575 100644
--- a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.legacy.expect
+++ b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.legacy.expect
@@ -27,7 +27,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x1(self::B value) → void {}
+  set x1(covariant self::B value) → void {}
   set x2(covariant self::B value) → void {}
   set x3(covariant self::B value) → void {}
   set x4(self::B value) → void {}
diff --git a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.legacy.transformed.expect b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.legacy.transformed.expect
index 7a03141..ec9f575 100644
--- a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.legacy.transformed.expect
@@ -27,7 +27,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x1(self::B value) → void {}
+  set x1(covariant self::B value) → void {}
   set x2(covariant self::B value) → void {}
   set x3(covariant self::B value) → void {}
   set x4(self::B value) → void {}
diff --git a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.outline.expect b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.outline.expect
index f5ae95c..eb8c429 100644
--- a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.outline.expect
+++ b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.outline.expect
@@ -29,7 +29,7 @@
 class D extends self::C {
   synthetic constructor •() → self::D
     ;
-  set x1(self::B value) → void
+  set x1(covariant self::B value) → void
     ;
   set x2(covariant self::B value) → void
     ;
diff --git a/pkg/front_end/testcases/override_check_after_inference.dart.legacy.expect b/pkg/front_end/testcases/override_check_after_inference.dart.legacy.expect
index deaf420..adf56f6 100644
--- a/pkg/front_end/testcases/override_check_after_inference.dart.legacy.expect
+++ b/pkg/front_end/testcases/override_check_after_inference.dart.legacy.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f(dynamic x) → void {}
+  method f(self::A x) → void {}
 }
 class E extends self::D {
   synthetic constructor •() → self::E
diff --git a/pkg/front_end/testcases/override_check_after_inference.dart.legacy.transformed.expect b/pkg/front_end/testcases/override_check_after_inference.dart.legacy.transformed.expect
index deaf420..adf56f6 100644
--- a/pkg/front_end/testcases/override_check_after_inference.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/override_check_after_inference.dart.legacy.transformed.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f(dynamic x) → void {}
+  method f(self::A x) → void {}
 }
 class E extends self::D {
   synthetic constructor •() → self::E
diff --git a/pkg/front_end/testcases/override_check_after_inference.dart.outline.expect b/pkg/front_end/testcases/override_check_after_inference.dart.outline.expect
index 82c9ce4..6f3f1e6 100644
--- a/pkg/front_end/testcases/override_check_after_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/override_check_after_inference.dart.outline.expect
@@ -19,7 +19,7 @@
 class D extends self::C {
   synthetic constructor •() → self::D
     ;
-  method f(dynamic x) → void
+  method f(self::A x) → void
     ;
 }
 class E extends self::D {
diff --git a/pkg/front_end/testcases/override_check_two_substitutions.dart.legacy.expect b/pkg/front_end/testcases/override_check_two_substitutions.dart.legacy.expect
index dd0c4d5..05d92ea 100644
--- a/pkg/front_end/testcases/override_check_two_substitutions.dart.legacy.expect
+++ b/pkg/front_end/testcases/override_check_two_substitutions.dart.legacy.expect
@@ -12,6 +12,6 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  method f<V extends core::Object = dynamic>(core::Map<core::String, self::B::f::V> m) → void {}
+  method f<V extends core::Object = dynamic>(generic-covariant-impl core::Map<core::String, self::B::f::V> m) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_two_substitutions.dart.legacy.transformed.expect b/pkg/front_end/testcases/override_check_two_substitutions.dart.legacy.transformed.expect
index dd0c4d5..05d92ea 100644
--- a/pkg/front_end/testcases/override_check_two_substitutions.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/override_check_two_substitutions.dart.legacy.transformed.expect
@@ -12,6 +12,6 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  method f<V extends core::Object = dynamic>(core::Map<core::String, self::B::f::V> m) → void {}
+  method f<V extends core::Object = dynamic>(generic-covariant-impl core::Map<core::String, self::B::f::V> m) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_two_substitutions.dart.outline.expect b/pkg/front_end/testcases/override_check_two_substitutions.dart.outline.expect
index e836ac4..713595c 100644
--- a/pkg/front_end/testcases/override_check_two_substitutions.dart.outline.expect
+++ b/pkg/front_end/testcases/override_check_two_substitutions.dart.outline.expect
@@ -11,7 +11,7 @@
 class B extends self::A<core::String> {
   synthetic constructor •() → self::B
     ;
-  method f<V extends core::Object = dynamic>(core::Map<core::String, self::B::f::V> m) → void
+  method f<V extends core::Object = dynamic>(generic-covariant-impl core::Map<core::String, self::B::f::V> m) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.legacy.expect b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.legacy.expect
index bd8f94e..30f268c 100644
--- a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.legacy.expect
+++ b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.legacy.expect
@@ -27,7 +27,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f1(self::B x) → void {}
+  method f1(covariant self::B x) → void {}
   method f2(covariant self::B x) → void {}
   method f3(covariant self::B x) → void {}
   method f4(self::B x) → void {}
diff --git a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.legacy.transformed.expect b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.legacy.transformed.expect
index bd8f94e..30f268c 100644
--- a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.legacy.transformed.expect
@@ -27,7 +27,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f1(self::B x) → void {}
+  method f1(covariant self::B x) → void {}
   method f2(covariant self::B x) → void {}
   method f3(covariant self::B x) → void {}
   method f4(self::B x) → void {}
diff --git a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.outline.expect b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.outline.expect
index 2d4aa32..5ff196d 100644
--- a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.outline.expect
+++ b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.outline.expect
@@ -29,7 +29,7 @@
 class D extends self::C {
   synthetic constructor •() → self::D
     ;
-  method f1(self::B x) → void
+  method f1(covariant self::B x) → void
     ;
   method f2(covariant self::B x) → void
     ;
diff --git a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.legacy.expect b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.legacy.expect
index 5a47079..ad364e1 100644
--- a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.legacy.expect
+++ b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.legacy.expect
@@ -15,7 +15,7 @@
   C() : field = null;
         ^^^^^"
     ;
-  set field(dynamic value) → dynamic {}
+  set field(dynamic value) → void {}
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.legacy.transformed.expect b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.legacy.transformed.expect
index 5a47079..ad364e1 100644
--- a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.legacy.transformed.expect
@@ -15,7 +15,7 @@
   C() : field = null;
         ^^^^^"
     ;
-  set field(dynamic value) → dynamic {}
+  set field(dynamic value) → void {}
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.outline.expect b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.outline.expect
index 97d6cdd..1f58e29 100644
--- a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.outline.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   constructor •() → self::C
     ;
-  set field(dynamic value) → dynamic
+  set field(dynamic value) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000025.dart.legacy.expect b/pkg/front_end/testcases/rasta/issue_000025.dart.legacy.expect
index 5fabc15..3be7ccc 100644
--- a/pkg/front_end/testcases/rasta/issue_000025.dart.legacy.expect
+++ b/pkg/front_end/testcases/rasta/issue_000025.dart.legacy.expect
@@ -4,7 +4,7 @@
 
 static get x() → dynamic
   return 42;
-static set x(dynamic val) → dynamic {}
+static set x(dynamic val) → void {}
 static method main() → dynamic {
   core::print(self::x);
   core::print(self::x = 87);
diff --git a/pkg/front_end/testcases/rasta/issue_000025.dart.legacy.transformed.expect b/pkg/front_end/testcases/rasta/issue_000025.dart.legacy.transformed.expect
index 5fabc15..3be7ccc 100644
--- a/pkg/front_end/testcases/rasta/issue_000025.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000025.dart.legacy.transformed.expect
@@ -4,7 +4,7 @@
 
 static get x() → dynamic
   return 42;
-static set x(dynamic val) → dynamic {}
+static set x(dynamic val) → void {}
 static method main() → dynamic {
   core::print(self::x);
   core::print(self::x = 87);
diff --git a/pkg/front_end/testcases/rasta/issue_000025.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000025.dart.outline.expect
index aab1950..8ee979d 100644
--- a/pkg/front_end/testcases/rasta/issue_000025.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000025.dart.outline.expect
@@ -3,7 +3,7 @@
 
 static get x() → dynamic
   ;
-static set x(dynamic val) → dynamic
+static set x(dynamic val) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/issue_000053.dart.legacy.expect b/pkg/front_end/testcases/rasta/issue_000053.dart.legacy.expect
index 230c10b..4dbd973 100644
--- a/pkg/front_end/testcases/rasta/issue_000053.dart.legacy.expect
+++ b/pkg/front_end/testcases/rasta/issue_000053.dart.legacy.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator ==(dynamic other) → dynamic
+  operator ==(dynamic other) → core::bool
     return throw "x";
   method test() → dynamic {
     super.{core::Object::==}(null);
diff --git a/pkg/front_end/testcases/rasta/issue_000053.dart.legacy.transformed.expect b/pkg/front_end/testcases/rasta/issue_000053.dart.legacy.transformed.expect
index 230c10b..4dbd973 100644
--- a/pkg/front_end/testcases/rasta/issue_000053.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000053.dart.legacy.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator ==(dynamic other) → dynamic
+  operator ==(dynamic other) → core::bool
     return throw "x";
   method test() → dynamic {
     super.{core::Object::==}(null);
diff --git a/pkg/front_end/testcases/rasta/issue_000053.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000053.dart.outline.expect
index bc032b0..f3f1fd5 100644
--- a/pkg/front_end/testcases/rasta/issue_000053.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000053.dart.outline.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   synthetic constructor •() → self::C
     ;
-  operator ==(dynamic other) → dynamic
+  operator ==(dynamic other) → core::bool
     ;
   method test() → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000081.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000081.dart.outline.expect
index cb7bd6b..b12559d 100644
--- a/pkg/front_end/testcases/rasta/issue_000081.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000081.dart.outline.expect
@@ -11,7 +11,7 @@
   field core::int _hashCode;
   synthetic constructor •() → self::Sub
     ;
-  get hashCode() → dynamic
+  get hashCode() → core::int
     ;
   method foo() → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/native_is_illegal.dart.outline.expect b/pkg/front_end/testcases/rasta/native_is_illegal.dart.outline.expect
index a7ea25b..fc3831b 100644
--- a/pkg/front_end/testcases/rasta/native_is_illegal.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/native_is_illegal.dart.outline.expect
@@ -5,7 +5,7 @@
 class Bar extends core::Object {
   get x() → self::Bar
     ;
-  set x(self::Bar value) → dynamic
+  set x(self::Bar value) → void
     ;
   method f() → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/static.dart.legacy.expect b/pkg/front_end/testcases/rasta/static.dart.legacy.expect
index 70d0f8c..b9c1b3e 100644
--- a/pkg/front_end/testcases/rasta/static.dart.legacy.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.legacy.expect
@@ -150,7 +150,7 @@
   static method staticFunction() → dynamic {}
   static get staticGetter() → dynamic
     return null;
-  static set staticSetter(dynamic _) → dynamic {}
+  static set staticSetter(dynamic _) → void {}
 }
 static method use(dynamic x) → dynamic {
   if(x.==(new core::DateTime::now().millisecondsSinceEpoch))
diff --git a/pkg/front_end/testcases/rasta/static.dart.legacy.transformed.expect b/pkg/front_end/testcases/rasta/static.dart.legacy.transformed.expect
index 70d0f8c..b9c1b3e 100644
--- a/pkg/front_end/testcases/rasta/static.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.legacy.transformed.expect
@@ -150,7 +150,7 @@
   static method staticFunction() → dynamic {}
   static get staticGetter() → dynamic
     return null;
-  static set staticSetter(dynamic _) → dynamic {}
+  static set staticSetter(dynamic _) → void {}
 }
 static method use(dynamic x) → dynamic {
   if(x.==(new core::DateTime::now().millisecondsSinceEpoch))
diff --git a/pkg/front_end/testcases/rasta/static.dart.outline.expect b/pkg/front_end/testcases/rasta/static.dart.outline.expect
index f9b177a..2e9d362 100644
--- a/pkg/front_end/testcases/rasta/static.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.outline.expect
@@ -11,7 +11,7 @@
     ;
   static get staticGetter() → dynamic
     ;
-  static set staticSetter(dynamic _) → dynamic
+  static set staticSetter(dynamic _) → void
     ;
 }
 static method use(dynamic x) → dynamic
diff --git a/pkg/front_end/testcases/rasta/super.dart.legacy.expect b/pkg/front_end/testcases/rasta/super.dart.legacy.expect
index 55dfd57..dbd7908 100644
--- a/pkg/front_end/testcases/rasta/super.dart.legacy.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.legacy.expect
@@ -253,24 +253,24 @@
     ;
   get e() → dynamic
     return null;
-  set g(dynamic _) → dynamic {}
+  set g(dynamic _) → void {}
   get h() → dynamic
     return null;
-  set h(dynamic _) → dynamic {}
+  set h(dynamic _) → void {}
   get i() → dynamic
     return null;
   operator [](dynamic _) → dynamic
     return null;
-  operator []=(dynamic a, dynamic b) → dynamic {}
+  operator []=(dynamic a, dynamic b) → void {}
   operator ~() → dynamic
     return 117;
   operator unary-() → dynamic
     return 117;
-  operator ==(dynamic other) → dynamic
+  operator ==(dynamic other) → core::bool
     return true;
   method m() → void {}
   method n() → void {}
-  set n(dynamic _) → dynamic {}
+  set n(dynamic _) → void {}
 }
 class B extends self::A {
   final field dynamic d = null;
@@ -279,8 +279,8 @@
     ;
   get b() → dynamic
     return null;
-  set c(dynamic x) → dynamic {}
-  set i(dynamic x) → dynamic {}
+  set c(dynamic x) → void {}
+  set i(dynamic x) → void {}
 }
 class C extends self::B {
   synthetic constructor •() → self::C
diff --git a/pkg/front_end/testcases/rasta/super.dart.legacy.transformed.expect b/pkg/front_end/testcases/rasta/super.dart.legacy.transformed.expect
index 55dfd57..dbd7908 100644
--- a/pkg/front_end/testcases/rasta/super.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.legacy.transformed.expect
@@ -253,24 +253,24 @@
     ;
   get e() → dynamic
     return null;
-  set g(dynamic _) → dynamic {}
+  set g(dynamic _) → void {}
   get h() → dynamic
     return null;
-  set h(dynamic _) → dynamic {}
+  set h(dynamic _) → void {}
   get i() → dynamic
     return null;
   operator [](dynamic _) → dynamic
     return null;
-  operator []=(dynamic a, dynamic b) → dynamic {}
+  operator []=(dynamic a, dynamic b) → void {}
   operator ~() → dynamic
     return 117;
   operator unary-() → dynamic
     return 117;
-  operator ==(dynamic other) → dynamic
+  operator ==(dynamic other) → core::bool
     return true;
   method m() → void {}
   method n() → void {}
-  set n(dynamic _) → dynamic {}
+  set n(dynamic _) → void {}
 }
 class B extends self::A {
   final field dynamic d = null;
@@ -279,8 +279,8 @@
     ;
   get b() → dynamic
     return null;
-  set c(dynamic x) → dynamic {}
-  set i(dynamic x) → dynamic {}
+  set c(dynamic x) → void {}
+  set i(dynamic x) → void {}
 }
 class C extends self::B {
   synthetic constructor •() → self::C
diff --git a/pkg/front_end/testcases/rasta/super.dart.outline.expect b/pkg/front_end/testcases/rasta/super.dart.outline.expect
index d668783..9b0da41 100644
--- a/pkg/front_end/testcases/rasta/super.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.outline.expect
@@ -22,29 +22,29 @@
     ;
   get e() → dynamic
     ;
-  set g(dynamic _) → dynamic
+  set g(dynamic _) → void
     ;
   get h() → dynamic
     ;
-  set h(dynamic _) → dynamic
+  set h(dynamic _) → void
     ;
   get i() → dynamic
     ;
   operator [](dynamic _) → dynamic
     ;
-  operator []=(dynamic a, dynamic b) → dynamic
+  operator []=(dynamic a, dynamic b) → void
     ;
   operator ~() → dynamic
     ;
   operator unary-() → dynamic
     ;
-  operator ==(dynamic other) → dynamic
+  operator ==(dynamic other) → core::bool
     ;
   method m() → void
     ;
   method n() → void
     ;
-  set n(dynamic _) → dynamic
+  set n(dynamic _) → void
     ;
 }
 class B extends self::A {
@@ -53,9 +53,9 @@
     ;
   get b() → dynamic
     ;
-  set c(dynamic x) → dynamic
+  set c(dynamic x) → void
     ;
-  set i(dynamic x) → dynamic
+  set i(dynamic x) → void
     ;
 }
 class C extends self::B {
diff --git a/pkg/front_end/testcases/rasta/super_operator.dart.outline.expect b/pkg/front_end/testcases/rasta/super_operator.dart.outline.expect
index d0ecc4d..01e59ad 100644
--- a/pkg/front_end/testcases/rasta/super_operator.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/super_operator.dart.outline.expect
@@ -9,7 +9,7 @@
     ;
   operator [](dynamic i) → dynamic
     ;
-  operator []=(dynamic i, dynamic val) → dynamic
+  operator []=(dynamic i, dynamic val) → void
     ;
 }
 class B extends self::A {
@@ -19,7 +19,7 @@
     ;
   operator [](dynamic i) → dynamic
     ;
-  operator []=(dynamic i, dynamic val) → dynamic
+  operator []=(dynamic i, dynamic val) → void
     ;
 }
 class Autobianchi extends core::Object {
diff --git a/pkg/front_end/testcases/redirection_chain_type_arguments.dart.legacy.expect b/pkg/front_end/testcases/redirection_chain_type_arguments.dart.legacy.expect
index bba4f23..32a5b17 100644
--- a/pkg/front_end/testcases/redirection_chain_type_arguments.dart.legacy.expect
+++ b/pkg/front_end/testcases/redirection_chain_type_arguments.dart.legacy.expect
@@ -25,7 +25,7 @@
   constructor •() → self::C<self::C::V, self::C::S, self::C::R>
     : super self::B::empty()
     ;
-  method toString() → dynamic
+  method toString() → core::String
     return "${self::C::V},${self::C::S},${self::C::R}";
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/redirection_chain_type_arguments.dart.legacy.transformed.expect b/pkg/front_end/testcases/redirection_chain_type_arguments.dart.legacy.transformed.expect
index bba4f23..32a5b17 100644
--- a/pkg/front_end/testcases/redirection_chain_type_arguments.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/redirection_chain_type_arguments.dart.legacy.transformed.expect
@@ -25,7 +25,7 @@
   constructor •() → self::C<self::C::V, self::C::S, self::C::R>
     : super self::B::empty()
     ;
-  method toString() → dynamic
+  method toString() → core::String
     return "${self::C::V},${self::C::S},${self::C::R}";
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/redirection_chain_type_arguments.dart.outline.expect b/pkg/front_end/testcases/redirection_chain_type_arguments.dart.outline.expect
index 3b0ee19..d4a0e63 100644
--- a/pkg/front_end/testcases/redirection_chain_type_arguments.dart.outline.expect
+++ b/pkg/front_end/testcases/redirection_chain_type_arguments.dart.outline.expect
@@ -21,7 +21,7 @@
 class C<V extends core::Object = dynamic, S extends core::Object = dynamic, R extends core::Object = dynamic> extends self::B<self::C::V, self::C::S> {
   constructor •() → self::C<self::C::V, self::C::S, self::C::R>
     ;
-  method toString() → dynamic
+  method toString() → core::String
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.legacy.expect b/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.legacy.expect
index cee4e10..09e1d27 100644
--- a/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.legacy.expect
+++ b/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.legacy.expect
@@ -25,7 +25,7 @@
   constructor •() → self::C<self::C::V, self::C::S, self::C::R>
     : super self::B::empty()
     ;
-  method toString() → dynamic
+  method toString() → core::String
     return "${self::C::V},${self::C::S},${self::C::R}";
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.legacy.transformed.expect b/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.legacy.transformed.expect
index cee4e10..09e1d27 100644
--- a/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.legacy.transformed.expect
@@ -25,7 +25,7 @@
   constructor •() → self::C<self::C::V, self::C::S, self::C::R>
     : super self::B::empty()
     ;
-  method toString() → dynamic
+  method toString() → core::String
     return "${self::C::V},${self::C::S},${self::C::R}";
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.outline.expect b/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.outline.expect
index 2b481ac..f9db296 100644
--- a/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.outline.expect
+++ b/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.outline.expect
@@ -21,7 +21,7 @@
 class C<V extends core::Object = dynamic, S extends core::Object = dynamic, R extends core::Object = dynamic> extends self::B<self::C::V, self::C::S> {
   constructor •() → self::C<self::C::V, self::C::S, self::C::R>
     ;
-  method toString() → dynamic
+  method toString() → core::String
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/redirection_type_arguments.dart.legacy.expect b/pkg/front_end/testcases/redirection_type_arguments.dart.legacy.expect
index 2fff34d..0dc1e9e 100644
--- a/pkg/front_end/testcases/redirection_type_arguments.dart.legacy.expect
+++ b/pkg/front_end/testcases/redirection_type_arguments.dart.legacy.expect
@@ -17,7 +17,7 @@
   const constructor •() → self::B<self::B::T>
     : super self::A::empty()
     ;
-  method toString() → dynamic
+  method toString() → core::String
     return "${self::B::T}";
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/redirection_type_arguments.dart.legacy.transformed.expect b/pkg/front_end/testcases/redirection_type_arguments.dart.legacy.transformed.expect
index 2fff34d..0dc1e9e 100644
--- a/pkg/front_end/testcases/redirection_type_arguments.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/redirection_type_arguments.dart.legacy.transformed.expect
@@ -17,7 +17,7 @@
   const constructor •() → self::B<self::B::T>
     : super self::A::empty()
     ;
-  method toString() → dynamic
+  method toString() → core::String
     return "${self::B::T}";
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/redirection_type_arguments.dart.outline.expect b/pkg/front_end/testcases/redirection_type_arguments.dart.outline.expect
index 4e65df8..0fcea3e 100644
--- a/pkg/front_end/testcases/redirection_type_arguments.dart.outline.expect
+++ b/pkg/front_end/testcases/redirection_type_arguments.dart.outline.expect
@@ -14,7 +14,7 @@
 class B<T extends core::Object = dynamic> extends self::A {
   const constructor •() → self::B<self::B::T>
     ;
-  method toString() → dynamic
+  method toString() → core::String
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.legacy.expect b/pkg/front_end/testcases/regress/issue_30834.dart.legacy.expect
index d90c580..2f3e686 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.legacy.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.legacy.expect
@@ -13,7 +13,7 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  set A(dynamic v) → dynamic {}
+  set A(dynamic v) → void {}
 }
 static method main() → dynamic {
   dynamic a = new self::A::•();
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.legacy.transformed.expect b/pkg/front_end/testcases/regress/issue_30834.dart.legacy.transformed.expect
index d90c580..2f3e686 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.legacy.transformed.expect
@@ -13,7 +13,7 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  set A(dynamic v) → dynamic {}
+  set A(dynamic v) → void {}
 }
 static method main() → dynamic {
   dynamic a = new self::A::•();
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.outline.expect b/pkg/front_end/testcases/regress/issue_30834.dart.outline.expect
index b7a0c48..f48580b 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.outline.expect
@@ -12,7 +12,7 @@
 class A extends core::Object {
   synthetic constructor •() → self::A
     ;
-  set A(dynamic v) → dynamic
+  set A(dynamic v) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.hierarchy.expect b/pkg/front_end/testcases/regress/issue_32660.dart.hierarchy.expect
index 5c7b6fa..3cbcc36 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.hierarchy.expect
@@ -77,7 +77,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    A.foo
+    C.A.foo%B.foo
     C.noSuchMethod
     Object._identityHashCode
     Object.hashCode
@@ -114,7 +114,7 @@
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
-    D.foo
+    E.D.foo%E.foo
     E.noSuchMethod
     Object._identityHashCode
     Object.hashCode
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.legacy.expect b/pkg/front_end/testcases/regress/issue_32660.dart.legacy.expect
index 46f8dc2..e4d64d6 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.legacy.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.legacy.expect
@@ -1,4 +1,27 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_32660.dart:21:3: Warning: The method 'D.foo' has fewer named arguments than those of overridden method 'E.foo'.
+//   foo(int x) => x;
+//   ^
+// pkg/front_end/testcases/regress/issue_32660.dart:25:3: Context: This is the overridden method ('foo').
+//   foo(int x, {int y});
+//   ^
+// pkg/front_end/testcases/regress/issue_32660.dart:24:7: Context: Both members are inherited by the non-abstract class 'E'.
+// class E extends D {
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_32660.dart:6:3: Warning: The method 'A.foo' has fewer named arguments than those of overridden method 'B.foo'.
+//   foo(int x) => x;
+//   ^
+// pkg/front_end/testcases/regress/issue_32660.dart:10:3: Context: This is the overridden method ('foo').
+//   foo(int x, {int y}) => y;
+//   ^
+// pkg/front_end/testcases/regress/issue_32660.dart:13:7: Context: Both members are inherited by the non-abstract class 'C'.
+// class C extends A implements B {
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -20,10 +43,11 @@
   synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  method noSuchMethod(dynamic i) → dynamic {
+  method noSuchMethod(core::Invocation i) → dynamic {
     core::print("No such method!");
     return 42;
   }
+  abstract forwarding-stub method foo(core::int x, {core::int y = null}) → dynamic;
 }
 class D extends core::Object {
   synthetic constructor •() → self::D
@@ -37,7 +61,7 @@
     : super self::D::•()
     ;
   abstract method foo(core::int x, {core::int y = null}) → dynamic;
-  method noSuchMethod(dynamic i) → dynamic {
+  method noSuchMethod(core::Invocation i) → dynamic {
     core::print(i.namedArguments);
     return 42;
   }
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.legacy.transformed.expect b/pkg/front_end/testcases/regress/issue_32660.dart.legacy.transformed.expect
index 46f8dc2..e4d64d6 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.legacy.transformed.expect
@@ -1,4 +1,27 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_32660.dart:21:3: Warning: The method 'D.foo' has fewer named arguments than those of overridden method 'E.foo'.
+//   foo(int x) => x;
+//   ^
+// pkg/front_end/testcases/regress/issue_32660.dart:25:3: Context: This is the overridden method ('foo').
+//   foo(int x, {int y});
+//   ^
+// pkg/front_end/testcases/regress/issue_32660.dart:24:7: Context: Both members are inherited by the non-abstract class 'E'.
+// class E extends D {
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_32660.dart:6:3: Warning: The method 'A.foo' has fewer named arguments than those of overridden method 'B.foo'.
+//   foo(int x) => x;
+//   ^
+// pkg/front_end/testcases/regress/issue_32660.dart:10:3: Context: This is the overridden method ('foo').
+//   foo(int x, {int y}) => y;
+//   ^
+// pkg/front_end/testcases/regress/issue_32660.dart:13:7: Context: Both members are inherited by the non-abstract class 'C'.
+// class C extends A implements B {
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -20,10 +43,11 @@
   synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  method noSuchMethod(dynamic i) → dynamic {
+  method noSuchMethod(core::Invocation i) → dynamic {
     core::print("No such method!");
     return 42;
   }
+  abstract forwarding-stub method foo(core::int x, {core::int y = null}) → dynamic;
 }
 class D extends core::Object {
   synthetic constructor •() → self::D
@@ -37,7 +61,7 @@
     : super self::D::•()
     ;
   abstract method foo(core::int x, {core::int y = null}) → dynamic;
-  method noSuchMethod(dynamic i) → dynamic {
+  method noSuchMethod(core::Invocation i) → dynamic {
     core::print(i.namedArguments);
     return 42;
   }
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect b/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect
index 9dc571a..7b9f48b 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect
@@ -1,4 +1,27 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_32660.dart:21:3: Warning: The method 'D.foo' has fewer named arguments than those of overridden method 'E.foo'.
+//   foo(int x) => x;
+//   ^
+// pkg/front_end/testcases/regress/issue_32660.dart:25:3: Context: This is the overridden method ('foo').
+//   foo(int x, {int y});
+//   ^
+// pkg/front_end/testcases/regress/issue_32660.dart:24:7: Context: Both members are inherited by the non-abstract class 'E'.
+// class E extends D {
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_32660.dart:6:3: Warning: The method 'A.foo' has fewer named arguments than those of overridden method 'B.foo'.
+//   foo(int x) => x;
+//   ^
+// pkg/front_end/testcases/regress/issue_32660.dart:10:3: Context: This is the overridden method ('foo').
+//   foo(int x, {int y}) => y;
+//   ^
+// pkg/front_end/testcases/regress/issue_32660.dart:13:7: Context: Both members are inherited by the non-abstract class 'C'.
+// class C extends A implements B {
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -17,8 +40,9 @@
 class C extends self::A implements self::B {
   synthetic constructor •() → self::C
     ;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     ;
+  abstract forwarding-stub method foo(core::int x, {core::int y}) → dynamic;
 }
 class D extends core::Object {
   synthetic constructor •() → self::D
@@ -30,7 +54,7 @@
   synthetic constructor •() → self::E
     ;
   abstract method foo(core::int x, {core::int y}) → dynamic;
-  method noSuchMethod(dynamic i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect b/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect
index 910fc65..73b1b6a 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect
@@ -2,16 +2,6 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_32660.dart:6:3: Error: The method 'A.foo' has fewer named arguments than those of overridden method 'B.foo'.
-//   foo(int x) => x;
-//   ^
-// pkg/front_end/testcases/regress/issue_32660.dart:10:3: Context: This is the overridden method ('foo').
-//   foo(int x, {int y}) => y;
-//   ^
-// pkg/front_end/testcases/regress/issue_32660.dart:13:7: Context: Both members are inherited by the non-abstract class 'C'.
-// class C extends A implements B {
-//       ^
-//
 // pkg/front_end/testcases/regress/issue_32660.dart:21:3: Error: The method 'D.foo' has fewer named arguments than those of overridden method 'E.foo'.
 //   foo(int x) => x;
 //   ^
@@ -22,6 +12,16 @@
 // class E extends D {
 //       ^
 //
+// pkg/front_end/testcases/regress/issue_32660.dart:6:3: Error: The method 'A.foo' has fewer named arguments than those of overridden method 'B.foo'.
+//   foo(int x) => x;
+//   ^
+// pkg/front_end/testcases/regress/issue_32660.dart:10:3: Context: This is the overridden method ('foo').
+//   foo(int x, {int y}) => y;
+//   ^
+// pkg/front_end/testcases/regress/issue_32660.dart:13:7: Context: Both members are inherited by the non-abstract class 'C'.
+// class C extends A implements B {
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_32660.dart.strong.transformed.expect
index 910fc65..73b1b6a 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.strong.transformed.expect
@@ -2,16 +2,6 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_32660.dart:6:3: Error: The method 'A.foo' has fewer named arguments than those of overridden method 'B.foo'.
-//   foo(int x) => x;
-//   ^
-// pkg/front_end/testcases/regress/issue_32660.dart:10:3: Context: This is the overridden method ('foo').
-//   foo(int x, {int y}) => y;
-//   ^
-// pkg/front_end/testcases/regress/issue_32660.dart:13:7: Context: Both members are inherited by the non-abstract class 'C'.
-// class C extends A implements B {
-//       ^
-//
 // pkg/front_end/testcases/regress/issue_32660.dart:21:3: Error: The method 'D.foo' has fewer named arguments than those of overridden method 'E.foo'.
 //   foo(int x) => x;
 //   ^
@@ -22,6 +12,16 @@
 // class E extends D {
 //       ^
 //
+// pkg/front_end/testcases/regress/issue_32660.dart:6:3: Error: The method 'A.foo' has fewer named arguments than those of overridden method 'B.foo'.
+//   foo(int x) => x;
+//   ^
+// pkg/front_end/testcases/regress/issue_32660.dart:10:3: Context: This is the overridden method ('foo').
+//   foo(int x, {int y}) => y;
+//   ^
+// pkg/front_end/testcases/regress/issue_32660.dart:13:7: Context: Both members are inherited by the non-abstract class 'C'.
+// class C extends A implements B {
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.legacy.expect b/pkg/front_end/testcases/regress/issue_34225.dart.legacy.expect
index 24e8a2a..1b764c6 100644
--- a/pkg/front_end/testcases/regress/issue_34225.dart.legacy.expect
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.legacy.expect
@@ -17,13 +17,13 @@
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static set C(dynamic v) → dynamic {}
+  static set C(dynamic v) → void {}
 }
 class D extends core::Object {
   synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  set D(dynamic v) → dynamic {}
+  set D(dynamic v) → void {}
 }
 static method main() → dynamic {
   dynamic c = new self::C::•();
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.legacy.transformed.expect b/pkg/front_end/testcases/regress/issue_34225.dart.legacy.transformed.expect
index 24e8a2a..1b764c6 100644
--- a/pkg/front_end/testcases/regress/issue_34225.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.legacy.transformed.expect
@@ -17,13 +17,13 @@
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static set C(dynamic v) → dynamic {}
+  static set C(dynamic v) → void {}
 }
 class D extends core::Object {
   synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  set D(dynamic v) → dynamic {}
+  set D(dynamic v) → void {}
 }
 static method main() → dynamic {
   dynamic c = new self::C::•();
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.outline.expect b/pkg/front_end/testcases/regress/issue_34225.dart.outline.expect
index 4582fae..5cfdb48 100644
--- a/pkg/front_end/testcases/regress/issue_34225.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.outline.expect
@@ -16,13 +16,13 @@
 class C extends core::Object {
   synthetic constructor •() → self::C
     ;
-  static set C(dynamic v) → dynamic
+  static set C(dynamic v) → void
     ;
 }
 class D extends core::Object {
   synthetic constructor •() → self::D
     ;
-  set D(dynamic v) → dynamic
+  set D(dynamic v) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.legacy.expect
index 96700b1..2092b43 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.legacy.expect
@@ -13,15 +13,15 @@
   synthetic constructor •() → self::C<self::C::U>
     : super core::Object::•()
     ;
-  method f1(core::int x) → void {}
-  method f2(core::int x, [generic-covariant-impl self::C::U y = null]) → void {}
+  method f1(generic-covariant-impl core::int x) → void {}
+  method f2(generic-covariant-impl core::int x, [generic-covariant-impl self::C::U y = null]) → void {}
 }
 class D<U extends core::Object = dynamic> extends self::C<self::D::U> {
   synthetic constructor •() → self::D<self::D::U>
     : super self::C::•()
     ;
-  method f1(core::int x) → void {}
-  method f2(core::int x, [generic-covariant-impl self::D::U y = null]) → void {}
+  method f1(generic-covariant-impl core::int x) → void {}
+  method f2(generic-covariant-impl core::int x, [generic-covariant-impl self::D::U y = null]) → void {}
 }
 static method g1(self::C<core::num> c) → void {
   c.f1(1);
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.legacy.transformed.expect
index 96700b1..2092b43 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.legacy.transformed.expect
@@ -13,15 +13,15 @@
   synthetic constructor •() → self::C<self::C::U>
     : super core::Object::•()
     ;
-  method f1(core::int x) → void {}
-  method f2(core::int x, [generic-covariant-impl self::C::U y = null]) → void {}
+  method f1(generic-covariant-impl core::int x) → void {}
+  method f2(generic-covariant-impl core::int x, [generic-covariant-impl self::C::U y = null]) → void {}
 }
 class D<U extends core::Object = dynamic> extends self::C<self::D::U> {
   synthetic constructor •() → self::D<self::D::U>
     : super self::C::•()
     ;
-  method f1(core::int x) → void {}
-  method f2(core::int x, [generic-covariant-impl self::D::U y = null]) → void {}
+  method f1(generic-covariant-impl core::int x) → void {}
+  method f2(generic-covariant-impl core::int x, [generic-covariant-impl self::D::U y = null]) → void {}
 }
 static method g1(self::C<core::num> c) → void {
   c.f1(1);
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.outline.expect
index fe2f698..9779f69 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.outline.expect
@@ -11,17 +11,17 @@
 class C<U extends core::Object = dynamic> extends core::Object implements self::I<core::int> {
   synthetic constructor •() → self::C<self::C::U>
     ;
-  method f1(core::int x) → void
+  method f1(generic-covariant-impl core::int x) → void
     ;
-  method f2(core::int x, [generic-covariant-impl self::C::U y]) → void
+  method f2(generic-covariant-impl core::int x, [generic-covariant-impl self::C::U y]) → void
     ;
 }
 class D<U extends core::Object = dynamic> extends self::C<self::D::U> {
   synthetic constructor •() → self::D<self::D::U>
     ;
-  method f1(core::int x) → void
+  method f1(generic-covariant-impl core::int x) → void
     ;
-  method f2(core::int x, [generic-covariant-impl self::D::U y]) → void
+  method f2(generic-covariant-impl core::int x, [generic-covariant-impl self::D::U y]) → void
     ;
 }
 static method g1(self::C<core::num> c) → void
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.hierarchy.expect
index 6ad21c9..eee2991 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.hierarchy.expect
@@ -91,7 +91,7 @@
     Object.==
   classSetters:
   interfaceMembers:
-    M.f
+    C.M.f%I.f
     Object.toString
     Object.runtimeType
     Object._simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.legacy.expect
index 144807a..226d14a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.legacy.expect
@@ -24,6 +24,8 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  forwarding-stub method f(generic-covariant-impl core::int x) → void
+    return super.{self::B::f}(x);
 }
 static method g1(self::C c) → void {
   c.f(1);
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.legacy.transformed.expect
index 20d3a2e..9af26fa 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.legacy.transformed.expect
@@ -24,7 +24,7 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  method f(core::int x) → void {}
+  method f(generic-covariant-impl core::int x) → void {}
 }
 static method g1(self::C c) → void {
   c.f(1);
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.outline.expect
index 10f6ea9..db72bce 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.outline.expect
@@ -23,6 +23,8 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  forwarding-stub method f(generic-covariant-impl core::int x) → void
+    return super.{self::B::f}(x);
 }
 static method g1(self::C c) → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.hierarchy.expect
index c6a5468..66e9deb 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.hierarchy.expect
@@ -73,7 +73,7 @@
     Object.==
   classSetters:
   interfaceMembers:
-    B.f
+    C.B.f%I.f
     Object.toString
     Object.runtimeType
     Object._simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.legacy.expect
index ca44867..dd05793 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.legacy.expect
@@ -18,6 +18,8 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  forwarding-stub method f(generic-covariant-impl core::int x) → void
+    return super.{self::B::f}(x);
 }
 static method g1(self::C c) → void {
   c.f(1);
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.legacy.transformed.expect
index ca44867..dd05793 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.legacy.transformed.expect
@@ -18,6 +18,8 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  forwarding-stub method f(generic-covariant-impl core::int x) → void
+    return super.{self::B::f}(x);
 }
 static method g1(self::C c) → void {
   c.f(1);
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.outline.expect
index ee14e2c..bd1c5ab 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.outline.expect
@@ -16,6 +16,8 @@
 class C extends self::B implements self::I<core::int> {
   synthetic constructor •() → self::C
     ;
+  forwarding-stub method f(generic-covariant-impl core::int x) → void
+    return super.{self::B::f}(x);
 }
 static method g1(self::C c) → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.hierarchy.expect
index 3b034c6..63ed69c 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.hierarchy.expect
@@ -90,7 +90,7 @@
     Object.==
   classSetters:
   interfaceMembers:
-    B.f
+    C.B.f%I.f
     Object.toString
     Object.runtimeType
     Object._simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.legacy.expect
index 45abbbf..b31bd2e 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.legacy.expect
@@ -23,6 +23,8 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  forwarding-stub method f(generic-covariant-impl core::int x) → void
+    return super.{self::B::f}(x);
 }
 static method g1(self::C c) → void {
   c.f(1);
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.legacy.transformed.expect
index 0e61a92..1fb19f0 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.legacy.transformed.expect
@@ -23,6 +23,8 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  forwarding-stub method f(generic-covariant-impl core::int x) → void
+    return super.{self::B::f}(x);
 }
 static method g1(self::C c) → void {
   c.f(1);
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.outline.expect
index 926b281..97f802d 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.outline.expect
@@ -21,6 +21,8 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  forwarding-stub method f(generic-covariant-impl core::int x) → void
+    return super.{self::B::f}(x);
 }
 static method g1(self::C c) → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.legacy.expect
index 31aa1f7..9faa7e3 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.legacy.expect
@@ -19,7 +19,7 @@
   synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  method f(core::int x) → void {}
+  method f(covariant core::int x) → void {}
 }
 static method g1(self::C c) → void {
   c.f(1.5);
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.legacy.transformed.expect
index 31aa1f7..9faa7e3 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.legacy.transformed.expect
@@ -19,7 +19,7 @@
   synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  method f(core::int x) → void {}
+  method f(covariant core::int x) → void {}
 }
 static method g1(self::C c) → void {
   c.f(1.5);
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.outline.expect
index 3303a29..dd2a7ad 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.outline.expect
@@ -18,7 +18,7 @@
 class E extends self::D {
   synthetic constructor •() → self::E
     ;
-  method f(core::int x) → void
+  method f(covariant core::int x) → void
     ;
 }
 static method g1(self::C c) → void
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.legacy.expect
index 306dd42..1f3710c 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.legacy.expect
@@ -15,7 +15,7 @@
     ;
 }
 class E extends core::Object implements self::D {
-  field core::int x = null;
+  covariant field core::int x = null;
   synthetic constructor •() → self::E
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.legacy.transformed.expect
index 306dd42..1f3710c 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.legacy.transformed.expect
@@ -15,7 +15,7 @@
     ;
 }
 class E extends core::Object implements self::D {
-  field core::int x = null;
+  covariant field core::int x = null;
   synthetic constructor •() → self::E
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.outline.expect
index 643c93c..063eafe 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.outline.expect
@@ -13,7 +13,7 @@
     ;
 }
 class E extends core::Object implements self::D {
-  field core::int x;
+  covariant field core::int x;
   synthetic constructor •() → self::E
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.legacy.expect
index 4e1a3ad..760a9dc 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.legacy.expect
@@ -20,6 +20,6 @@
     ;
   get x() → core::int
     return 0;
-  set x(core::int value) → void {}
+  set x(covariant core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.legacy.transformed.expect
index 4e1a3ad..760a9dc 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.legacy.transformed.expect
@@ -20,6 +20,6 @@
     ;
   get x() → core::int
     return 0;
-  set x(core::int value) → void {}
+  set x(covariant core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.outline.expect
index 358009c..0bc780e 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.outline.expect
@@ -17,7 +17,7 @@
     ;
   get x() → core::int
     ;
-  set x(core::int value) → void
+  set x(covariant core::int value) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.legacy.expect
index d5f7a72..cc9e3d7 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.legacy.expect
@@ -18,6 +18,6 @@
   synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  set x(core::int value) → void {}
+  set x(covariant core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.legacy.transformed.expect
index d5f7a72..cc9e3d7 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.legacy.transformed.expect
@@ -18,6 +18,6 @@
   synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  set x(core::int value) → void {}
+  set x(covariant core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.outline.expect
index 8f94f9e..840f751 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.outline.expect
@@ -17,7 +17,7 @@
 class E extends self::D {
   synthetic constructor •() → self::E
     ;
-  set x(core::int value) → void
+  set x(covariant core::int value) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.legacy.expect
index 79a95bb..492c9a2 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.legacy.expect
@@ -15,7 +15,7 @@
   set x(covariant core::int value) → void {}
 }
 class E extends core::Object implements self::D {
-  field core::int x = null;
+  covariant field core::int x = null;
   synthetic constructor •() → self::E
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.legacy.transformed.expect
index 79a95bb..492c9a2 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.legacy.transformed.expect
@@ -15,7 +15,7 @@
   set x(covariant core::int value) → void {}
 }
 class E extends core::Object implements self::D {
-  field core::int x = null;
+  covariant field core::int x = null;
   synthetic constructor •() → self::E
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.outline.expect
index 97331e8..809ec55 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.outline.expect
@@ -15,7 +15,7 @@
     ;
 }
 class E extends core::Object implements self::D {
-  field core::int x;
+  covariant field core::int x;
   synthetic constructor •() → self::E
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.legacy.expect
index 2efc919..a6d4f4c 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.legacy.expect
@@ -13,7 +13,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f1(covariant core::int x) → void {}
+  method f1(covariant generic-covariant-impl core::int x) → void {}
 }
 static method g1(dynamic d) → void {
   d.f1(1.5);
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.legacy.transformed.expect
index 2efc919..a6d4f4c 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.legacy.transformed.expect
@@ -13,7 +13,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f1(covariant core::int x) → void {}
+  method f1(covariant generic-covariant-impl core::int x) → void {}
 }
 static method g1(dynamic d) → void {
   d.f1(1.5);
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.outline.expect
index 87b6f89..6d8aa4a 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.outline.expect
@@ -13,7 +13,7 @@
 class D extends self::C<core::num> {
   synthetic constructor •() → self::D
     ;
-  method f1(covariant core::int x) → void
+  method f1(covariant generic-covariant-impl core::int x) → void
     ;
 }
 static method g1(dynamic d) → void
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.hierarchy.expect
index 1153bca..7869c3b 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.hierarchy.expect
@@ -77,7 +77,7 @@
     C.x
   interfaceMembers:
     Object.toString
-    C.x
+    D.C.x%B.x
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
@@ -88,4 +88,4 @@
     Object._simpleInstanceOfTrue
     Object.==
   interfaceSetters:
-    C.x
+    D.C.x%B.x
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.legacy.expect
index 084024b..4a50297 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.legacy.expect
@@ -18,5 +18,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
+  forwarding-stub set x(generic-covariant-impl core::num _) → void
+    return super.{self::C::x} = _;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.legacy.transformed.expect
index 084024b..4a50297 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.legacy.transformed.expect
@@ -18,5 +18,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
+  forwarding-stub set x(generic-covariant-impl core::num _) → void
+    return super.{self::C::x} = _;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.outline.expect
index d696974..8bf7b77 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.outline.expect
@@ -15,6 +15,8 @@
 class D extends self::C implements self::B<core::num> {
   synthetic constructor •() → self::D
     ;
+  forwarding-stub set x(generic-covariant-impl core::num _) → void
+    return super.{self::C::x} = _;
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.hierarchy.expect
index 389c831..8993132 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.hierarchy.expect
@@ -82,7 +82,7 @@
   classSetters:
     B._x
   interfaceMembers:
-    B.f
+    C.B.f%I.f
     Object.toString
     B._x
     Object.runtimeType
@@ -91,7 +91,7 @@
     Object.noSuchMethod
     Object._identityHashCode
     Object.hashCode
-    B.g
+    C.B.g%I.g
     B.check
     Object._simpleInstanceOfFalse
     Object._simpleInstanceOfTrue
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.legacy.expect
index 82a32ab..339d3dc 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.legacy.expect
@@ -30,6 +30,10 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  forwarding-stub method f([generic-covariant-impl core::num x = 10]) → void
+    return super.{self::B::f}(x);
+  forwarding-stub method g({generic-covariant-impl core::num x = 20}) → void
+    return super.{self::B::g}(x: x);
 }
 static method main() → dynamic {
   self::C c = new self::C::•();
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.legacy.transformed.expect
index 82a32ab..339d3dc 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.legacy.transformed.expect
@@ -30,6 +30,10 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  forwarding-stub method f([generic-covariant-impl core::num x = 10]) → void
+    return super.{self::B::f}(x);
+  forwarding-stub method g({generic-covariant-impl core::num x = 20}) → void
+    return super.{self::B::g}(x: x);
 }
 static method main() → dynamic {
   self::C c = new self::C::•();
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.outline.expect
index 5998e7f..d95ebff 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.outline.expect
@@ -22,6 +22,10 @@
 class C extends self::B implements self::I<core::num> {
   synthetic constructor •() → self::C
     ;
+  forwarding-stub method f([generic-covariant-impl core::num x]) → void
+    return super.{self::B::f}(x);
+  forwarding-stub method g({generic-covariant-impl core::num x}) → void
+    return super.{self::B::g}(x: x);
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.hierarchy.expect
index c6a5468..66e9deb 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.hierarchy.expect
@@ -73,7 +73,7 @@
     Object.==
   classSetters:
   interfaceMembers:
-    B.f
+    C.B.f%I.f
     Object.toString
     Object.runtimeType
     Object._simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.legacy.expect
index 5486a15..760fd0e 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.legacy.expect
@@ -18,5 +18,7 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  forwarding-stub method f(generic-covariant-impl core::int x, core::int y) → void
+    return super.{self::B::f}(x, y);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.legacy.transformed.expect
index 5486a15..760fd0e 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.legacy.transformed.expect
@@ -18,5 +18,7 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  forwarding-stub method f(generic-covariant-impl core::int x, core::int y) → void
+    return super.{self::B::f}(x, y);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.outline.expect
index a0b2b04..32a8732 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.outline.expect
@@ -16,6 +16,8 @@
 class C extends self::B implements self::I<core::int> {
   synthetic constructor •() → self::C
     ;
+  forwarding-stub method f(generic-covariant-impl core::int x, core::int y) → void
+    return super.{self::B::f}(x, y);
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.legacy.expect
index 121a90b..add41b9 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.legacy.expect
@@ -10,8 +10,8 @@
   set x(generic-covariant-impl self::C::T t) → void {}
 }
 class D extends core::Object implements self::C<core::num> {
-  field core::num x = null;
-  field core::num y = null;
+  generic-covariant-impl field core::num x = null;
+  generic-covariant-impl field core::num y = null;
   synthetic constructor •() → self::D
     : super core::Object::•()
     ;
@@ -20,9 +20,9 @@
   synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  set x(core::num t) → void {}
+  set x(generic-covariant-impl core::num t) → void {}
   get y() → core::num
     return null;
-  set y(core::num t) → void {}
+  set y(generic-covariant-impl core::num t) → void {}
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.legacy.transformed.expect
index 121a90b..add41b9 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.legacy.transformed.expect
@@ -10,8 +10,8 @@
   set x(generic-covariant-impl self::C::T t) → void {}
 }
 class D extends core::Object implements self::C<core::num> {
-  field core::num x = null;
-  field core::num y = null;
+  generic-covariant-impl field core::num x = null;
+  generic-covariant-impl field core::num y = null;
   synthetic constructor •() → self::D
     : super core::Object::•()
     ;
@@ -20,9 +20,9 @@
   synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  set x(core::num t) → void {}
+  set x(generic-covariant-impl core::num t) → void {}
   get y() → core::num
     return null;
-  set y(core::num t) → void {}
+  set y(generic-covariant-impl core::num t) → void {}
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.outline.expect
index bf98c8f..53b0ab7 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.outline.expect
@@ -10,19 +10,19 @@
     ;
 }
 class D extends core::Object implements self::C<core::num> {
-  field core::num x;
-  field core::num y;
+  generic-covariant-impl field core::num x;
+  generic-covariant-impl field core::num y;
   synthetic constructor •() → self::D
     ;
 }
 class E extends core::Object implements self::C<core::num> {
   synthetic constructor •() → self::E
     ;
-  set x(core::num t) → void
+  set x(generic-covariant-impl core::num t) → void
     ;
   get y() → core::num
     ;
-  set y(core::num t) → void
+  set y(generic-covariant-impl core::num t) → void
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.legacy.expect
index fc559f4..d50d07e 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.legacy.expect
@@ -9,17 +9,17 @@
   abstract set x(covariant core::Object value) → void;
 }
 class B extends core::Object implements self::A {
-  field core::Object x = null;
+  covariant field core::Object x = null;
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method f(covariant core::Object x) → void {}
 }
 class C<T extends core::Object = dynamic> extends core::Object implements self::B {
-  generic-covariant-impl field self::C::T x = null;
+  covariant generic-covariant-impl field self::C::T x = null;
   synthetic constructor •() → self::C<self::C::T>
     : super core::Object::•()
     ;
-  method f(generic-covariant-impl self::C::T x) → void {}
+  method f(covariant generic-covariant-impl self::C::T x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.legacy.transformed.expect
index fc559f4..d50d07e 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.legacy.transformed.expect
@@ -9,17 +9,17 @@
   abstract set x(covariant core::Object value) → void;
 }
 class B extends core::Object implements self::A {
-  field core::Object x = null;
+  covariant field core::Object x = null;
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method f(covariant core::Object x) → void {}
 }
 class C<T extends core::Object = dynamic> extends core::Object implements self::B {
-  generic-covariant-impl field self::C::T x = null;
+  covariant generic-covariant-impl field self::C::T x = null;
   synthetic constructor •() → self::C<self::C::T>
     : super core::Object::•()
     ;
-  method f(generic-covariant-impl self::C::T x) → void {}
+  method f(covariant generic-covariant-impl self::C::T x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.outline.expect
index 4ed0cca..037ffa8 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.outline.expect
@@ -8,17 +8,17 @@
   abstract set x(covariant core::Object value) → void;
 }
 class B extends core::Object implements self::A {
-  field core::Object x;
+  covariant field core::Object x;
   synthetic constructor •() → self::B
     ;
   method f(covariant core::Object x) → void
     ;
 }
 class C<T extends core::Object = dynamic> extends core::Object implements self::B {
-  generic-covariant-impl field self::C::T x;
+  covariant generic-covariant-impl field self::C::T x;
   synthetic constructor •() → self::C<self::C::T>
     ;
-  method f(generic-covariant-impl self::C::T x) → void
+  method f(covariant generic-covariant-impl self::C::T x) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.hierarchy.expect
index c844506..0bd7033 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.hierarchy.expect
@@ -60,7 +60,7 @@
       -> B
   interfaces: I<num>
   classMembers:
-    B.f
+    C.B.f%C.f
     Object.toString
     Object.runtimeType
     Object._simpleInstanceOf
@@ -73,7 +73,7 @@
     Object.==
   classSetters:
   interfaceMembers:
-    B.f
+    C.B.f%C.f
     Object.toString
     Object.runtimeType
     Object._simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.legacy.expect
index 95fdf8b..5862850 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.legacy.expect
@@ -18,6 +18,7 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  abstract method f(core::num x) → void;
+  forwarding-stub forwarding-semi-stub method f(generic-covariant-impl core::num x) → void
+    return super.{self::B::f}(x);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.legacy.transformed.expect
index 95fdf8b..5862850 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.legacy.transformed.expect
@@ -18,6 +18,7 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  abstract method f(core::num x) → void;
+  forwarding-stub forwarding-semi-stub method f(generic-covariant-impl core::num x) → void
+    return super.{self::B::f}(x);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.outline.expect
index 8b7ff11..c8141fe 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.outline.expect
@@ -16,7 +16,8 @@
 class C extends self::B implements self::I<core::num> {
   synthetic constructor •() → self::C
     ;
-  abstract method f(core::num x) → void;
+  forwarding-stub forwarding-semi-stub method f(generic-covariant-impl core::num x) → void
+    return super.{self::B::f}(x);
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.legacy.expect
index f9eaac1..2a7623e 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.legacy.expect
@@ -29,7 +29,7 @@
   synthetic constructor •() → self::E
     : super self::C::•()
     ;
-  method f(covariant core::int x) → void {}
+  method f(covariant generic-covariant-impl core::int x) → void {}
 }
 static method test() → dynamic {
   dynamic x = new self::D::•().g4() as (core::Object) → dynamic;
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.legacy.transformed.expect
index f9eaac1..2a7623e 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.legacy.transformed.expect
@@ -29,7 +29,7 @@
   synthetic constructor •() → self::E
     : super self::C::•()
     ;
-  method f(covariant core::int x) → void {}
+  method f(covariant generic-covariant-impl core::int x) → void {}
 }
 static method test() → dynamic {
   dynamic x = new self::D::•().g4() as (core::Object) → dynamic;
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.outline.expect
index 0c9d1ca..1f6aacf 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.outline.expect
@@ -24,7 +24,7 @@
 class E extends self::C<core::num> {
   synthetic constructor •() → self::E
     ;
-  method f(covariant core::int x) → void
+  method f(covariant generic-covariant-impl core::int x) → void
     ;
 }
 static method test() → dynamic
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.hierarchy.expect
index d6381e8..54bc8ea 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.hierarchy.expect
@@ -77,7 +77,7 @@
     C.x
   interfaceMembers:
     Object.toString
-    C.x
+    D.C.x%B.x
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
@@ -88,4 +88,328 @@
     Object._simpleInstanceOfTrue
     Object.==
   interfaceSetters:
-    C.x
+    D.C.x%B.x
+
+Comparable:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Comparable.compareTo
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+    Comparable.compare
+  classSetters:
+
+num:
+  Longest path to Object: 2
+  superclasses:
+    Object
+  interfaces: Comparable<num>
+  classMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  classSetters:
+  interfaceMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  interfaceSetters:
+
+int:
+  Longest path to Object: 3
+  superclasses:
+    Object
+      -> num
+  interfaces: Comparable<num>
+  classMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  classSetters:
+  interfaceMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  interfaceSetters:
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.legacy.expect
index 3f2338c..eea0f36 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.legacy.expect
@@ -18,5 +18,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
+  forwarding-stub set x(covariant core::num _) → void
+    return super.{self::C::x} = _;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.legacy.transformed.expect
index 3f2338c..eea0f36 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.legacy.transformed.expect
@@ -18,5 +18,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
+  forwarding-stub set x(covariant core::num _) → void
+    return super.{self::C::x} = _;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.outline.expect
index 64163de..d8da134 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.outline.expect
@@ -15,6 +15,8 @@
 class D extends self::C implements self::B {
   synthetic constructor •() → self::D
     ;
+  forwarding-stub set x(covariant core::num _) → void
+    return super.{self::C::x} = _;
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.legacy.expect
index a959413..f6be89d 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.legacy.expect
@@ -10,19 +10,19 @@
     ;
 }
 abstract class C<T extends core::Object = dynamic> extends core::Object implements self::B<core::num> {
-  field dynamic x = null;
+  generic-covariant-impl field core::num x = null;
   synthetic constructor •() → self::C<self::C::T>
     : super core::Object::•()
     ;
-  abstract get y() → dynamic;
-  abstract set y(dynamic value) → dynamic;
+  abstract get y() → core::num;
+  abstract set y(generic-covariant-impl core::num value) → void;
 }
 abstract class D<T extends core::Object = dynamic> extends core::Object implements self::B<self::D::T> {
-  field dynamic x = null;
+  generic-covariant-impl field self::D::T x = null;
   synthetic constructor •() → self::D<self::D::T>
     : super core::Object::•()
     ;
-  abstract get y() → dynamic;
-  abstract set y(dynamic value) → dynamic;
+  abstract get y() → self::D::T;
+  abstract set y(generic-covariant-impl self::D::T value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.legacy.transformed.expect
index a959413..f6be89d 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.legacy.transformed.expect
@@ -10,19 +10,19 @@
     ;
 }
 abstract class C<T extends core::Object = dynamic> extends core::Object implements self::B<core::num> {
-  field dynamic x = null;
+  generic-covariant-impl field core::num x = null;
   synthetic constructor •() → self::C<self::C::T>
     : super core::Object::•()
     ;
-  abstract get y() → dynamic;
-  abstract set y(dynamic value) → dynamic;
+  abstract get y() → core::num;
+  abstract set y(generic-covariant-impl core::num value) → void;
 }
 abstract class D<T extends core::Object = dynamic> extends core::Object implements self::B<self::D::T> {
-  field dynamic x = null;
+  generic-covariant-impl field self::D::T x = null;
   synthetic constructor •() → self::D<self::D::T>
     : super core::Object::•()
     ;
-  abstract get y() → dynamic;
-  abstract set y(dynamic value) → dynamic;
+  abstract get y() → self::D::T;
+  abstract set y(generic-covariant-impl self::D::T value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.outline.expect
index 60525b9..2696bf4 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.outline.expect
@@ -9,18 +9,18 @@
     ;
 }
 abstract class C<T extends core::Object = dynamic> extends core::Object implements self::B<core::num> {
-  field dynamic x;
+  generic-covariant-impl field core::num x;
   synthetic constructor •() → self::C<self::C::T>
     ;
-  abstract get y() → dynamic;
-  abstract set y(dynamic value) → dynamic;
+  abstract get y() → core::num;
+  abstract set y(generic-covariant-impl core::num value) → void;
 }
 abstract class D<T extends core::Object = dynamic> extends core::Object implements self::B<self::D::T> {
-  field dynamic x;
+  generic-covariant-impl field self::D::T x;
   synthetic constructor •() → self::D<self::D::T>
     ;
-  abstract get y() → dynamic;
-  abstract set y(dynamic value) → dynamic;
+  abstract get y() → self::D::T;
+  abstract set y(generic-covariant-impl self::D::T value) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.hierarchy.expect
index 94c8b5c..df047dc 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.hierarchy.expect
@@ -103,9 +103,9 @@
     M.y
     M.x
   interfaceMembers:
-    M.y
+    C.M.y%I.y
     Object.toString
-    M.x
+    C.M.x%I.x
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
@@ -116,5 +116,329 @@
     Object._simpleInstanceOfTrue
     Object.==
   interfaceSetters:
-    M.y
-    M.x
+    C.M.y%I.y
+    C.M.x%I.x
+
+Comparable:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Comparable.compareTo
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+    Comparable.compare
+  classSetters:
+
+num:
+  Longest path to Object: 2
+  superclasses:
+    Object
+  interfaces: Comparable<num>
+  classMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  classSetters:
+  interfaceMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  interfaceSetters:
+
+int:
+  Longest path to Object: 3
+  superclasses:
+    Object
+      -> num
+  interfaces: Comparable<num>
+  classMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  classSetters:
+  interfaceMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  interfaceSetters:
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
index 4978034..b99aea3 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
@@ -32,6 +32,10 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  forwarding-stub set y(covariant core::Object value) → void
+    return super.{self::B::y} = value;
+  forwarding-stub set x(generic-covariant-impl core::int _) → void
+    return super.{self::B::x} = _;
 }
 static method expectTypeError(() → void callback) → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.hierarchy.expect
index 94c8b5c..df047dc 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.hierarchy.expect
@@ -103,9 +103,9 @@
     M.y
     M.x
   interfaceMembers:
-    M.y
+    C.M.y%I.y
     Object.toString
-    M.x
+    C.M.x%I.x
     Object.runtimeType
     Object._simpleInstanceOf
     Object._instanceOf
@@ -116,5 +116,329 @@
     Object._simpleInstanceOfTrue
     Object.==
   interfaceSetters:
-    M.y
-    M.x
+    C.M.y%I.y
+    C.M.x%I.x
+
+Comparable:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Comparable.compareTo
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+    Comparable.compare
+  classSetters:
+
+num:
+  Longest path to Object: 2
+  superclasses:
+    Object
+  interfaces: Comparable<num>
+  classMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  classSetters:
+  interfaceMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  interfaceSetters:
+
+int:
+  Longest path to Object: 3
+  superclasses:
+    Object
+      -> num
+  interfaces: Comparable<num>
+  classMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  classSetters:
+  interfaceMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  interfaceSetters:
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect
index 4b6371a..782ccf3 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect
@@ -38,6 +38,10 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  forwarding-stub set y(covariant core::Object value) → void
+    return super.{self::B::y} = value;
+  forwarding-stub set x(generic-covariant-impl core::int value) → void
+    return super.{self::B::x} = value;
 }
 static method expectTypeError(() → void callback) → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.hierarchy.expect
index 5459bc4..dbd4f79 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.hierarchy.expect
@@ -73,7 +73,7 @@
     Object.==
   classSetters:
   interfaceMembers:
-    B.f
+    C.B.f%I.f
     Object.toString
     Object.runtimeType
     Object._simpleInstanceOf
@@ -85,3 +85,327 @@
     Object._simpleInstanceOfTrue
     Object.==
   interfaceSetters:
+
+Comparable:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Comparable.compareTo
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+    Comparable.compare
+  classSetters:
+
+num:
+  Longest path to Object: 2
+  superclasses:
+    Object
+  interfaces: Comparable<num>
+  classMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  classSetters:
+  interfaceMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  interfaceSetters:
+
+int:
+  Longest path to Object: 3
+  superclasses:
+    Object
+      -> num
+  interfaces: Comparable<num>
+  classMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  classSetters:
+  interfaceMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  interfaceSetters:
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.outline.expect
index 4e4266a..91a76ee 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.outline.expect
@@ -16,6 +16,8 @@
 class C extends self::B implements self::I {
   synthetic constructor •() → self::C
     ;
+  forwarding-stub method f(covariant core::Object x) → core::int
+    return super.{self::B::f}(x);
 }
 static method expectTypeError(() → void callback) → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.hierarchy.expect
index c6a5468..f7b0451 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.hierarchy.expect
@@ -73,7 +73,7 @@
     Object.==
   classSetters:
   interfaceMembers:
-    B.f
+    C.B.f%I.f
     Object.toString
     Object.runtimeType
     Object._simpleInstanceOf
@@ -85,3 +85,327 @@
     Object._simpleInstanceOfTrue
     Object.==
   interfaceSetters:
+
+Comparable:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Comparable.compareTo
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+    Comparable.compare
+  classSetters:
+
+num:
+  Longest path to Object: 2
+  superclasses:
+    Object
+  interfaces: Comparable<num>
+  classMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  classSetters:
+  interfaceMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  interfaceSetters:
+
+int:
+  Longest path to Object: 3
+  superclasses:
+    Object
+      -> num
+  interfaces: Comparable<num>
+  classMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  classSetters:
+  interfaceMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  interfaceSetters:
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.legacy.expect
index 3334045..082a15f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.legacy.expect
@@ -18,5 +18,7 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  forwarding-stub method f(generic-covariant-impl core::int x, core::Object y) → void
+    return super.{self::B::f}(x, y);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.legacy.transformed.expect
index 3334045..082a15f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.legacy.transformed.expect
@@ -18,5 +18,7 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  forwarding-stub method f(generic-covariant-impl core::int x, core::Object y) → void
+    return super.{self::B::f}(x, y);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.outline.expect
index 205776d..5890db1 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.outline.expect
@@ -16,6 +16,8 @@
 abstract class C extends self::B implements self::I<core::int> {
   synthetic constructor •() → self::C
     ;
+  forwarding-stub method f(generic-covariant-impl core::int x, core::Object y) → void
+    return super.{self::B::f}(x, y);
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.hierarchy.expect
index 2defd9d..578a89f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.hierarchy.expect
@@ -73,7 +73,7 @@
     Object.==
   classSetters:
   interfaceMembers:
-    B.f
+    C.B.f%I.f
     Object.toString
     Object.runtimeType
     Object._simpleInstanceOf
@@ -85,3 +85,327 @@
     Object._simpleInstanceOfTrue
     Object.==
   interfaceSetters:
+
+Comparable:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Comparable.compareTo
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+    Comparable.compare
+  classSetters:
+
+num:
+  Longest path to Object: 2
+  superclasses:
+    Object
+  interfaces: Comparable<num>
+  classMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  classSetters:
+  interfaceMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  interfaceSetters:
+
+int:
+  Longest path to Object: 3
+  superclasses:
+    Object
+      -> num
+  interfaces: Comparable<num>
+  classMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  classSetters:
+  interfaceMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  interfaceSetters:
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.legacy.expect
index 3038f0e..04bbcf3 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.legacy.expect
@@ -18,5 +18,6 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  abstract forwarding-stub method f(generic-covariant-impl core::int x, core::Object y) → void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.legacy.transformed.expect
index 3038f0e..04bbcf3 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.legacy.transformed.expect
@@ -18,5 +18,6 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  abstract forwarding-stub method f(generic-covariant-impl core::int x, core::Object y) → void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.outline.expect
index 9e7de41..5c37f4b 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.outline.expect
@@ -16,6 +16,7 @@
 abstract class C extends self::B<core::int> implements self::I {
   synthetic constructor •() → self::C
     ;
+  abstract forwarding-stub method f(generic-covariant-impl core::int x, core::Object y) → void;
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.hierarchy.expect
index 5459bc4..dbd4f79 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.hierarchy.expect
@@ -73,7 +73,7 @@
     Object.==
   classSetters:
   interfaceMembers:
-    B.f
+    C.B.f%I.f
     Object.toString
     Object.runtimeType
     Object._simpleInstanceOf
@@ -85,3 +85,327 @@
     Object._simpleInstanceOfTrue
     Object.==
   interfaceSetters:
+
+Comparable:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Comparable.compareTo
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+    Comparable.compare
+  classSetters:
+
+num:
+  Longest path to Object: 2
+  superclasses:
+    Object
+  interfaces: Comparable<num>
+  classMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  classSetters:
+  interfaceMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  interfaceSetters:
+
+int:
+  Longest path to Object: 3
+  superclasses:
+    Object
+      -> num
+  interfaces: Comparable<num>
+  classMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  classSetters:
+  interfaceMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  interfaceSetters:
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.legacy.expect
index 22a66005..ed5aa28 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.legacy.expect
@@ -18,5 +18,7 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  forwarding-stub method f(covariant core::int x, core::Object y) → void
+    return super.{self::B::f}(x, y);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.legacy.transformed.expect
index 22a66005..ed5aa28 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.legacy.transformed.expect
@@ -18,5 +18,7 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  forwarding-stub method f(covariant core::int x, core::Object y) → void
+    return super.{self::B::f}(x, y);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.outline.expect
index 91a90a9..ac22acd 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.outline.expect
@@ -16,6 +16,8 @@
 abstract class C extends self::B implements self::I {
   synthetic constructor •() → self::C
     ;
+  forwarding-stub method f(covariant core::int x, core::Object y) → void
+    return super.{self::B::f}(x, y);
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.hierarchy.expect
index 5459bc4..dbd4f79 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.hierarchy.expect
@@ -73,7 +73,7 @@
     Object.==
   classSetters:
   interfaceMembers:
-    B.f
+    C.B.f%I.f
     Object.toString
     Object.runtimeType
     Object._simpleInstanceOf
@@ -85,3 +85,327 @@
     Object._simpleInstanceOfTrue
     Object.==
   interfaceSetters:
+
+Comparable:
+  superclasses:
+    Object
+  interfaces:
+  classMembers:
+    Object.toString
+    Object.runtimeType
+    Object._simpleInstanceOf
+    Object._instanceOf
+    Object.noSuchMethod
+    Object._identityHashCode
+    Comparable.compareTo
+    Object.hashCode
+    Object._simpleInstanceOfFalse
+    Object._simpleInstanceOfTrue
+    Object.==
+    Comparable.compare
+  classSetters:
+
+num:
+  Longest path to Object: 2
+  superclasses:
+    Object
+  interfaces: Comparable<num>
+  classMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  classSetters:
+  interfaceMembers:
+    num.~/
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    num._returnDoubleNull
+    num.Object.toString%num.toString
+    num._returnIntNull
+    num.+
+    num.clamp
+    num.toDouble
+    num.ceil
+    num.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    num.toStringAsExponential
+    num./
+    num.abs
+    num._moduloFromInteger
+    num._subFromInteger
+    num._addFromInteger
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    num.sign
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    num.floorToDouble
+    Object._identityHashCode
+    num.>
+    num.roundToDouble
+    num.round
+    num.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    num.truncate
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    num.ceilToDouble
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    num.truncateToDouble
+    num.parse
+    num.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    num.*
+  interfaceSetters:
+
+int:
+  Longest path to Object: 3
+  superclasses:
+    Object
+      -> num
+  interfaces: Comparable<num>
+  classMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  classSetters:
+  interfaceMembers:
+    int._minInt64
+    num.~/
+    int.toSigned
+    int._shrFromInteger
+    int._throwFormatException
+    int._parseBlock
+    num.<=
+    num._equalToInteger
+    num.isInfinite
+    num.<
+    int._int64OverflowLimits
+    int._parseRadix
+    int.Object.toString%int.toString
+    int._PARSE_LIMITS
+    int._kNull
+    num.+
+    num.clamp
+    num.toDouble
+    int.ceil
+    int.unary-
+    num._mulFromInteger
+    num.>=
+    Object.runtimeType
+    Object._simpleInstanceOf
+    num.isNegative
+    num.isNaN
+    int._initInt64OverflowLimits
+    int.isEven
+    num.toStringAsExponential
+    num./
+    int.abs
+    int._bitAndFromSmi
+    int.|
+    num._moduloFromInteger
+    int.gcd
+    int._int64UnsignedOverflowLimits
+    int.<<
+    num._subFromInteger
+    num._addFromInteger
+    int.toUnsigned
+    int.toRadixString
+    int._int64UnsignedSmiOverflowLimits
+    Object._instanceOf
+    num.remainder
+    num.isFinite
+    num.toInt
+    num.%
+    int._tryParseSmi
+    int.sign
+    int.>>
+    Object.noSuchMethod
+    num.toStringAsPrecision
+    int.modInverse
+    int.floorToDouble
+    Object._identityHashCode
+    num.>
+    int.roundToDouble
+    int.round
+    int._maxInt64
+    int.floor
+    num.compareTo
+    num.Object.hashCode%num.hashCode
+    num._truncDivFromInteger
+    int.truncate
+    int.^
+    int._shlFromInteger
+    int.&
+    num.-
+    Object._simpleInstanceOfFalse
+    num._greaterThanFromInteger
+    int.bitLength
+    int.ceilToDouble
+    int.modPow
+    int.isOdd
+    int._bitAndFromInteger
+    Object._simpleInstanceOfTrue
+    num.Object.==%num.==
+    int._bitOrFromInteger
+    int.truncateToDouble
+    int._bitXorFromInteger
+    int.parse
+    int.tryParse
+    num.toStringAsFixed
+    num._remainderFromInteger
+    int._parse
+    num.*
+    int.~
+  interfaceSetters:
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.legacy.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.legacy.expect
index cf870cc..1ce982c 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.legacy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.legacy.expect
@@ -18,5 +18,6 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  abstract forwarding-stub method f(covariant core::int x, core::Object y) → void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.legacy.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.legacy.transformed.expect
index cf870cc..1ce982c 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.legacy.transformed.expect
@@ -18,5 +18,6 @@
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
+  abstract forwarding-stub method f(covariant core::int x, core::Object y) → void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.outline.expect
index d4b0825..9c7aa8f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.outline.expect
@@ -16,6 +16,7 @@
 abstract class C extends self::B implements self::I {
   synthetic constructor •() → self::C
     ;
+  abstract forwarding-stub method f(covariant core::int x, core::Object y) → void;
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/static_setter.dart.legacy.expect b/pkg/front_end/testcases/static_setter.dart.legacy.expect
index 05125e5..055ed11 100644
--- a/pkg/front_end/testcases/static_setter.dart.legacy.expect
+++ b/pkg/front_end/testcases/static_setter.dart.legacy.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
 }
-static set foo(dynamic x) → dynamic {}
+static set foo(dynamic x) → void {}
 static method main() → dynamic {
   self::foo = new self::Foo::•();
 }
diff --git a/pkg/front_end/testcases/static_setter.dart.legacy.transformed.expect b/pkg/front_end/testcases/static_setter.dart.legacy.transformed.expect
index 05125e5..055ed11 100644
--- a/pkg/front_end/testcases/static_setter.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/static_setter.dart.legacy.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
 }
-static set foo(dynamic x) → dynamic {}
+static set foo(dynamic x) → void {}
 static method main() → dynamic {
   self::foo = new self::Foo::•();
 }
diff --git a/pkg/front_end/testcases/static_setter.dart.outline.expect b/pkg/front_end/testcases/static_setter.dart.outline.expect
index 13eaefe..0c46d4c 100644
--- a/pkg/front_end/testcases/static_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/static_setter.dart.outline.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Foo
     ;
 }
-static set foo(dynamic x) → dynamic
+static set foo(dynamic x) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index 04a59b2..23300d4 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -25,11 +25,12 @@
 extension_methods: TypeCheckError
 external_import: RuntimeError # The native extension to import doesn't exist. This is ok.
 fallthrough: ExpectationFileMismatch
+ignore_function: TypeCheckError
 incomplete_field_formal_parameter: RuntimeError
 inference/abstract_class_instantiation: InstrumentationMismatch # Issue #30040
 inference/conflicting_fields: TypeCheckError
-inference/conflicts_can_happen: TypeCheckError
 inference/conflicts_can_happen2: TypeCheckError
+inference/conflicts_can_happen: TypeCheckError
 inference/constructors_infer_from_arguments_argument_not_assignable: TypeCheckError
 inference/constructors_too_many_positional_arguments: InstrumentationMismatch # Issue #30040
 inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer: TypeCheckError
@@ -45,8 +46,10 @@
 inference/generic_methods_do_not_infer_invalid_override_of_generic_method: TypeCheckError
 inference/generic_methods_handle_override_of_non_generic_with_generic: TypeCheckError
 inference/generic_methods_infer_js_builtin: InstrumentationMismatch # Issue #30029
+inference/inconsistent_overrides: TypeCheckError
 inference/infer_field_override_multiple: TypeCheckError
 inference/infer_from_complex_expressions_if_outer_most_value_is_precise: TypeCheckError # Issue #35630
+inference/infer_method_missing_params: ExpectationFileMismatch # Not supposed to be able to infer types if supertypes disagree on number of parameters. An error may be missing as C.f and B.f are not compatible at all.
 inference/infer_method_missing_params: TypeCheckError
 inference/infer_type_regardless_of_declaration_order_or_cycles: RuntimeError
 inference/infer_types_on_generic_instantiations_4: RuntimeError
@@ -67,15 +70,16 @@
 inference_new/infer_assign_to_index_upwards: TypeCheckError
 inference_new/infer_assign_to_property_custom: TypeCheckError
 inference_new/infer_field_getter_setter_mismatch: TypeCheckError
+inference_new/infer_field_override_accessors: TypeCheckError
 inference_new/infer_field_override_getter_overrides_setter: TypeCheckError
 inference_new/invalid_assignment_during_toplevel_inference: TypeCheckError
-inference_new/strongly_connected_component: TypeCheckError
 instantiate_to_bound/non_simple_class_parametrized_typedef_cycle: RuntimeError # Expected
 instantiate_to_bound/non_simple_generic_function_in_bound_regress: RuntimeError # Expected
 invalid_type: TypeCheckError
 invocations: RuntimeError
 issue34899: TypeCheckError
 micro: RuntimeError
+mixin_application_override: ExpectationFileMismatch # Too many errors.
 mixin_application_override: TypeCheckError
 nnbd/nullable_param: RuntimeError
 operator_method_not_found: RuntimeError # Expected
diff --git a/pkg/front_end/testcases/super_nsm.dart.legacy.expect b/pkg/front_end/testcases/super_nsm.dart.legacy.expect
index a0c7a8c..eb7ebeb 100644
--- a/pkg/front_end/testcases/super_nsm.dart.legacy.expect
+++ b/pkg/front_end/testcases/super_nsm.dart.legacy.expect
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method noSuchMethod(dynamic _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     return "C";
   no-such-method-forwarder method interfaceMethod() → dynamic
     return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) as{TypeError} dynamic;
@@ -21,7 +21,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method noSuchMethod(dynamic _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     return "D";
   method dMethod() → dynamic
     return super.{self::C::interfaceMethod}();
diff --git a/pkg/front_end/testcases/super_nsm.dart.legacy.transformed.expect b/pkg/front_end/testcases/super_nsm.dart.legacy.transformed.expect
index a0c7a8c..eb7ebeb 100644
--- a/pkg/front_end/testcases/super_nsm.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/super_nsm.dart.legacy.transformed.expect
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method noSuchMethod(dynamic _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     return "C";
   no-such-method-forwarder method interfaceMethod() → dynamic
     return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) as{TypeError} dynamic;
@@ -21,7 +21,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method noSuchMethod(dynamic _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     return "D";
   method dMethod() → dynamic
     return super.{self::C::interfaceMethod}();
diff --git a/pkg/front_end/testcases/super_nsm.dart.outline.expect b/pkg/front_end/testcases/super_nsm.dart.outline.expect
index de7c531..6ec8595 100644
--- a/pkg/front_end/testcases/super_nsm.dart.outline.expect
+++ b/pkg/front_end/testcases/super_nsm.dart.outline.expect
@@ -10,7 +10,7 @@
 class C extends core::Object implements self::I {
   synthetic constructor •() → self::C
     ;
-  method noSuchMethod(dynamic _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     ;
   no-such-method-forwarder method interfaceMethod() → dynamic
     return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) as{TypeError} dynamic;
@@ -18,7 +18,7 @@
 class D extends self::C {
   synthetic constructor •() → self::D
     ;
-  method noSuchMethod(dynamic _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     ;
   method dMethod() → dynamic
     ;
diff --git a/pkg/front_end/testcases/void_methods.dart.outline.expect b/pkg/front_end/testcases/void_methods.dart.outline.expect
index b73833b..881f4a6 100644
--- a/pkg/front_end/testcases/void_methods.dart.outline.expect
+++ b/pkg/front_end/testcases/void_methods.dart.outline.expect
@@ -6,9 +6,9 @@
   field core::List<dynamic> list;
   synthetic constructor •() → self::Foo
     ;
-  set first(dynamic x) → dynamic
+  set first(dynamic x) → void
     ;
-  operator []=(dynamic x, dynamic y) → dynamic
+  operator []=(dynamic x, dynamic y) → void
     ;
   method clear() → void
     ;
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index 5953301..1920b97 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -135,7 +135,6 @@
 web_int_literals_test/*: SkipByDesign # Test applies only to JavaScript targets
 
 [ $compiler == dartdevk ]
-mixin_method_override_test/G5: Skip # Issue 34354
 private_method_tearoff_test: RuntimeError
 
 [ $compiler == dartkp ]
@@ -236,7 +235,6 @@
 mixin_illegal_superclass_test/28: MissingCompileTimeError
 mixin_illegal_superclass_test/29: MissingCompileTimeError
 mixin_illegal_superclass_test/30: MissingCompileTimeError
-mixin_method_override_test/G4: Crash # Assertion error: mixin_full_resolution.dart': 'src.typeParameters.length == dst.typeParameters.length': is not true.
 multiline_newline_test/04: MissingCompileTimeError
 multiline_newline_test/04r: MissingCompileTimeError
 multiline_newline_test/05: MissingCompileTimeError
@@ -275,21 +273,13 @@
 f_bounded_quantification4_test: CompileTimeError # Issue 34583
 issue31596_super_test/02: MissingCompileTimeError # Issue 31596
 issue31596_super_test/04: MissingCompileTimeError # Issue 31596
-issue34488_test/01: MissingCompileTimeError # Issue 34488
-issue34488_test/02: MissingCompileTimeError # Issue 34488
-issue34488_test/03: MissingCompileTimeError # Issue 34488
-issue34488_test/04: MissingCompileTimeError # Issue 34488
-issue34488_test/05: MissingCompileTimeError # Issue 34488
-issue34488_test/06: MissingCompileTimeError # Issue 34488
 mixin_declaration/mixin_declaration_invalid_override_test/08: MissingCompileTimeError
 mixin_declaration/mixin_declaration_superinvocation_application_test/04: MissingCompileTimeError
 mixin_declaration/mixin_declaration_superinvocation_application_test/05: MissingCompileTimeError
 mixin_declaration/mixin_declaration_superinvocation_application_test/06: MissingCompileTimeError
 mixin_declaration/mixin_declaration_superinvocation_application_test/07: MissingCompileTimeError
 mixin_declaration/mixin_declaration_superinvocation_application_test/08: MissingCompileTimeError
-mixin_method_override_test/G5: Crash # Issue 34354
 nnbd/*: Skip
-override_inheritance_field_test/42: MissingCompileTimeError
 regress_22976_test/*: CompileTimeError # Issue 31935
 set_literals/invalid_set_literal_test/08: MissingCompileTimeError # Requires constant evaluation
 set_literals/invalid_set_literal_test/09: MissingCompileTimeError # Requires constant evaluation