Issue #1092: Instantiate-to-bound/typedef/static/typedef_typedef_l1_t14.dart test updasted acording to the Spec.
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_typedef_l1_t14.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_typedef_l1_t14.dart
index e0e4a95..1acd368 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_typedef_l1_t14.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_typedef_l1_t14.dart
@@ -42,6 +42,35 @@
/// [<U1,m ..., Uk,m>].
/// @description Checks that instantiate-to-bounds works correctly for
/// typedef A<X> = void Function(X); typedef G<X extends A<X>> = void Function()
+///
+/// To compute i2b on `G`, we have
+// X, no variance
+// -----------------------
+// A<X> Break cycle {X}
+// A<dynamic>
+//
+// The reason why we use [dynamic] rather than [Never] to break the cycle is
+// that it occurs in a position which isn't contravariant (in [G<A<X>>], [A<X>]
+// occurs in a position that has no variance, and hence [X] occurs in a position
+// that has no variance).
+//
+// So [G] means [G<A<dynamic>>], which is a well-bounded type (`A<dynamic> ==
+// void Function(dynamic) <: void Function(void Function(dynamic)) ==
+// A<A<dynamic>>`).
+//
+// However, [G<T>] is simply [void Function()] for all [T], so in the
+// initializations of [targetN], [N] in [1..8], the initializing expression has
+// the type [void Function()].
+//
+// So we just need to consider whether the declared types are OK, because each
+// of them just means [void Function()], unless it's an error.
+//
+// The tools are right: each of [G<A<A<dynamic>>>], [G<A<A<A<dynamic>>>],
+// [G<A<A<A<A<dynamic>>>>>] is either regular-bounded (with an odd number of
+// [A]s) or super-bounded (with an even number of [A]s), and the ones with
+// [Never] are regular-bounded for an even number of [A]s and an error for an
+// odd number of [A]s.
+
/// @Issue 41963, 41964
/// @author iarkh@unipro.ru
@@ -66,20 +95,30 @@
F<G<A<A<A<dynamic>>>>> target3 = fsource;
F<G<A<A<A<A<dynamic>>>>>> target4 = fsource;
F<G<A<A<Never>>>> target5 = fsource;
+
F<G<A<A<A<Never>>>>> target6 = fsource;
+// ^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
F<G<A<A<A<A<Never>>>>>> target7 = fsource;
- F<G<A<A<Null>>>> target8 = fsource;
+ F<G<A<A<A<A<A<Never>>>>>>> target8 = fsource;
+// ^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+ F<G<A<A<Null>>>> target9 = fsource;
// ^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
- F<G<A<A<A<Null>>>>> target9 = fsource;
-// ^^^^^^^
+ F<G<A<A<A<Null>>>>> target10 = fsource;
+// ^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
- F<G<A<A<A<A<Null>>>>>> target10 = fsource;
+ F<G<A<A<A<A<Null>>>>>> target11 = fsource;
// ^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified