diff --git a/pkg/_fe_analyzer_shared/pubspec.yaml b/pkg/_fe_analyzer_shared/pubspec.yaml
index 64d60d5..fe7fc3e 100644
--- a/pkg/_fe_analyzer_shared/pubspec.yaml
+++ b/pkg/_fe_analyzer_shared/pubspec.yaml
@@ -1,5 +1,5 @@
 name: _fe_analyzer_shared
-version: 24.0.0
+version: 25.0.0
 description: Logic that is shared between the front_end and analyzer packages.
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/_fe_analyzer_shared
 
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index cdaf236..d2b2f22 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 2.2.0
+* Improvements in constructors tear-off implementation.
+
 ## 2.1.0
 * Changed `AnalysisResult.path` to be non-nullable.
 * Changed `ParsedLibraryResult.units` to be non-nullable.
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index b3749f5..5f6cc0f 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: analyzer
-version: 2.1.0
+version: 2.2.0
 description: This package provides a library that performs static analysis of Dart code.
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/analyzer
 
@@ -7,7 +7,7 @@
   sdk: '>=2.12.0 <3.0.0'
 
 dependencies:
-  _fe_analyzer_shared: ^24.0.0
+  _fe_analyzer_shared: ^25.0.0
   cli_util: ^0.3.0
   collection: ^1.15.0
   convert: ^3.0.0
diff --git a/pkg/dart2js_info/README.md b/pkg/dart2js_info/README.md
index 2f2fe11..28ec26f 100644
--- a/pkg/dart2js_info/README.md
+++ b/pkg/dart2js_info/README.md
@@ -23,8 +23,6 @@
 
 ## Status
 
