Fixed Issue #465: new tests added.
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t117.dart b/LanguageFeatures/nnbd/override_checking_A06_t117.dart
index 2bdc80f..6c3ff10 100644
--- a/LanguageFeatures/nnbd/override_checking_A06_t117.dart
+++ b/LanguageFeatures/nnbd/override_checking_A06_t117.dart
@@ -15,6 +15,7 @@
  *   NNBD_TOP_MERGE(FutureOr*, FutureOr*) = FutureOr
  *   NNBD_TOP_MERGE(FutureOr<int>>*, FutureOr<int>>) = FutureOr<int?>
  *   NNBD_TOP_MERGE<FutureOr<FutureOr>>*, FutureOr<FutureOr>>*) = FutureOr<FutureOr>
+ *
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=non-nullable
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t120.dart b/LanguageFeatures/nnbd/override_checking_A06_t120.dart
new file mode 100644
index 0000000..f5762e4
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t120.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 in the following cases:
+ *   NNBD_TOP_MERGE(Object*, int*)
+ *   NNBD_TOP_MERGE(Object*, Function*)
+ *   NNBD_TOP_MERGE(Object*, Null*)
+ *   NNBD_TOP_MERGE(Object*, Never*)
+ *   NNBD_TOP_MERGE(Object*, FutureOr<int>*)
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "override_checking_A06_opted_out_lib.dart";
+
+class C1 extends out_Object implements out_int {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C2 extends out_int implements out_Object {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C3 extends out_Object implements out_Function {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C4 extends out_Function implements out_Object {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C5 extends out_Object implements out_Null {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C6 extends out_Null implements out_Object {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C7 extends out_Object implements out_Never {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C8 extends out_Never implements out_Object {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C9 extends out_Object implements out_FutureOr_int {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C10 extends out_FutureOr_int implements out_Object {}
+//    ^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+main() {}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t121.dart b/LanguageFeatures/nnbd/override_checking_A06_t121.dart
new file mode 100644
index 0000000..17698f4
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t121.dart
@@ -0,0 +1,32 @@
+/*
+ * 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 [NNBD_TOP_MERGE(Object*, dynamic*)] is [Object?]
+ *
+ * @Issue 40481
+ * @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_Object  implements out_dynamic {}
+class C2 extends out_dynamic implements out_Object  {}
+
+
+main() {
+  Expect.equals(typeOf<Object?>(), C1().getType());
+  Expect.equals(typeOf<Object?>(), C2().getType());
+}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t122.dart b/LanguageFeatures/nnbd/override_checking_A06_t122.dart
new file mode 100644
index 0000000..f35f529
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t122.dart
@@ -0,0 +1,32 @@
+/*
+ * 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 [NNBD_TOP_MERGE(Object*, void*)] is [Object?]
+ *
+ * @Issue 40481
+ * @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_Object  implements out_dynamic {}
+class C2 extends out_dynamic implements out_Object  {}
+
+
+main() {
+  Expect.equals(typeOf<Object?>(), C1().getType());
+  Expect.equals(typeOf<Object?>(), C2().getType());
+}
diff --git a/LanguageFeatures/nnbd/override_checking_A06_t123.dart b/LanguageFeatures/nnbd/override_checking_A06_t123.dart
new file mode 100644
index 0000000..752b1d7
--- /dev/null
+++ b/LanguageFeatures/nnbd/override_checking_A06_t123.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(Object*,
+ * 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_Object  implements B {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C2 extends B implements out_Object  {}
+//    ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+main() {}