Fixed Issue #465: new tests added.
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t102.dart b/LanguageFeatures/nnbd/override_checking_A06_t102.dart
index 5b83382..95b5bd5 100644
--- a/LanguageFeatures/nnbd/override_checking_A06_t102.dart
+++ b/LanguageFeatures/nnbd/override_checking_A06_t102.dart
@@ -14,6 +14,7 @@
  * @description Check that error occurs as a result of [NNBD_TOP_MERGE(FutureOr,
  * FutureOr<FutureOr>].
  *
+ * @Issue 40454
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=non-nullable
@@ -22,8 +23,8 @@
 import "dart:async";
 
 class A<T> {}
-class B  implements A<FutureOr>           {}
-class C implements A<FutureOr<FutureOr>>  {}
+class B implements A<FutureOr>           {}
+class C implements A<FutureOr<FutureOr>> {}
 
 class D1 extends B implements C {}
 //    ^^
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t134.dart b/LanguageFeatures/nnbd/override_checking_A06_t134.dart
new file mode 100644
index 0000000..eeb98fc
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t134.dart
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check that result of [NNBD_TOP_MERGE(dynamic*,
+ * FutureOr<FutureOr>)] is [dynamic].
+ *
+ * @Issue 40541
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "dart:async";
+import "../../Utils/expect.dart";
+import "override_checking_A06_opted_out_lib.dart";
+
+class B extends A<FutureOr<FutureOr>> {}
+
+class in1 extends out_dynamic implements B           {}
+class in2 extends B           implements out_dynamic {}
+
+main() {
+  Expect.equals(typeOf<dynamic>(), in1().getType());
+  Expect.equals(typeOf<dynamic>(), in2().getType());
+}
\ No newline at end of file
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t135.dart b/LanguageFeatures/nnbd/override_checking_A06_t135.dart
new file mode 100644
index 0000000..bd2ec1a
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t135.dart
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check that error occurs as a result of [NNBD_TOP_MERGE(dynamic,
+ * Never)].
+ *
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+class A<T> {}
+class B implements A<dynamic> {}
+class C implements A<Never> {}
+
+class D1 extends B implements C {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class D2 extends  C implements B {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+void main() {}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t136.dart b/LanguageFeatures/nnbd/override_checking_A06_t136.dart
new file mode 100644
index 0000000..890748c
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t136.dart
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check that error occurs as a result of [NNBD_TOP_MERGE(dynamic,
+ * Never*).
+ *
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "override_checking_A06_opted_out_lib.dart";
+
+class B extends A<dynamic> {}
+
+class C1 extends out_Never implements B {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C2 extends B implements out_Never {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+main() {}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t137.dart b/LanguageFeatures/nnbd/override_checking_A06_t137.dart
new file mode 100644
index 0000000..22b1da3
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t137.dart
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check that error occurs as a result of [NNBD_TOP_MERGE(dynamic*,
+ * Never).
+ *
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "override_checking_A06_opted_out_lib.dart";
+
+class B extends A<Never> {}
+
+class C1 extends out_dynamic implements B {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C2 extends B implements out_dynamic {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+main() {}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t138.dart b/LanguageFeatures/nnbd/override_checking_A06_t138.dart
new file mode 100644
index 0000000..a504b1f
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t138.dart
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check that error occurs as a result of [NNBD_TOP_MERGE(dynamic*,
+ * Never*).
+ *
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "override_checking_A06_opted_out_lib.dart";
+
+class C1 extends out_dynamic implements out_Never {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C2 extends out_dynamic implements out_Never {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+main() {}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t139.dart b/LanguageFeatures/nnbd/override_checking_A06_t139.dart
new file mode 100644
index 0000000..7ad6070
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t139.dart
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check the following cases:
+ *   [NNBD_TOP_MERGE(dynamic*, FutureOr*)] is [Object?]
+ *   [NNBD_TOP_MERGE(dynamic*, FutureOr<FutureOr>*)] is [Object?]
+ *
+ * @Issue 40454
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "../../Utils/expect.dart";
+import "override_checking_A06_opted_out_lib.dart";
+
+class C1 extends out_dynamic   implements out_FutureOr {}
+class C2 extends out_FutureOr implements out_dynamic   {}
+
+class C3 extends out_dynamic           implements out_FutureOr_FutureOr {}
+class C4 extends out_FutureOr_FutureOr implements out_dynamic           {}
+
+main() {
+  Expect.equals(typeOf<dynamic>(), C1().getType());
+  Expect.equals(typeOf<dynamic>(), C2().getType());
+  Expect.equals(typeOf<dynamic>(), C3().getType());
+  Expect.equals(typeOf<dynamic>(), C4().getType());
+}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t140.dart b/LanguageFeatures/nnbd/override_checking_A06_t140.dart
new file mode 100644
index 0000000..fd05bc5
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t140.dart
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check that error occurs as a result of the following cases:
+ *    [NNBD_TOP_MERGE(dynamic*, FutureOr<int>).
+ *    [NNBD_TOP_MERGE(dynamic*, FutureOr<int?>).
+ *
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "dart:async";
+import "override_checking_A06_opted_out_lib.dart";
+
+class B1 extends A<FutureOr<int>> {}
+class B2 extends A<FutureOr<int?>> {}
+
+class C1 extends out_dynamic implements B1 {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C2 extends B1 implements out_dynamic {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C3 extends out_dynamic implements B2 {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C4 extends B2 implements out_dynamic {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+main() {}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t141.dart b/LanguageFeatures/nnbd/override_checking_A06_t141.dart
new file mode 100644
index 0000000..8ed1948
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t141.dart
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check that error occurs as a result of [NNBD_TOP_MERGE(void,
+ * Never)].
+ *
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+class A<T> {}
+class B implements A<void> {}
+class C implements A<Never> {}
+
+class D1 extends B implements C {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class D2 extends  C implements B {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+void main() {}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t142.dart b/LanguageFeatures/nnbd/override_checking_A06_t142.dart
new file mode 100644
index 0000000..dc3eed8
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t142.dart
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check that error occurs as a result of [NNBD_TOP_MERGE(void,
+ * Never*).
+ *
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "override_checking_A06_opted_out_lib.dart";
+
+class B extends A<void> {}
+
+class C1 extends out_Never implements B {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C2 extends B implements out_Never {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+main() {}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t143.dart b/LanguageFeatures/nnbd/override_checking_A06_t143.dart
new file mode 100644
index 0000000..dc3eed8
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t143.dart
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check that error occurs as a result of [NNBD_TOP_MERGE(void,
+ * Never*).
+ *
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "override_checking_A06_opted_out_lib.dart";
+
+class B extends A<void> {}
+
+class C1 extends out_Never implements B {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C2 extends B implements out_Never {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+main() {}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t144.dart b/LanguageFeatures/nnbd/override_checking_A06_t144.dart
new file mode 100644
index 0000000..f913264
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t144.dart
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check that error occurs as a result of [NNBD_TOP_MERGE(void*,
+ * Never*).
+ *
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "override_checking_A06_opted_out_lib.dart";
+
+class C1 extends out_void implements out_Never {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C2 extends out_Never implements out_void {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+main() {}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t145.dart b/LanguageFeatures/nnbd/override_checking_A06_t145.dart
new file mode 100644
index 0000000..8d15c98
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t145.dart
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check that error occurs as a result of [NNBD_TOP_MERGE(Null,
+ * Never)].
+ *
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+class A<T> {}
+class B implements A<Null> {}
+class C implements A<Never> {}
+
+class D1 extends B implements C {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class D2 extends  C implements B {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+void main() {}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t146.dart b/LanguageFeatures/nnbd/override_checking_A06_t146.dart
new file mode 100644
index 0000000..be746a1
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t146.dart
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check that error occurs as a result of the following cases:
+ *    [NNBD_TOP_MERGE(void*, FutureOr<int>)
+ *    [NNBD_TOP_MERGE(void*, FutureOr<int?>).
+ *
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "dart:async";
+import "override_checking_A06_opted_out_lib.dart";
+
+class B1 extends A<FutureOr<int>> {}
+class B2 extends A<FutureOr<int?>> {}
+
+class C1 extends out_void implements B1 {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C2 extends B1 implements out_void {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C3 extends out_void implements B2 {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C4 extends B2 implements out_void {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+main() {}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t147.dart b/LanguageFeatures/nnbd/override_checking_A06_t147.dart
new file mode 100644
index 0000000..2f3e835
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t147.dart
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check the following cases:
+ *   [NNBD_TOP_MERGE(void*, FutureOr*)] is [FutureOr]
+ *   [NNBD_TOP_MERGE(void*, FutureOr<FutureOr>*)] is [FutureOr<FutureOr>]
+ *
+ * @Issue 40541
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "dart:async";
+import "../../Utils/expect.dart";
+import "override_checking_A06_opted_out_lib.dart";
+
+class C1 extends out_void     implements out_FutureOr {}
+class C2 extends out_FutureOr implements out_void     {}
+
+class C3 extends out_void              implements out_FutureOr_FutureOr {}
+class C4 extends out_FutureOr_FutureOr implements out_void              {}
+
+main() {
+  Expect.equals(typeOf<FutureOr>(), C1().getType());
+  Expect.equals(typeOf<FutureOr>(), C2().getType());
+
+  Expect.equals(typeOf<FutureOr<FutureOr>>(), C3().getType());
+  Expect.equals(typeOf<FutureOr<FutureOr>>(), C4().getType());
+}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t148.dart b/LanguageFeatures/nnbd/override_checking_A06_t148.dart
new file mode 100644
index 0000000..4edfe7b
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t148.dart
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check that result of [NNBD_TOP_MERGE(void*,
+ * FutureOr<FutureOr>)] is [FutureOr<FutureOr>].
+ *
+ * @Issue 40541
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "dart:async";
+import "../../Utils/expect.dart";
+import "override_checking_A06_opted_out_lib.dart";
+
+class B extends A<FutureOr<FutureOr>> {}
+
+class in1 extends out_void implements B        {}
+class in2 extends B        implements out_void {}
+
+main() {
+  Expect.equals(typeOf<FutureOr<FutureOr>>(), in1().getType());
+  Expect.equals(typeOf<FutureOr<FutureOr>>(), in2().getType());
+}
\ No newline at end of file
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t149.dart b/LanguageFeatures/nnbd/override_checking_A06_t149.dart
new file mode 100644
index 0000000..e20781f
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t149.dart
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check that error occurs as a result of [NNBD_TOP_MERGE(
+ * FutureOr*, FutureOr<FutureOr>*).
+ *
+ * Issue @40454
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "override_checking_A06_opted_out_lib.dart";
+
+class C1 extends out_FutureOr implements out_FutureOr_FutureOr {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C2 extends out_FutureOr_FutureOr implements out_FutureOr {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+main() {}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t150.dart b/LanguageFeatures/nnbd/override_checking_A06_t150.dart
new file mode 100644
index 0000000..ee5e343
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t150.dart
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check that error occurs as a result of the following cases:
+ *
+ *    [NNBD_TOP_MERGE(Never, FutureOr)].
+ *    [NNBD_TOP_MERGE(Never, FutureOr<int>)].
+ *    [NNBD_TOP_MERGE(Never, FutureOr<int?>)].
+ *    [NNBD_TOP_MERGE(Never, FutureOr<FutureOr>)].
+ *
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "dart:async";
+
+class A<T> {}
+
+class B implements A<Never> {}
+
+class C1 implements A<FutureOr> {}
+class C2 implements A<FutureOr<int>> {}
+class C3 implements A<FutureOr<int?>> {}
+class C4 implements A<FutureOr<FutureOr>> {}
+
+class D1 extends B implements C1 {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class D2 extends C1 implements B {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class D3 extends B implements C2 {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class D4 extends C2 implements B {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class D5 extends B implements C3 {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class D6 extends C3 implements B {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class D7 extends B implements C4 {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class D8 extends C4 implements B {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+void main() {}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t151.dart b/LanguageFeatures/nnbd/override_checking_A06_t151.dart
new file mode 100644
index 0000000..84e3777
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t151.dart
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check that error occurs as a result of the following cases:
+ *
+ *    [NNBD_TOP_MERGE(Never*, FutureOr)].
+ *    [NNBD_TOP_MERGE(Never*, FutureOr<int>)].
+ *    [NNBD_TOP_MERGE(Never*, FutureOr<int?>)].
+ *    [NNBD_TOP_MERGE(Never*, FutureOr<FutureOr>)].
+ *
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "dart:async";
+import "override_checking_A06_opted_out_lib.dart";
+
+class C1 extends A<FutureOr> {}
+class C2 extends A<FutureOr<int>> {}
+class C3 extends A<FutureOr<int?>> {}
+class C4 extends A<FutureOr<FutureOr>> {}
+
+class D1 extends out_Never implements C1 {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class D2 extends C1 implements out_Never {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class D3 extends out_Never implements C2 {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class D4 extends C2 implements out_Never {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class D5 extends out_Never implements C3 {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class D6 extends C3 implements out_Never {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class D7 extends out_Never implements C4 {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class D8 extends C4 implements out_Never {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+void main() {}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t152.dart b/LanguageFeatures/nnbd/override_checking_A06_t152.dart
new file mode 100644
index 0000000..81b1e16
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t152.dart
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check that error occurs as a result of [NNBD_TOP_MERGE] of
+ * [Null] vs [FutureOr*].
+ *
+ * @Issue 40454
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "override_checking_A06_opted_out_lib.dart";
+
+class B extends A<Null> {}
+
+class in_FutureOr extends out_FutureOr implements B {}
+//    ^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class in_FutureOr_int extends out_FutureOr_int implements B {}
+//    ^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class in_FutureOr_FutureOr extends out_FutureOr_FutureOr implements B {}
+//    ^^^^^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class in_FutureOr1 extends B implements out_FutureOr {}
+//    ^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class in_FutureOr_int1 extends B implements out_FutureOr_int {}
+//    ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class in_FutureOr_FutureOr1 extends B implements out_FutureOr_FutureOr {}
+//    ^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+main() {}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t153.dart b/LanguageFeatures/nnbd/override_checking_A06_t153.dart
new file mode 100644
index 0000000..be04e01
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t153.dart
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion If a class [C] in an opted-in library implements the same generic
+ * class [I] more than once as [I0], .., [In], and at least one of the [Ii] is
+ * not syntactically equal to the others, then it is an error if
+ * [NNBD_TOP_MERGE(S0, ..., Sn)] is not defined where [Si] is [NORM(Ii)].
+ * Otherwise, for the purposes of runtime subtyping checks, [C] is considered to
+ * implement the canonical interface given by [NNBD_TOP_MERGE(S0, ..., Sn)].
+ *
+ * @description Check that error occurs as a result of [NNBD_TOP_MERGE] of
+ * [Never*] vs [FutureOr*].
+ *
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "override_checking_A06_opted_out_lib.dart";
+
+class in_FutureOr extends out_FutureOr implements out_Never {}
+//    ^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class in_FutureOr_int extends out_FutureOr_int implements out_Never {}
+//    ^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class in_FutureOr_FutureOr extends out_FutureOr_FutureOr implements out_Never {}
+//    ^^^^^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class in_FutureOr1 extends out_Never implements out_FutureOr {}
+//    ^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class in_FutureOr_int1 extends out_Never implements out_FutureOr_int {}
+//    ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class in_FutureOr_FutureOr1 extends out_Never implements out_FutureOr_FutureOr {}
+//    ^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+main() {}