-[![Build Status](https://github.com/dart-lang/dart2js_info/workflows/Dart%20CI/badge.svg)](https://github.com/dart-lang/dart2js_info/actions?query=workflow%3A"Dart+CI"+branch%3Amaster)
-
 Currently, most tools available here can be used to analyze code-size and
 attribution of code-size to different parts of your app. With time, we hope to
 add more data to the info files, and include better tools to help
diff --git a/tests/language/covariant/override_covariant_both_test.dart b/tests/language/covariant/override_covariant_both_test.dart
new file mode 100644
index 0000000..0a381c7
--- /dev/null
+++ b/tests/language/covariant/override_covariant_both_test.dart
@@ -0,0 +1,508 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test cases where an inherited method has a parameter `p0` that
+// corresponds to a parameter `p1` in the interface, where `p0` and `p1` are
+// both covariant-by-declaration.
+//
+// The library contains groups of classes depending on each other, and there
+// is no connection between the groups. Each group has a number (0 .. 17)
+// which is used at the end of most names in the group. For example, the first
+// group consists of the classes `B0`, `C0`, `DD0`, and `D0`. The group number
+// is shown as `#` in the remainder of this comment.
+//
+// In every group, the classes `C#` and `D#` are concrete leaf classes
+// exhibiting the situation of interest, that is, an inherited implementation
+// of the method `m` as well as a signature for `m` in the interface of the
+// class, with a parameter that has the above-mentioned properties.
+//
+// The parameter type in the implementation and the parameter type in the
+// method signature is (`num`, `num`), (`int`, `num`) and (`num`, `int`),
+// respectively, such that we test a covariant, contravariant and invariant
+// parameter type relationship in the overrides.
+//
+// In every group, the class `B#` contains the implementation of the method
+// `m` which is inherited. Class `A#` and mixin `M#`, present in some groups,
+// are used to provide the method implementation to `B#` using a mixin
+// application.
+//
+// The classes `BB#`, `I#`, `DD#`, `J#`, and `JJ#` are helper classes for `C#`
+// and `#D`.
+//
+// Class `BB#` is a subclass of `B#` and a superclass of `C#` and `D#`; it
+// introduces the method signature of `m` into the superclass chain.
+//
+// Class `DD#` is implemented by `D#`. Classes `I#`, `J#`, and `JJ#` are
+// implemented by `C#` or `D#`. Class `DD#` and `JJ#` ensure that `m` can be
+// called with an argument of type `Object`. Class `I#` and `J#` introduce the
+// method signature to `C#` or `D#` via an `implements` relation.
+//
+// Finally, `main` contains test cases where the dynamic type check is
+// incurred, using variable types and arguments that make the type check
+// fail whenever possible.
+//
+// The comments below about 'Superclass' and 'interface' indicate the way in
+// which the superclass of `C#` and `D#` is structured (it can be a regular
+// class or a mixin), and the way in which the superinterface that provides
+// the method signature is structured (it can be declared in `C#` or `D#`,
+// "immediate", or it can be obtained via an `extends` relation or via an
+// `implements` relation).
+
+import 'package:expect/expect.dart';
+
+// Superclass: regular, interface: immediate.
+
+class B0 {
+  void m(covariant num x) {}
+}
+
+class C0 extends B0 {
+  void m(covariant num x);
+}
+
+abstract class DD0 {
+  void m(covariant Object x);
+}
+
+class D0 extends B0 implements DD0 {
+  void m(num x);
+}
+
+class B1 {
+  void m(covariant int x) {}
+}
+
+class C1 extends B1 {
+  void m(covariant num x);
+}
+
+abstract class DD1 {
+  void m(covariant Object x);
+}
+
+class D1 extends B1 implements DD1 {
+  void m(num x);
+}
+
+class B2 {
+  void m(covariant num x) {}
+}
+
+class C2 extends B2 {
+  void m(covariant int x);
+}
+
+abstract class DD2 {
+  void m(covariant Object x);
+}
+
+class D2 extends B2 implements DD2 {
+  void m(int x);
+}
+
+// Superclass: regular, interface: extends.
+
+class B3 {
+  void m(covariant num x) {}
+}
+
+abstract class BB3 extends B3 {
+  void m(covariant num x);
+}
+
+class C3 extends BB3 {}
+
+abstract class DD3 {
+  void m(covariant Object x);
+}
+
+class D3 extends BB3 implements DD3 {}
+
+class B4 {
+  void m(covariant int x) {}
+}
+
+abstract class BB4 extends B4 {
+  void m(covariant num x);
+}
+
+class C4 extends BB4 {}
+
+abstract class DD4 {
+  void m(covariant Object x);
+}
+
+class D4 extends BB4 implements DD4 {}
+
+class B5 {
+  void m(covariant num x) {}
+}
+
+abstract class BB5 extends B5 {
+  void m(covariant int x);
+}
+
+class C5 extends BB5 {}
+
+abstract class DD5 {
+  void m(covariant Object x);
+}
+
+class D5 extends BB5 implements DD5 {}
+
+// Superclass: regular, interface: implements.
+
+class B6 {
+  void m(covariant num x) {}
+}
+
+abstract class I6 {
+  void m(covariant num x);
+}
+
+class C6 extends B6 implements I6 {}
+
+abstract class JJ6 {
+  void m(covariant Object x);
+}
+
+abstract class J6 {
+  void m(num x);
+}
+
+class D6 extends B6 implements J6, JJ6 {}
+
+class B7 {
+  void m(covariant int x) {}
+}
+
+abstract class I7 {
+  void m(covariant num x);
+}
+
+class C7 extends B7 implements I7 {}
+
+abstract class JJ7 {
+  void m(covariant Object x);
+}
+
+abstract class J7 {
+  void m(num x);
+}
+
+class D7 extends B7 implements J7, JJ7 {}
+
+class B8 {
+  void m(covariant num x) {}
+}
+
+abstract class I8 {
+  void m(covariant int x);
+}
+
+class C8 extends B8 implements I8 {}
+
+abstract class JJ8 {
+  void m(covariant Object x);
+}
+
+abstract class J8 {
+  void m(int x);
+}
+
+class D8 extends B8 implements J8, JJ8 {}
+
+// Superclass: mixed-in, interface: immediate.
+
+class A9 {}
+
+mixin M9 {
+  void m(covariant num x) {}
+}
+
+class B9 extends A9 with M9 {}
+
+class C9 extends B9 {
+  void m(covariant num x);
+}
+
+abstract class DD9 {
+  void m(covariant Object x);
+}
+
+class D9 extends B9 implements DD9 {
+  void m(num x);
+}
+
+class A10 {}
+
+mixin M10 {
+  void m(covariant int x) {}
+}
+
+class B10 extends A10 with M10 {}
+
+class C10 extends B10 {
+  void m(covariant num x);
+}
+
+abstract class DD10 {
+  void m(covariant Object x);
+}
+
+class D10 extends B10 implements DD10 {
+  void m(num x);
+}
+
+class A11 {}
+
+mixin M11 {
+  void m(covariant num x) {}
+}
+
+class B11 extends A11 with M11 {}
+
+class C11 extends B11 {
+  void m(covariant int x);
+}
+
+abstract class DD11 {
+  void m(covariant Object x);
+}
+
+class D11 extends B11 implements DD11 {
+  void m(int x);
+}
+
+// Superclass: mixed-in, interface: extends.
+
+class A12 {}
+
+mixin M12 {
+  void m(covariant num x) {}
+}
+
+class B12 extends A12 with M12 {}
+
+abstract class BB12 extends B12 {
+  void m(covariant num x);
+}
+
+class C12 extends BB12 {}
+
+abstract class DD12 {
+  void m(covariant Object x);
+}
+
+class D12 extends BB12 implements DD12 {}
+
+class A13 {}
+
+mixin M13 {
+  void m(covariant int x) {}
+}
+
+class B13 extends A13 with M13 {}
+
+abstract class BB13 extends B13 {
+  void m(covariant num x);
+}
+
+class C13 extends BB13 {}
+
+abstract class DD13 {
+  void m(covariant Object x);
+}
+
+class D13 extends BB13 implements DD13 {}
+
+class A14 {}
+
+mixin M14 {
+  void m(covariant num x) {}
+}
+
+class B14 extends A14 with M14 {}
+
+abstract class BB14 extends B14 {
+  void m(covariant int x);
+}
+
+class C14 extends BB14 {}
+
+abstract class DD14 {
+  void m(covariant Object x);
+}
+
+class D14 extends BB14 implements DD14 {}
+
+// Superclass: mixed-in, interface: implements.
+
+class A15 {}
+
+mixin M15 {
+  void m(covariant num x) {}
+}
+
+class B15 extends A15 with M15 {}
+
+abstract class I15 {
+  void m(covariant num x);
+}
+
+class C15 extends B15 implements I15 {}
+
+abstract class JJ15 {
+  void m(covariant Object x);
+}
+
+abstract class J15 {
+  void m(num x);
+}
+
+class D15 extends B15 implements J15, JJ15 {}
+
+class A16 {}
+
+mixin M16 {
+  void m(covariant int x) {}
+}
+
+class B16 extends A16 with M16 {}
+
+abstract class I16 {
+  void m(covariant num x);
+}
+
+class C16 extends B16 implements I16 {}
+
+abstract class JJ16 {
+  void m(covariant Object x);
+}
+
+abstract class J16 {
+  void m(num x);
+}
+
+class D16 extends B16 implements J16, JJ16 {}
+
+class A17 {}
+
+mixin M17 {
+  void m(covariant num x) {}
+}
+
+class B17 extends A17 with M17 {}
+
+abstract class I17 {
+  void m(covariant int x);
+}
+
+class C17 extends B17 implements I17 {}
+
+abstract class JJ17 {
+  void m(covariant Object x);
+}
+
+abstract class J17 {
+  void m(int x);
+}
+
+class D17 extends B17 implements J17, JJ17 {}
+
+void main() {
+  // Demonstrate that each leaf class requires and has a dynamic
+  // type check (which is most likely placed in a forwarding stub).
+  const o = Object();
+
+  B0 x0 = C0();
+  x0.m(0.0);
+  DD0 y0 = D0();
+  Expect.throws(() => y0.m(o));
+
+  C1 x1 = C1();
+  Expect.throws(() => x1.m(1.1));
+  DD1 y1 = D1();
+  Expect.throws(() => y1.m(o));
+
+  B2 x2 = C2();
+  x2.m(2.2);
+  DD2 y2 = D2();
+  Expect.throws(() => y2.m(o));
+
+  B3 x3 = C3();
+  x3.m(3.3);
+  DD3 y3 = D3();
+  Expect.throws(() => y3.m(o));
+
+  C4 x4 = C4();
+  Expect.throws(() => x4.m(4.4));
+  DD4 y4 = D4();
+  Expect.throws(() => y4.m(o));
+
+  B5 x5 = C5();
+  x5.m(5.5);
+  DD5 y5 = D5();
+  Expect.throws(() => y5.m(o));
+
+  B6 x6 = C6();
+  x6.m(6.6);
+  JJ6 y6 = D6();
+  Expect.throws(() => y6.m(o));
+
+  C7 x7 = C7();
+  Expect.throws(() => x7.m(7.7));
+  JJ7 y7 = D7();
+  Expect.throws(() => y7.m(o));
+
+  B8 x8 = C8();
+  x8.m(8.8);
+  JJ8 y8 = D8();
+  Expect.throws(() => y8.m(o));
+
+  B9 x9 = C9();
+  x9.m(1.1);
+  DD9 y9 = D9();
+  Expect.throws(() => y9.m(o));
+
+  C10 x10 = C10();
+  Expect.throws(() => x10.m(10.10));
+  DD10 y10 = D10();
+  Expect.throws(() => y10.m(o));
+
+  B11 x11 = C11();
+  x11.m(11.11);
+  DD11 y11 = D11();
+  Expect.throws(() => y11.m(o));
+
+  B12 x12 = C12();
+  x12.m(12.12);
+  DD12 y12 = D12();
+  Expect.throws(() => y12.m(o));
+
+  C13 x13 = C13();
+  Expect.throws(() => x13.m(13.13));
+  DD13 y13 = D13();
+  Expect.throws(() => y13.m(o));
+
+  B14 x14 = C14();
+  x14.m(14.14);
+  DD14 y14 = D14();
+  Expect.throws(() => y14.m(o));
+
+  B15 x15 = C15();
+  x15.m(15.15);
+  JJ15 y15 = D15();
+  Expect.throws(() => y15.m(o));
+
+  C16 x16 = C16();
+  Expect.throws(() => x16.m(16.16));
+  JJ16 y16 = D16();
+  Expect.throws(() => y16.m(o));
+
+  B17 x17 = C17();
+  x17.m(17.17);
+  JJ17 y17 = D17();
+  Expect.throws(() => y17.m(o));
+}
diff --git a/tests/language/covariant/override_covariant_class_test.dart b/tests/language/covariant/override_covariant_class_test.dart
new file mode 100644
index 0000000..7de1b69
--- /dev/null
+++ b/tests/language/covariant/override_covariant_class_test.dart
@@ -0,0 +1,525 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test error detection where an inherited method has a parameter `p0`
+// that corresponds to a parameter `p1` in the interface, where `p1` is
+// covariant-by-class and -by-declaration where needed, but `p0` is not.
+//
+// The library contains groups of classes depending on each other, and there
+// is no connection between the groups. Each group has a number (0 .. 17)
+// which is used at the end of most names in the group. For example, the first
+// group consists of the classes `B0`, `C0`, `DD0`, and `D0`. The group number
+// is shown as `#` in the remainder of this comment.
+//
+// In every group, the classes `C#` and `D#` are concrete leaf classes
+// exhibiting the situation of interest, that is, an inherited implementation
+// of the method `m` as well as a signature for `m` in the interface of the
+// class, with a parameter that has the above-mentioned properties.
+//
+// The parameter type in the implementation and the parameter type in the
+// method signature is (`num`, `num`), (`int`, `num`) and (`num`, `int`),
+// respectively, such that we test a covariant, contravariant and invariant
+// parameter type relationship in the overrides.
+//
+// In every group, the class `B#` contains the implementation of the method
+// `m` which is inherited. Class `A#` and mixin `M#`, present in some groups,
+// are used to provide the method implementation to `B#` using a mixin
+// application.
+//
+// The classes `BB#`, `I#`, `DD#`, `J#`, and `JJ#` are helper classes for `C#`
+// and `#D`.
+//
+// Class `BB#` is a subclass of `B#` and a superclass of `C#` and `D#`; it
+// introduces the method signature of `m` into the superclass chain.
+//
+// Class `DD#` is implemented by `D#`. Classes `I#`, `J#`, and `JJ#` are
+// implemented by `C#` or `D#`. Class `DD#` and `JJ#` ensure that `m` can be
+// called with an argument of type `Object`. Class `I#` and `J#` introduce the
+// method signature to `C#` or `D#` via an `implements` relation.
+//
+// Finally, `main` contains test cases where the dynamic type check is
+// incurred, using variable types and arguments that make the type check
+// fail whenever possible.
+//
+// The comments below about 'Superclass' and 'interface' indicate the way in
+// which the superclass of `C#` and `D#` is structured (it can be a regular
+// class or a mixin), and the way in which the superinterface that provides
+// the method signature is structured (it can be declared in `C#` or `D#`,
+// "immediate", or it can be obtained via an `extends` relation or via an
+// `implements` relation).
+
+import 'package:expect/expect.dart';
+
+// Superclass: regular, interface: immediate.
+
+class B0 {
+  void m(num x) {}
+}
+
+abstract class CC0<X extends num> extends B0 {
+  void m(covariant X x);
+}
+
+class C0 extends CC0<num> {}
+
+abstract class DD0<X> {
+  void m(X x);
+}
+
+class D0 extends B0 implements DD0<num> {
+  void m(num x);
+}
+
+// Following the pattern, the classes `B1` .. `D1` are as shown below. They
+// are commented out, because the declaration `CC1.m` is an error, because
+// its parameter has a type which is neither a subtype nor a supertype of
+// the parameter type in `B1.m`. It is not useful to change the bound of `X`
+// in `CC1` to `int`, because that yields a set of classes with exactly the
+// same properties as those of `B0` .. `D0` (just change `num` to `int`
+// everywhere).
+//
+// class B1 {
+//   void m(int x) {}
+// }
+//
+// abstract class CC1<X extends num> extends B1 {
+//   void m(covariant X x);
+// }
+//
+// class C1 extends CC1<int> {}
+//
+// abstract class DD1<X> {
+//   void m(X x);
+// }
+//
+// class D1 extends B1 implements DD1<int> {
+//   void m(int x);
+// }
+
+class B2 {
+  void m(num x) {}
+}
+
+abstract class CC2<X extends int> extends B2 {
+  void m(covariant X x);
+}
+
+class C2 extends CC2<int> {}
+
+abstract class DD2<X> {
+  void m(X x);
+}
+
+class D2 extends B2 implements DD2<int> {
+  void m(num x);
+}
+
+// Superclass: regular, interface: extends.
+
+class B3 {
+  void m(num x) {}
+}
+
+abstract class BB3<X extends num> extends B3 {
+  void m(covariant X x);
+}
+
+class C3 extends BB3<num> {}
+
+abstract class DD3<X extends num> {
+  void m(X x);
+}
+
+class D3 extends BB3<num> implements DD3<num> {}
+
+class B4 {
+  void m(int x) {}
+}
+
+abstract class BB4<X extends int> extends B4 {
+  void m(covariant X x);
+}
+
+class C4 extends BB4<int> {}
+
+abstract class DD4<X extends num> {
+  void m(X x);
+}
+
+class D4 extends BB4<int> implements DD4<int> {}
+
+class B5 {
+  void m(num x) {}
+}
+
+abstract class BB5<X extends int> extends B5 {
+  void m(covariant X x);
+}
+
+class C5 extends BB5<int> {}
+
+abstract class DD5<X extends int> {
+  void m(X x);
+}
+
+class D5 extends BB5<int> implements DD5<int> {}
+
+// Superclass: regular, interface: implements.
+
+class B6 {
+  void m(num x) {}
+}
+
+abstract class I6<X extends num> {
+  void m(X x);
+}
+
+class C6 extends B6 implements I6<num> {}
+
+abstract class JJ6 {
+  void m(Object x);
+}
+
+abstract class J6<X extends num> implements JJ6 {
+  void m(covariant X x);
+}
+
+class D6 extends B6 implements J6<num> {}
+
+class B7 {
+  void m(int x) {}
+}
+
+abstract class I7<X extends num> {
+  void m(X x);
+}
+
+class C7 extends B7 implements I7<int> {}
+
+abstract class JJ7 {
+  void m(Object x);
+}
+
+abstract class J7<X extends num> implements JJ7 {
+  void m(covariant X x);
+}
+
+class D7 extends B7 implements J7<int> {}
+
+class B8 {
+  void m(num x) {}
+}
+
+abstract class I8<X extends int> {
+  void m(X x);
+}
+
+class C8 extends B8 implements I8<int> {}
+
+abstract class JJ8 {
+  void m(Object x);
+}
+
+abstract class J8<X extends int> implements JJ8 {
+  void m(covariant X x);
+}
+
+class D8 extends B8 implements J8<int> {}
+
+// Superclass: mixed-in, interface: immediate.
+
+class A9 {}
+
+mixin M9 {
+  void m(num x) {}
+}
+
+class B9 extends A9 with M9 {}
+
+abstract class CC9<X extends num> extends B9 {
+  void m(covariant X x);
+}
+
+class C9 extends CC9<num> {}
+
+abstract class DD9<X> {
+  void m(X x);
+}
+
+class D9 extends B9 implements DD9<num> {
+  void m(num x);
+}
+
+class A10 {}
+
+mixin M10 {
+  void m(int x) {}
+}
+
+class B10 extends A10 with M10 {}
+
+abstract class CC10<X extends int> extends B10 {
+  void m(covariant X x);
+}
+
+class C10 extends CC10<int> {}
+
+abstract class DD10<X> {
+  void m(X x);
+}
+
+class D10 extends B10 implements DD10<int> {
+  void m(int x);
+}
+
+class A11 {}
+
+mixin M11 {
+  void m(num x) {}
+}
+
+class B11 extends A11 with M11 {}
+
+abstract class CC11<X extends int> extends B11 {
+  void m(covariant X x);
+}
+
+class C11 extends CC11<int> {}
+
+abstract class DD11<X> {
+  void m(X x);
+}
+
+class D11 extends B11 implements DD11<int> {
+  void m(num x);
+}
+
+// Superclass: mixed-in, interface: extends.
+
+class A12 {}
+
+mixin M12 {
+  void m(num x) {}
+}
+
+class B12 extends A12 with M12 {}
+
+abstract class BB12<X extends num> extends B12 {
+  void m(covariant X x);
+}
+
+class C12 extends BB12<num> {}
+
+abstract class DD12<X extends num> {
+  void m(X x);
+}
+
+class D12 extends BB12<num> implements DD12<num> {}
+
+class A13 {}
+
+mixin M13 {
+  void m(int x) {}
+}
+
+class B13 extends A13 with M13 {}
+
+abstract class BB13<X extends int> extends B13 {
+  void m(covariant X x);
+}
+
+class C13 extends BB13<int> {}
+
+abstract class DD13<X extends num> {
+  void m(X x);
+}
+
+class D13 extends BB13<int> implements DD13<int> {}
+
+class A14 {}
+
+mixin M14 {
+  void m(num x) {}
+}
+
+class B14 extends A14 with M14 {}
+
+abstract class BB14<X extends int> extends B14 {
+  void m(covariant X x);
+}
+
+class C14 extends BB14<int> {}
+
+abstract class DD14<X extends int> {
+  void m(X x);
+}
+
+class D14 extends BB14<int> implements DD14<int> {}
+
+// Superclass: mixed-in, interface: implements.
+
+class A15 {}
+
+mixin M15 {
+  void m(num x) {}
+}
+
+class B15 extends A15 with M15 {}
+
+abstract class I15<X extends num> {
+  void m(X x);
+}
+
+class C15 extends B15 implements I15<num> {}
+
+abstract class JJ15 {
+  void m(Object x);
+}
+
+abstract class J15<X extends num> implements JJ15 {
+  void m(covariant X x);
+}
+
+class D15 extends B15 implements J15<num> {}
+
+class A16 {}
+
+mixin M16 {
+  void m(int x) {}
+}
+
+class B16 extends A16 with M16 {}
+
+abstract class I16<X extends num> {
+  void m(X x);
+}
+
+class C16 extends B16 implements I16<int> {}
+
+abstract class JJ16 {
+  void m(Object x);
+}
+
+abstract class J16<X extends num> implements JJ16 {
+  void m(covariant X x);
+}
+
+class D16 extends B16 implements J16<int> {}
+
+class A17 {}
+
+mixin M17 {
+  void m(num x) {}
+}
+
+class B17 extends A17 with M17 {}
+
+abstract class I17<X extends int> {
+  void m(X x);
+}
+
+class C17 extends B17 implements I17<int> {}
+
+abstract class JJ17 {
+  void m(Object x);
+}
+
+abstract class J17<X extends int> implements JJ17 {
+  void m(covariant X x);
+}
+
+class D17 extends B17 implements J17<int> {}
+
+void main() {
+  // Demonstrate that each leaf class requires and has a dynamic
+  // type check (which is most likely placed in a forwarding stub).
+  const o = Object();
+
+  CC0<Object?> x0 = C0();
+  Expect.throws(() => x0.m(o));
+  DD0<Object?> y0 = D0();
+  Expect.throws(() => y0.m(o));
+
+  // Group 1 was eliminated, see comment containing `class B1`.
+
+  CC2<Object?> x2 = C2();
+  Expect.throws(() => x2.m(o));
+  DD2<Object?> y2 = D2();
+  Expect.throws(() => y2.m(o));
+
+  BB3<Object?> x3 = C3();
+  Expect.throws(() => x3.m(o));
+  DD3<Object?> y3 = D3();
+  Expect.throws(() => y3.m(o));
+
+  BB4<Object?> x4 = C4();
+  Expect.throws(() => x4.m(o));
+  DD4<Object?> y4 = D4();
+  Expect.throws(() => y4.m(o));
+
+  BB5<Object?> x5 = C5();
+  Expect.throws(() => x5.m(o));
+  DD5<Object?> y5 = D5();
+  Expect.throws(() => y5.m(o));
+
+  I6<Object?> x6 = C6();
+  Expect.throws(() => x6.m(o));
+  JJ6 y6 = D6();
+  Expect.throws(() => y6.m(o));
+
+  I7<Object?> x7 = C7();
+  Expect.throws(() => x7.m(o));
+  JJ7 y7 = D7();
+  Expect.throws(() => y7.m(o));
+
+  I8<Object?> x8 = C8();
+  Expect.throws(() => x8.m(o));
+  JJ8 y8 = D8();
+  Expect.throws(() => y8.m(o));
+
+  CC9<Object?> x9 = C9();
+  Expect.throws(() => x9.m(o));
+  DD9<Object?> y9 = D9();
+  Expect.throws(() => y9.m(o));
+
+  CC10<Object?> x10 = C10();
+  Expect.throws(() => x10.m(o));
+  DD10<Object?> y10 = D10();
+  Expect.throws(() => y10.m(o));
+
+  CC11<Object?> x11 = C11();
+  Expect.throws(() => x11.m(o));
+  DD11<Object?> y11 = D11();
+  Expect.throws(() => y11.m(o));
+
+  BB12<Object?> x12 = C12();
+  Expect.throws(() => x12.m(o));
+  DD12<Object?> y12 = D12();
+  Expect.throws(() => y12.m(o));
+
+  BB13<Object?> x13 = C13();
+  Expect.throws(() => x13.m(o));
+  DD13<Object?> y13 = D13();
+  Expect.throws(() => y13.m(o));
+
+  BB14<Object?> x14 = C14();
+  Expect.throws(() => x14.m(o));
+  DD14<Object?> y14 = D14();
+  Expect.throws(() => y14.m(o));
+
+  I15<Object?> x15 = C15();
+  Expect.throws(() => x15.m(o));
+  JJ15 y15 = D15();
+  Expect.throws(() => y15.m(o));
+
+  I16<Object?> x16 = C16();
+  Expect.throws(() => x16.m(o));
+  JJ16 y16 = D16();
+  Expect.throws(() => y16.m(o));
+
+  I17<Object?> x17 = C17();
+  Expect.throws(() => x17.m(o));
+  JJ17 y17 = D17();
+  Expect.throws(() => y17.m(o));
+}
diff --git a/tests/language/covariant/override_covariant_interface_test.dart b/tests/language/covariant/override_covariant_interface_test.dart
new file mode 100644
index 0000000..c0fdafb
--- /dev/null
+++ b/tests/language/covariant/override_covariant_interface_test.dart
@@ -0,0 +1,511 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test the handling of a situation where an inherited method has a parameter
+// `p0` that corresponds to a parameter `p1` in the interface, where `p1`
+// is covariant-by-declaration, but `p0` is not. In this case, the inherited
+// method may need to be overridden by an implicitly induced stub, because
+// it must perform a dynamic type check on its parameter, and the inherited
+// method doesn't do that.
+//
+// The library contains groups of classes depending on each other, and there
+// is no connection between the groups. Each group has a number (0 .. 17)
+// which is used at the end of most names in the group. For example, the first
+// group consists of the classes `B0`, `C0`, `DD0`, and `D0`. The group number
+// is shown as `#` in the remainder of this comment.
+//
+// In every group, the classes `C#` and `D#` are concrete leaf classes
+// exhibiting the situation of interest, that is, an inherited implementation
+// of the method `m` as well as a signature for `m` in the interface of the
+// class, with a parameter that has the above-mentioned properties.
+//
+// The parameter type in the implementation and the parameter type in the
+// method signature is (`num`, `num`), (`int`, `num`) and (`num`, `int`),
+// respectively, such that we test a covariant, contravariant and invariant
+// parameter type relationship in the overrides.
+//
+// In every group, the class `B#` contains the implementation of the method
+// `m` which is inherited. Class `A#` and mixin `M#`, present in some groups,
+// are used to provide the method implementation to `B#` using a mixin
+// application.
+//
+// The classes `BB#`, `I#`, `DD#`, `J#`, and `JJ#` are helper classes for `C#`
+// and `#D`.
+//
+// Class `BB#` is a subclass of `B#` and a superclass of `C#` and `D#`; it
+// introduces the method signature of `m` into the superclass chain.
+//
+// Class `DD#` is implemented by `D#`. Classes `I#`, `J#`, and `JJ#` are
+// implemented by `C#` or `D#`. Class `DD#` and `JJ#` ensure that `m` can be
+// called with an argument of type `Object`. Class `I#` and `J#` introduce the
+// method signature to `C#` or `D#` via an `implements` relation.
+//
+// Finally, `main` contains test cases where the dynamic type check is
+// incurred, using variable types and arguments that make the type check
+// fail whenever possible.
+//
+// The comments below about 'Superclass' and 'interface' indicate the way in
+// which the superclass of `C#` and `D#` is structured (it can be a regular
+// class or a mixin), and the way in which the superinterface that provides
+// the method signature is structured (it can be declared in `C#` or `D#`,
+// "immediate", or it can be obtained via an `extends` relation or via an
+// `implements` relation).
+
+import 'package:expect/expect.dart';
+
+// Superclass: regular, interface: immediate.
+
+class B0 {
+  void m(num x) {}
+}
+
+class C0 extends B0 {
+  void m(covariant num x);
+}
+
+abstract class DD0 {
+  void m(Object x);
+}
+
+class D0 extends B0 implements DD0 {
+  void m(covariant num x);
+}
+
+class B1 {
+  void m(int x) {}
+}
+
+class C1 extends B1 {
+  void m(covariant num x);
+}
+
+abstract class DD1 {
+  void m(Object x);
+}
+
+class D1 extends B1 implements DD1 {
+  void m(covariant num x);
+}
+
+class B2 {
+  void m(num x) {}
+}
+
+class C2 extends B2 {
+  void m(covariant int x);
+}
+
+abstract class DD2 {
+  void m(Object x);
+}
+
+class D2 extends B2 implements DD2 {
+  void m(covariant int x);
+}
+
+// Superclass: regular, interface: extends.
+
+class B3 {
+  void m(num x) {}
+}
+
+abstract class BB3 extends B3 {
+  void m(covariant num x);
+}
+
+class C3 extends BB3 {}
+
+abstract class DD3 {
+  void m(Object x);
+}
+
+class D3 extends BB3 implements DD3 {}
+
+class B4 {
+  void m(int x) {}
+}
+
+abstract class BB4 extends B4 {
+  void m(covariant num x);
+}
+
+class C4 extends BB4 {}
+
+abstract class DD4 {
+  void m(Object x);
+}
+
+class D4 extends BB4 implements DD4 {}
+
+class B5 {
+  void m(num x) {}
+}
+
+abstract class BB5 extends B5 {
+  void m(covariant int x);
+}
+
+class C5 extends BB5 {}
+
+abstract class DD5 {
+  void m(Object x);
+}
+
+class D5 extends BB5 implements DD5 {}
+
+// Superclass: regular, interface: implements.
+
+class B6 {
+  void m(num x) {}
+}
+
+abstract class I6 {
+  void m(covariant num x);
+}
+
+class C6 extends B6 implements I6 {}
+
+abstract class JJ6 {
+  void m(Object x);
+}
+
+abstract class J6 implements JJ6 {
+  void m(covariant num x);
+}
+
+class D6 extends B6 implements J6 {}
+
+class B7 {
+  void m(int x) {}
+}
+
+abstract class I7 {
+  void m(covariant num x);
+}
+
+class C7 extends B7 implements I7 {}
+
+abstract class JJ7 {
+  void m(Object x);
+}
+
+abstract class J7 implements JJ7 {
+  void m(covariant num x);
+}
+
+class D7 extends B7 implements J7 {}
+
+class B8 {
+  void m(num x) {}
+}
+
+abstract class I8 {
+  void m(covariant int x);
+}
+
+class C8 extends B8 implements I8 {}
+
+abstract class JJ8 {
+  void m(Object x);
+}
+
+abstract class J8 implements JJ8 {
+  void m(covariant int x);
+}
+
+class D8 extends B8 implements J8 {}
+
+// Superclass: mixed-in, interface: immediate.
+
+class A9 {}
+
+mixin M9 {
+  void m(num x) {}
+}
+
+class B9 extends A9 with M9 {}
+
+class C9 extends B9 {
+  void m(covariant num x);
+}
+
+abstract class DD9 {
+  void m(Object x);
+}
+
+class D9 extends B9 implements DD9 {
+  void m(covariant num x);
+}
+
+class A10 {}
+
+mixin M10 {
+  void m(int x) {}
+}
+
+class B10 extends A10 with M10 {}
+
+class C10 extends B10 {
+  void m(covariant num x);
+}
+
+abstract class DD10 {
+  void m(Object x);
+}
+
+class D10 extends B10 implements DD10 {
+  void m(covariant num x);
+}
+
+class A11 {}
+
+mixin M11 {
+  void m(num x) {}
+}
+
+class B11 extends A11 with M11 {}
+
+class C11 extends B11 {
+  void m(covariant int x);
+}
+
+abstract class DD11 {
+  void m(Object x);
+}
+
+class D11 extends B11 implements DD11 {
+  void m(covariant int x);
+}
+
+// Superclass: mixed-in, interface: extends.
+
+class A12 {}
+
+mixin M12 {
+  void m(num x) {}
+}
+
+class B12 extends A12 with M12 {}
+
+abstract class BB12 extends B12 {
+  void m(covariant num x);
+}
+
+class C12 extends BB12 {}
+
+abstract class DD12 {
+  void m(Object x);
+}
+
+class D12 extends BB12 implements DD12 {}
+
+class A13 {}
+
+mixin M13 {
+  void m(int x) {}
+}
+
+class B13 extends A13 with M13 {}
+
+abstract class BB13 extends B13 {
+  void m(covariant num x);
+}
+
+class C13 extends BB13 {}
+
+abstract class DD13 {
+  void m(Object x);
+}
+
+class D13 extends BB13 implements DD13 {}
+
+class A14 {}
+
+mixin M14 {
+  void m(num x) {}
+}
+
+class B14 extends A14 with M14 {}
+
+abstract class BB14 extends B14 {
+  void m(covariant int x);
+}
+
+class C14 extends BB14 {}
+
+abstract class DD14 {
+  void m(Object x);
+}
+
+class D14 extends BB14 implements DD14 {}
+
+// Superclass: mixed-in, interface: implements.
+
+class A15 {}
+
+mixin M15 {
+  void m(num x) {}
+}
+
+class B15 extends A15 with M15 {}
+
+abstract class I15 {
+  void m(covariant num x);
+}
+
+class C15 extends B15 implements I15 {}
+
+abstract class JJ15 {
+  void m(Object x);
+}
+
+abstract class J15 implements JJ15 {
+  void m(covariant num x);
+}
+
+class D15 extends B15 implements J15 {}
+
+class A16 {}
+
+mixin M16 {
+  void m(int x) {}
+}
+
+class B16 extends A16 with M16 {}
+
+abstract class I16 {
+  void m(covariant num x);
+}
+
+class C16 extends B16 implements I16 {}
+
+abstract class JJ16 {
+  void m(Object x);
+}
+
+abstract class J16 implements JJ16 {
+  void m(covariant num x);
+}
+
+class D16 extends B16 implements J16 {}
+
+class A17 {}
+
+mixin M17 {
+  void m(num x) {}
+}
+
+class B17 extends A17 with M17 {}
+
+abstract class I17 {
+  void m(covariant int x);
+}
+
+class C17 extends B17 implements I17 {}
+
+abstract class JJ17 {
+  void m(Object x);
+}
+
+abstract class J17 implements JJ17 {
+  void m(covariant int x);
+}
+
+class D17 extends B17 implements J17 {}
+
+void main() {
+  // Demonstrate that each leaf class requires and has a dynamic
+  // type check (which is most likely placed in a forwarding stub).
+  const o = Object();
+
+  B0 x0 = C0();
+  x0.m(0.0);
+  DD0 y0 = D0();
+  Expect.throws(() => y0.m(o));
+
+  C1 x1 = C1();
+  Expect.throws(() => x1.m(1.1));
+  DD1 y1 = D1();
+  Expect.throws(() => y1.m(o));
+
+  B2 x2 = C2();
+  x2.m(2.2);
+  DD2 y2 = D2();
+  Expect.throws(() => y2.m(o));
+
+  B3 x3 = C3();
+  x3.m(3.3);
+  DD3 y3 = D3();
+  Expect.throws(() => y3.m(o));
+
+  C4 x4 = C4();
+  Expect.throws(() => x4.m(4.4));
+  DD4 y4 = D4();
+  Expect.throws(() => y4.m(o));
+
+  B5 x5 = C5();
+  x5.m(5.5);
+  DD5 y5 = D5();
+  Expect.throws(() => y5.m(o));
+
+  B6 x6 = C6();
+  x6.m(6.6);
+  JJ6 y6 = D6();
+  Expect.throws(() => y6.m(o));
+
+  C7 x7 = C7();
+  Expect.throws(() => x7.m(7.7));
+  JJ7 y7 = D7();
+  Expect.throws(() => y7.m(o));
+
+  B8 x8 = C8();
+  x8.m(8.8);
+  JJ8 y8 = D8();
+  Expect.throws(() => y8.m(o));
+
+  B9 x9 = C9();
+  x9.m(1.1);
+  DD9 y9 = D9();
+  Expect.throws(() => y9.m(o));
+
+  C10 x10 = C10();
+  Expect.throws(() => x10.m(10.10));
+  DD10 y10 = D10();
+  Expect.throws(() => y10.m(o));
+
+  B11 x11 = C11();
+  x11.m(11.11);
+  DD11 y11 = D11();
+  Expect.throws(() => y11.m(o));
+
+  B12 x12 = C12();
+  x12.m(12.12);
+  DD12 y12 = D12();
+  Expect.throws(() => y12.m(o));
+
+  C13 x13 = C13();
+  Expect.throws(() => x13.m(13.13));
+  DD13 y13 = D13();
+  Expect.throws(() => y13.m(o));
+
+  B14 x14 = C14();
+  x14.m(14.14);
+  DD14 y14 = D14();
+  Expect.throws(() => y14.m(o));
+
+  B15 x15 = C15();
+  x15.m(15.15);
+  JJ15 y15 = D15();
+  Expect.throws(() => y15.m(o));
+
+  C16 x16 = C16();
+  Expect.throws(() => x16.m(16.16));
+  JJ16 y16 = D16();
+  Expect.throws(() => y16.m(o));
+
+  B17 x17 = C17();
+  x17.m(17.17);
+  JJ17 y17 = D17();
+  Expect.throws(() => y17.m(o));
+}
diff --git a/tests/language/covariant/override_covariant_superclass_test.dart b/tests/language/covariant/override_covariant_superclass_test.dart
new file mode 100644
index 0000000..5c78272
--- /dev/null
+++ b/tests/language/covariant/override_covariant_superclass_test.dart
@@ -0,0 +1,508 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test cases where an inherited method has a parameter `p0` that
+// corresponds to a parameter `p1` in the interface, where `p0` is
+// covariant-by-declaration, but `p1` is not.
+//
+// The library contains groups of classes depending on each other, and there
+// is no connection between the groups. Each group has a number (0 .. 17)
+// which is used at the end of most names in the group. For example, the first
+// group consists of the classes `B0`, `C0`, `DD0`, and `D0`. The group number
+// is shown as `#` in the remainder of this comment.
+//
+// In every group, the classes `C#` and `D#` are concrete leaf classes
+// exhibiting the situation of interest, that is, an inherited implementation
+// of the method `m` as well as a signature for `m` in the interface of the
+// class, with a parameter that has the above-mentioned properties.
+//
+// The parameter type in the implementation and the parameter type in the
+// method signature is (`num`, `num`), (`int`, `num`) and (`num`, `int`),
+// respectively, such that we test a covariant, contravariant and invariant
+// parameter type relationship in the overrides.
+//
+// In every group, the class `B#` contains the implementation of the method
+// `m` which is inherited. Class `A#` and mixin `M#`, present in some groups,
+// are used to provide the method implementation to `B#` using a mixin
+// application.
+//
+// The classes `BB#`, `I#`, `DD#`, `J#`, and `JJ#` are helper classes for `C#`
+// and `#D`.
+//
+// Class `BB#` is a subclass of `B#` and a superclass of `C#` and `D#`; it
+// introduces the method signature of `m` into the superclass chain.
+//
+// Class `DD#` is implemented by `D#`. Classes `I#`, `J#`, and `JJ#` are
+// implemented by `C#` or `D#`. Class `DD#` and `JJ#` ensure that `m` can be
+// called with an argument of type `Object`. Class `I#` and `J#` introduce the
+// method signature to `C#` or `D#` via an `implements` relation.
+//
+// Finally, `main` contains test cases where the dynamic type check is
+// incurred, using variable types and arguments that make the type check
+// fail whenever possible.
+//
+// The comments below about 'Superclass' and 'interface' indicate the way in
+// which the superclass of `C#` and `D#` is structured (it can be a regular
+// class or a mixin), and the way in which the superinterface that provides
+// the method signature is structured (it can be declared in `C#` or `D#`,
+// "immediate", or it can be obtained via an `extends` relation or via an
+// `implements` relation).
+
+import 'package:expect/expect.dart';
+
+// Superclass: regular, interface: immediate.
+
+class B0 {
+  void m(covariant num x) {}
+}
+
+class C0 extends B0 {
+  void m(num x);
+}
+
+abstract class DD0 {
+  void m(Object x);
+}
+
+class D0 extends B0 implements DD0 {
+  void m(num x);
+}
+
+class B1 {
+  void m(covariant int x) {}
+}
+
+class C1 extends B1 {
+  void m(num x);
+}
+
+abstract class DD1 {
+  void m(Object x);
+}
+
+class D1 extends B1 implements DD1 {
+  void m(num x);
+}
+
+class B2 {
+  void m(covariant num x) {}
+}
+
+class C2 extends B2 {
+  void m(int x);
+}
+
+abstract class DD2 {
+  void m(Object x);
+}
+
+class D2 extends B2 implements DD2 {
+  void m(int x);
+}
+
+// Superclass: regular, interface: extends.
+
+class B3 {
+  void m(covariant num x) {}
+}
+
+abstract class BB3 extends B3 {
+  void m(num x);
+}
+
+class C3 extends BB3 {}
+
+abstract class DD3 {
+  void m(Object x);
+}
+
+class D3 extends BB3 implements DD3 {}
+
+class B4 {
+  void m(covariant int x) {}
+}
+
+abstract class BB4 extends B4 {
+  void m(num x);
+}
+
+class C4 extends BB4 {}
+
+abstract class DD4 {
+  void m(Object x);
+}
+
+class D4 extends BB4 implements DD4 {}
+
+class B5 {
+  void m(covariant num x) {}
+}
+
+abstract class BB5 extends B5 {
+  void m(int x);
+}
+
+class C5 extends BB5 {}
+
+abstract class DD5 {
+  void m(Object x);
+}
+
+class D5 extends BB5 implements DD5 {}
+
+// Superclass: regular, interface: implements.
+
+class B6 {
+  void m(covariant num x) {}
+}
+
+abstract class I6 {
+  void m(num x);
+}
+
+class C6 extends B6 implements I6 {}
+
+abstract class JJ6 {
+  void m(Object x);
+}
+
+abstract class J6 {
+  void m(num x);
+}
+
+class D6 extends B6 implements J6, JJ6 {}
+
+class B7 {
+  void m(covariant int x) {}
+}
+
+abstract class I7 {
+  void m(num x);
+}
+
+class C7 extends B7 implements I7 {}
+
+abstract class JJ7 {
+  void m(Object x);
+}
+
+abstract class J7 {
+  void m(num x);
+}
+
+class D7 extends B7 implements J7, JJ7 {}
+
+class B8 {
+  void m(covariant num x) {}
+}
+
+abstract class I8 {
+  void m(int x);
+}
+
+class C8 extends B8 implements I8 {}
+
+abstract class JJ8 {
+  void m(Object x);
+}
+
+abstract class J8 {
+  void m(int x);
+}
+
+class D8 extends B8 implements J8, JJ8 {}
+
+// Superclass: mixed-in, interface: immediate.
+
+class A9 {}
+
+mixin M9 {
+  void m(covariant num x) {}
+}
+
+class B9 extends A9 with M9 {}
+
+class C9 extends B9 {
+  void m(num x);
+}
+
+abstract class DD9 {
+  void m(Object x);
+}
+
+class D9 extends B9 implements DD9 {
+  void m(num x);
+}
+
+class A10 {}
+
+mixin M10 {
+  void m(covariant int x) {}
+}
+
+class B10 extends A10 with M10 {}
+
+class C10 extends B10 {
+  void m(num x);
+}
+
+abstract class DD10 {
+  void m(Object x);
+}
+
+class D10 extends B10 implements DD10 {
+  void m(num x);
+}
+
+class A11 {}
+
+mixin M11 {
+  void m(covariant num x) {}
+}
+
+class B11 extends A11 with M11 {}
+
+class C11 extends B11 {
+  void m(int x);
+}
+
+abstract class DD11 {
+  void m(Object x);
+}
+
+class D11 extends B11 implements DD11 {
+  void m(int x);
+}
+
+// Superclass: mixed-in, interface: extends.
+
+class A12 {}
+
+mixin M12 {
+  void m(covariant num x) {}
+}
+
+class B12 extends A12 with M12 {}
+
+abstract class BB12 extends B12 {
+  void m(num x);
+}
+
+class C12 extends BB12 {}
+
+abstract class DD12 {
+  void m(Object x);
+}
+
+class D12 extends BB12 implements DD12 {}
+
+class A13 {}
+
+mixin M13 {
+  void m(covariant int x) {}
+}
+
+class B13 extends A13 with M13 {}
+
+abstract class BB13 extends B13 {
+  void m(num x);
+}
+
+class C13 extends BB13 {}
+
+abstract class DD13 {
+  void m(Object x);
+}
+
+class D13 extends BB13 implements DD13 {}
+
+class A14 {}
+
+mixin M14 {
+  void m(covariant num x) {}
+}
+
+class B14 extends A14 with M14 {}
+
+abstract class BB14 extends B14 {
+  void m(int x);
+}
+
+class C14 extends BB14 {}
+
+abstract class DD14 {
+  void m(Object x);
+}
+
+class D14 extends BB14 implements DD14 {}
+
+// Superclass: mixed-in, interface: implements.
+
+class A15 {}
+
+mixin M15 {
+  void m(covariant num x) {}
+}
+
+class B15 extends A15 with M15 {}
+
+abstract class I15 {
+  void m(num x);
+}
+
+class C15 extends B15 implements I15 {}
+
+abstract class JJ15 {
+  void m(Object x);
+}
+
+abstract class J15 {
+  void m(num x);
+}
+
+class D15 extends B15 implements J15, JJ15 {}
+
+class A16 {}
+
+mixin M16 {
+  void m(covariant int x) {}
+}
+
+class B16 extends A16 with M16 {}
+
+abstract class I16 {
+  void m(num x);
+}
+
+class C16 extends B16 implements I16 {}
+
+abstract class JJ16 {
+  void m(Object x);
+}
+
+abstract class J16 {
+  void m(num x);
+}
+
+class D16 extends B16 implements J16, JJ16 {}
+
+class A17 {}
+
+mixin M17 {
+  void m(covariant num x) {}
+}
+
+class B17 extends A17 with M17 {}
+
+abstract class I17 {
+  void m(int x);
+}
+
+class C17 extends B17 implements I17 {}
+
+abstract class JJ17 {
+  void m(Object x);
+}
+
+abstract class J17 {
+  void m(int x);
+}
+
+class D17 extends B17 implements J17, JJ17 {}
+
+void main() {
+  // Demonstrate that each leaf class requires and has a dynamic
+  // type check (which is most likely placed in a forwarding stub).
+  const o = Object();
+
+  B0 x0 = C0();
+  x0.m(0.0);
+  DD0 y0 = D0();
+  Expect.throws(() => y0.m(o));
+
+  C1 x1 = C1();
+  Expect.throws(() => x1.m(1.1));
+  DD1 y1 = D1();
+  Expect.throws(() => y1.m(o));
+
+  B2 x2 = C2();
+  x2.m(2.2);
+  DD2 y2 = D2();
+  Expect.throws(() => y2.m(o));
+
+  B3 x3 = C3();
+  x3.m(3.3);
+  DD3 y3 = D3();
+  Expect.throws(() => y3.m(o));
+
+  C4 x4 = C4();
+  Expect.throws(() => x4.m(4.4));
+  DD4 y4 = D4();
+  Expect.throws(() => y4.m(o));
+
+  B5 x5 = C5();
+  x5.m(5.5);
+  DD5 y5 = D5();
+  Expect.throws(() => y5.m(o));
+
+  B6 x6 = C6();
+  x6.m(6.6);
+  JJ6 y6 = D6();
+  Expect.throws(() => y6.m(o));
+
+  C7 x7 = C7();
+  Expect.throws(() => x7.m(7.7));
+  JJ7 y7 = D7();
+  Expect.throws(() => y7.m(o));
+
+  B8 x8 = C8();
+  x8.m(8.8);
+  JJ8 y8 = D8();
+  Expect.throws(() => y8.m(o));
+
+  B9 x9 = C9();
+  x9.m(1.1);
+  DD9 y9 = D9();
+  Expect.throws(() => y9.m(o));
+
+  C10 x10 = C10();
+  Expect.throws(() => x10.m(10.10));
+  DD10 y10 = D10();
+  Expect.throws(() => y10.m(o));
+
+  B11 x11 = C11();
+  x11.m(11.11);
+  DD11 y11 = D11();
+  Expect.throws(() => y11.m(o));
+
+  B12 x12 = C12();
+  x12.m(12.12);
+  DD12 y12 = D12();
+  Expect.throws(() => y12.m(o));
+
+  C13 x13 = C13();
+  Expect.throws(() => x13.m(13.13));
+  DD13 y13 = D13();
+  Expect.throws(() => y13.m(o));
+
+  B14 x14 = C14();
+  x14.m(14.14);
+  DD14 y14 = D14();
+  Expect.throws(() => y14.m(o));
+
+  B15 x15 = C15();
+  x15.m(15.15);
+  JJ15 y15 = D15();
+  Expect.throws(() => y15.m(o));
+
+  C16 x16 = C16();
+  Expect.throws(() => x16.m(16.16));
+  JJ16 y16 = D16();
+  Expect.throws(() => y16.m(o));
+
+  B17 x17 = C17();
+  x17.m(17.17);
+  JJ17 y17 = D17();
+  Expect.throws(() => y17.m(o));
+}
diff --git a/tools/VERSION b/tools/VERSION
index 5e0638b..3897460 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 70
+PRERELEASE 71
 PRERELEASE_PATCH 0
\ No newline at end of file
