[fasta] Update .expect files for non-simple bound tests

Change-Id: I88866d54f97455fd9b14fef7def20d6dd958b878
Reviewed-on: https://dart-review.googlesource.com/59088
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
diff --git a/pkg/front_end/testcases/compile.status b/pkg/front_end/testcases/compile.status
index 0314972..724e7d2 100644
--- a/pkg/front_end/testcases/compile.status
+++ b/pkg/front_end/testcases/compile.status
@@ -45,22 +45,9 @@
 inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1: Fail
 inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2: Fail
 
-instantiate_to_bound/non_simple_bound_due_to_non_simple: Fail
-instantiate_to_bound/non_simple_bound_due_to_variables: Fail
-instantiate_to_bound/non_simple_co_inductive: Fail
-instantiate_to_bound/non_simple_co_inductive_for_each: Fail
-instantiate_to_bound/non_simple_co_inductive_no_dup: Fail
-instantiate_to_bound/non_simple_folded_regress: Fail
-instantiate_to_bound/non_simple_for_each: Fail
-instantiate_to_bound/non_simple_generic_function_in_bound_regress: Fail
-instantiate_to_bound/non_simple_many: Fail
-instantiate_to_bound/non_simple_no_dup: Fail
-instantiate_to_bound/non_simple_suppress_consequence: Fail
-instantiate_to_bound/non_simple_variables_from_same: Fail
-instantiate_to_bound/non_simple_class_parametrized_typedef_cycle: Fail
-instantiate_to_bound/non_simple_class_typedef_cycle: Fail
-instantiate_to_bound/non_simple_from_compiled: Fail
-instantiate_to_bound/non_simple_many_libs_same_name_cycle: Fail
+instantiate_to_bound/body_typedef_super_bounded_type: Fail # Issue 33444
+instantiate_to_bound/non_simple_class_parametrized_typedef_cycle: RuntimeError # May be related to Issue 33479
+instantiate_to_bound/typedef_super_bounded_type: Fail # Issue 33444
 
 rasta/abstract_constructor: Fail
 rasta/bad_constructor_redirection: Fail
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.direct.expect
deleted file mode 100644
index 9471d94..0000000
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.direct.expect
+++ /dev/null
@@ -1,17 +0,0 @@
-library;
-import self as self;
-import "dart:core" as core;
-
-typedef A<T extends core::Object = dynamic> = (T) → dynamic;
-typedef B<U extends (U) → dynamic = dynamic> = (U) → dynamic;
-class C extends core::Object {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-  method foo() → dynamic {
-    (dynamic) → dynamic b;
-  }
-}
-static method main() → dynamic {
-  (dynamic) → dynamic b;
-}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.direct.transformed.expect
deleted file mode 100644
index 9471d94..0000000
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.direct.transformed.expect
+++ /dev/null
@@ -1,17 +0,0 @@
-library;
-import self as self;
-import "dart:core" as core;
-
-typedef A<T extends core::Object = dynamic> = (T) → dynamic;
-typedef B<U extends (U) → dynamic = dynamic> = (U) → dynamic;
-class C extends core::Object {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-  method foo() → dynamic {
-    (dynamic) → dynamic b;
-  }
-}
-static method main() → dynamic {
-  (dynamic) → dynamic b;
-}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.outline.expect
deleted file mode 100644
index f49fc49..0000000
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.outline.expect
+++ /dev/null
@@ -1,14 +0,0 @@
-library;
-import self as self;
-import "dart:core" as core;
-
-typedef A<T extends core::Object = dynamic> = (T) → dynamic;
-typedef B<U extends (U) → dynamic = dynamic> = (U) → dynamic;
-class C extends core::Object {
-  synthetic constructor •() → void
-    ;
-  method foo() → dynamic
-    ;
-}
-static method main() → dynamic
-  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.strong.expect
deleted file mode 100644
index 4024856..0000000
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.strong.expect
+++ /dev/null
@@ -1,17 +0,0 @@
-library;
-import self as self;
-import "dart:core" as core;
-
-typedef A<T extends core::Object> = (T) → dynamic;
-typedef B<U extends (U) → dynamic> = (U) → dynamic;
-class C extends core::Object {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-  method foo() → dynamic {
-    ((core::Null) → dynamic) → dynamic b;
-  }
-}
-static method main() → dynamic {
-  ((core::Null) → dynamic) → dynamic b;
-}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.direct.expect
new file mode 100644
index 0000000..cc42cff
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.direct.expect
@@ -0,0 +1,21 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<TypeT extends core::Object = dynamic, TypeS extends self::A::TypeT = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B<TypeU extends self::A<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class C<TypeV extends self::B<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static field self::C<dynamic> c;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.direct.transformed.expect
new file mode 100644
index 0000000..cc42cff
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.direct.transformed.expect
@@ -0,0 +1,21 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<TypeT extends core::Object = dynamic, TypeS extends self::A::TypeT = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B<TypeU extends self::A<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class C<TypeV extends self::B<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static field self::C<dynamic> c;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.outline.expect
new file mode 100644
index 0000000..0c77499
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.outline.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<TypeT extends core::Object = dynamic, TypeS extends self::A::TypeT = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class B<TypeU extends self::A<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class C<TypeV extends self::B<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static field self::C<dynamic> c;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.strong.expect
new file mode 100644
index 0000000..a4a2719
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.strong.expect
@@ -0,0 +1,25 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<TypeT extends core::Object = dynamic, TypeS extends self::A::TypeT = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B<TypeU extends self::A<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class C<TypeV extends self::B<dynamic> = self::B<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static field self::C<self::B<dynamic>> c;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart:12:9: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'A' here.
+class B<TypeU extends A> {}
+        ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.strong.transformed.expect
new file mode 100644
index 0000000..a4a2719
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.strong.transformed.expect
@@ -0,0 +1,25 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<TypeT extends core::Object = dynamic, TypeS extends self::A::TypeT = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B<TypeU extends self::A<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class C<TypeV extends self::B<dynamic> = self::B<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static field self::C<self::B<dynamic>> c;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart:12:9: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'A' here.
+class B<TypeU extends A> {}
+        ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.direct.expect
new file mode 100644
index 0000000..dfed3ee
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.direct.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<TypeT extends core::Object = dynamic, TypeS extends self::A::TypeT = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B<TypeU extends self::A<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static field self::B<dynamic> b;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.direct.transformed.expect
new file mode 100644
index 0000000..dfed3ee
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.direct.transformed.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<TypeT extends core::Object = dynamic, TypeS extends self::A::TypeT = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B<TypeU extends self::A<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static field self::B<dynamic> b;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.outline.expect
new file mode 100644
index 0000000..0108401
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.outline.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<TypeT extends core::Object = dynamic, TypeS extends self::A::TypeT = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class B<TypeU extends self::A<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static field self::B<dynamic> b;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.strong.expect
new file mode 100644
index 0000000..02c4ed2
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.strong.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<TypeT extends core::Object = dynamic, TypeS extends self::A::TypeT = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B<TypeU extends self::A<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static field self::B<dynamic> b;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart:11:9: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'A' here.
+class B<TypeU extends A> {}
+        ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.strong.transformed.expect
new file mode 100644
index 0000000..02c4ed2
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.strong.transformed.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<TypeT extends core::Object = dynamic, TypeS extends self::A::TypeT = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B<TypeU extends self::A<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static field self::B<dynamic> b;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart:11:9: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'A' here.
+class B<TypeU extends A> {}
+        ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.direct.expect
new file mode 100644
index 0000000..967b3da
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.direct.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Fisk = <TypeY extends self::Hest<dynamic> = dynamic>() → void;
+class Hest<TypeX extends <TypeY extends self::Hest<dynamic> = dynamic>() → void = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.direct.transformed.expect
new file mode 100644
index 0000000..967b3da
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.direct.transformed.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Fisk = <TypeY extends self::Hest<dynamic> = dynamic>() → void;
+class Hest<TypeX extends <TypeY extends self::Hest<dynamic> = dynamic>() → void = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.outline.expect
new file mode 100644
index 0000000..6ac4a79
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.outline.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Fisk = <TypeY extends self::Hest<dynamic> = dynamic>() → void;
+class Hest<TypeX extends <TypeY extends self::Hest<dynamic> = dynamic>() → void = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.direct.expect
new file mode 100644
index 0000000..8ff7174
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.direct.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Fisk<TypeY extends self::Hest<dynamic> = dynamic> = () → void;
+class Hest<TypeX extends () → void = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.direct.transformed.expect
new file mode 100644
index 0000000..8ff7174
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.direct.transformed.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Fisk<TypeY extends self::Hest<dynamic> = dynamic> = () → void;
+class Hest<TypeX extends () → void = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.outline.expect
new file mode 100644
index 0000000..57f4622
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.outline.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Fisk<TypeY extends self::Hest<dynamic> = dynamic> = () → void;
+class Hest<TypeX extends () → void = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.strong.expect
new file mode 100644
index 0000000..152e48b
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.strong.expect
@@ -0,0 +1,17 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Fisk<TypeY extends self::Hest<() → void> = dynamic> = () → void;
+class Hest<TypeX extends () → void = () → void> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart:10:14: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+typedef void Fisk<TypeY extends Hest>();
+             ^^^^", "pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart:10:14: Error: The typedef 'Fisk' has a reference to itself.
+typedef void Fisk<TypeY extends Hest>();
+             ^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.strong.transformed.expect
new file mode 100644
index 0000000..152e48b
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.strong.transformed.expect
@@ -0,0 +1,17 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Fisk<TypeY extends self::Hest<() → void> = dynamic> = () → void;
+class Hest<TypeX extends () → void = () → void> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart:10:14: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+typedef void Fisk<TypeY extends Hest>();
+             ^^^^", "pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart:10:14: Error: The typedef 'Fisk' has a reference to itself.
+typedef void Fisk<TypeY extends Hest>();
+             ^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.direct.expect
new file mode 100644
index 0000000..246facc
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.direct.expect
@@ -0,0 +1,10 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.direct.transformed.expect
new file mode 100644
index 0000000..246facc
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.direct.transformed.expect
@@ -0,0 +1,10 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.outline.expect
new file mode 100644
index 0000000..0db76ef
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.outline.expect
@@ -0,0 +1,10 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.strong.expect
new file mode 100644
index 0000000..192b8ba
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.strong.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart:8:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+Try providing type arguments to 'Hest' here.
+class Hest<TypeX extends Hest> {}
+           ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.strong.transformed.expect
new file mode 100644
index 0000000..192b8ba
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.strong.transformed.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart:8:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+Try providing type arguments to 'Hest' here.
+class Hest<TypeX extends Hest> {}
+           ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.direct.expect
new file mode 100644
index 0000000..e96669a
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.direct.expect
@@ -0,0 +1,10 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<dynamic, dynamic> = dynamic, TypeY extends self::Hest<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.direct.transformed.expect
new file mode 100644
index 0000000..e96669a
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.direct.transformed.expect
@@ -0,0 +1,10 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<dynamic, dynamic> = dynamic, TypeY extends self::Hest<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.outline.expect
new file mode 100644
index 0000000..6e46804
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.outline.expect
@@ -0,0 +1,10 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<dynamic, dynamic> = dynamic, TypeY extends self::Hest<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.strong.expect
new file mode 100644
index 0000000..8499ca8
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.strong.expect
@@ -0,0 +1,17 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<dynamic, dynamic> = dynamic, TypeY extends self::Hest<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart:8:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+Try providing type arguments to 'Hest' here.
+class Hest<TypeX extends Hest, TypeY extends Hest> {}
+           ^^^^^", "pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart:8:32: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+Try providing type arguments to 'Hest' here.
+class Hest<TypeX extends Hest, TypeY extends Hest> {}
+                               ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.strong.transformed.expect
new file mode 100644
index 0000000..8499ca8
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.strong.transformed.expect
@@ -0,0 +1,17 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<dynamic, dynamic> = dynamic, TypeY extends self::Hest<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart:8:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+Try providing type arguments to 'Hest' here.
+class Hest<TypeX extends Hest, TypeY extends Hest> {}
+           ^^^^^", "pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart:8:32: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+Try providing type arguments to 'Hest' here.
+class Hest<TypeX extends Hest, TypeY extends Hest> {}
+                               ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.direct.expect
new file mode 100644
index 0000000..9d87952
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.direct.expect
@@ -0,0 +1,10 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends core::Map<self::Hest<dynamic>, self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.direct.transformed.expect
new file mode 100644
index 0000000..9d87952
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.direct.transformed.expect
@@ -0,0 +1,10 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends core::Map<self::Hest<dynamic>, self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.outline.expect
new file mode 100644
index 0000000..5abeb79
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.outline.expect
@@ -0,0 +1,10 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends core::Map<self::Hest<dynamic>, self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.strong.expect
new file mode 100644
index 0000000..6760128
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.strong.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends core::Map<self::Hest<dynamic>, self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart:9:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+Try providing type arguments to 'Hest' here.
+class Hest<TypeX extends Map<Hest, Hest>> {}
+           ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.strong.transformed.expect
new file mode 100644
index 0000000..6760128
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.strong.transformed.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends core::Map<self::Hest<dynamic>, self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart:9:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+Try providing type arguments to 'Hest' here.
+class Hest<TypeX extends Map<Hest, Hest>> {}
+           ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.direct.expect
new file mode 100644
index 0000000..cc9040b
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.direct.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends core::Object = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Hest<self::Hest<core::Object>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.direct.transformed.expect
new file mode 100644
index 0000000..cc9040b
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.direct.transformed.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends core::Object = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Hest<self::Hest<core::Object>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.outline.expect
new file mode 100644
index 0000000..65514b1
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.outline.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends core::Object = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class Fisk<TypeY extends self::Hest<self::Hest<core::Object>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.strong.expect
new file mode 100644
index 0000000..a2ec755
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.strong.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends core::Object = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Hest<self::Hest<core::Object>> = self::Hest<self::Hest<core::Object>>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.strong.transformed.expect
new file mode 100644
index 0000000..a2ec755
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.strong.transformed.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends core::Object = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Hest<self::Hest<core::Object>> = self::Hest<self::Hest<core::Object>>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.direct.expect
new file mode 100644
index 0000000..8b2d1c8
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.direct.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Hest<dynamic> = dynamic, TypeZ extends self::Hest<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.direct.transformed.expect
new file mode 100644
index 0000000..8b2d1c8
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.direct.transformed.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Hest<dynamic> = dynamic, TypeZ extends self::Hest<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.outline.expect
new file mode 100644
index 0000000..731612d
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.outline.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class Fisk<TypeY extends self::Hest<dynamic> = dynamic, TypeZ extends self::Hest<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.strong.expect
new file mode 100644
index 0000000..5ae9bde
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.strong.expect
@@ -0,0 +1,22 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>> = dynamic, TypeZ extends self::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'Hest' here.
+class Fisk<TypeY extends Hest, TypeZ extends Hest> {}
+           ^^^^^", "pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:11:32: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'Hest' here.
+class Fisk<TypeY extends Hest, TypeZ extends Hest> {}
+                               ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.strong.transformed.expect
new file mode 100644
index 0000000..5ae9bde
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.strong.transformed.expect
@@ -0,0 +1,22 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>> = dynamic, TypeZ extends self::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'Hest' here.
+class Fisk<TypeY extends Hest, TypeZ extends Hest> {}
+           ^^^^^", "pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:11:32: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'Hest' here.
+class Fisk<TypeY extends Hest, TypeZ extends Hest> {}
+                               ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.direct.expect
new file mode 100644
index 0000000..ae3f2f3
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.direct.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:collection" as col;
+import "dart:core" as core;
+
+class Hest<X extends col::LinkedListEntry<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.direct.transformed.expect
new file mode 100644
index 0000000..ae3f2f3
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.direct.transformed.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:collection" as col;
+import "dart:core" as core;
+
+class Hest<X extends col::LinkedListEntry<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.outline.expect
new file mode 100644
index 0000000..910725d
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.outline.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:collection" as col;
+import "dart:core" as core;
+
+class Hest<X extends col::LinkedListEntry<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.expect
new file mode 100644
index 0000000..6b7a848
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:collection" as col;
+import "dart:core" as core;
+
+class Hest<X extends col::LinkedListEntry<col::LinkedListEntry<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart:15:12: Error: Generic type 'LinkedListEntry' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'LinkedListEntry' here.
+class Hest<X extends LinkedListEntry> {}
+           ^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.transformed.expect
new file mode 100644
index 0000000..6b7a848
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.transformed.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:collection" as col;
+import "dart:core" as core;
+
+class Hest<X extends col::LinkedListEntry<col::LinkedListEntry<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart:15:12: Error: Generic type 'LinkedListEntry' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'LinkedListEntry' here.
+class Hest<X extends LinkedListEntry> {}
+           ^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.direct.expect
new file mode 100644
index 0000000..a5a23c8
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.direct.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends <TypeZ extends self::Hest<core::Null> = dynamic>(TypeZ) → dynamic = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.direct.transformed.expect
new file mode 100644
index 0000000..a5a23c8
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.direct.transformed.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends <TypeZ extends self::Hest<core::Null> = dynamic>(TypeZ) → dynamic = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.outline.expect
new file mode 100644
index 0000000..f5b927f
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.outline.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class Fisk<TypeY extends <TypeZ extends self::Hest<core::Null> = dynamic>(TypeZ) → dynamic = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.strong.expect
new file mode 100644
index 0000000..372b447
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.strong.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends <TypeZ extends self::Hest<core::Null> = dynamic>(TypeZ) → dynamic = <TypeZ extends self::Hest<core::Null> = dynamic>(TypeZ) → dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.strong.transformed.expect
new file mode 100644
index 0000000..372b447
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.strong.transformed.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends <TypeZ extends self::Hest<core::Null> = dynamic>(TypeZ) → dynamic = <TypeZ extends self::Hest<core::Null> = dynamic>(TypeZ) → dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.direct.expect
new file mode 100644
index 0000000..1ebf46d
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.direct.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Fisk<self::Fisk::TypeY> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Naebdyr<TypeZ extends core::Map<self::Hest<dynamic>, self::Fisk<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.direct.transformed.expect
new file mode 100644
index 0000000..1ebf46d
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.direct.transformed.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Fisk<self::Fisk::TypeY> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Naebdyr<TypeZ extends core::Map<self::Hest<dynamic>, self::Fisk<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.outline.expect
new file mode 100644
index 0000000..037cda9
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.outline.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class Fisk<TypeY extends self::Fisk<self::Fisk::TypeY> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class Naebdyr<TypeZ extends core::Map<self::Hest<dynamic>, self::Fisk<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.strong.expect
new file mode 100644
index 0000000..1e2ebae
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.strong.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Fisk<self::Fisk::TypeY> = self::Fisk<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Naebdyr<TypeZ extends core::Map<self::Hest<self::Hest<dynamic>>, self::Fisk<self::Fisk<dynamic>>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:12:15: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'Hest' here.
+class Naebdyr<TypeZ extends Map<Hest, Fisk>> {}
+              ^^^^^", "pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:12:15: Error: Generic type 'Fisk' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'Fisk' here.
+class Naebdyr<TypeZ extends Map<Hest, Fisk>> {}
+              ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.strong.transformed.expect
new file mode 100644
index 0000000..1e2ebae
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.strong.transformed.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Fisk<self::Fisk::TypeY> = self::Fisk<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Naebdyr<TypeZ extends core::Map<self::Hest<self::Hest<dynamic>>, self::Fisk<self::Fisk<dynamic>>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:12:15: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'Hest' here.
+class Naebdyr<TypeZ extends Map<Hest, Fisk>> {}
+              ^^^^^", "pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:12:15: Error: Generic type 'Fisk' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'Fisk' here.
+class Naebdyr<TypeZ extends Map<Hest, Fisk>> {}
+              ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.direct.expect
new file mode 100644
index 0000000..0bdaa11
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.direct.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "./non_simple_many_libs_same_name_cycle_lib.dart" as non;
+import "dart:core" as core;
+
+class Hest<TypeX extends non::Hest<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.direct.transformed.expect
new file mode 100644
index 0000000..0bdaa11
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.direct.transformed.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "./non_simple_many_libs_same_name_cycle_lib.dart" as non;
+import "dart:core" as core;
+
+class Hest<TypeX extends non::Hest<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.outline.expect
new file mode 100644
index 0000000..b2d8428
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.outline.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "./non_simple_many_libs_same_name_cycle_lib.dart" as non;
+import "dart:core" as core;
+
+class Hest<TypeX extends non::Hest<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.expect
new file mode 100644
index 0000000..aea6b8d
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "./non_simple_many_libs_same_name_cycle_lib.dart" as non;
+import "dart:core" as core;
+
+class Hest<TypeX extends non::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart:11:7: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+class Hest<TypeX extends lib.Hest> {}
+      ^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.transformed.expect
new file mode 100644
index 0000000..aea6b8d
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.transformed.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "./non_simple_many_libs_same_name_cycle_lib.dart" as non;
+import "dart:core" as core;
+
+class Hest<TypeX extends non::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart:11:7: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+class Hest<TypeX extends lib.Hest> {}
+      ^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.direct.expect
new file mode 100644
index 0000000..2cc8768
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.direct.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends core::Map<self::Hest<dynamic>, self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.direct.transformed.expect
new file mode 100644
index 0000000..2cc8768
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.direct.transformed.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends core::Map<self::Hest<dynamic>, self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.outline.expect
new file mode 100644
index 0000000..a3d3fb5
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.outline.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class Fisk<TypeY extends core::Map<self::Hest<dynamic>, self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.strong.expect
new file mode 100644
index 0000000..bf31ea9
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.strong.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends core::Map<self::Hest<self::Hest<dynamic>>, self::Hest<self::Hest<dynamic>>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'Hest' here.
+class Fisk<TypeY extends Map<Hest, Hest>> {}
+           ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.strong.transformed.expect
new file mode 100644
index 0000000..bf31ea9
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.strong.transformed.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends core::Map<self::Hest<self::Hest<dynamic>>, self::Hest<self::Hest<dynamic>>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'Hest' here.
+class Fisk<TypeY extends Map<Hest, Hest>> {}
+           ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.direct.expect
new file mode 100644
index 0000000..a2c2f96
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.direct.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Hest<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Naebdyr<TypeZ extends self::Fisk<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.direct.transformed.expect
new file mode 100644
index 0000000..a2c2f96
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.direct.transformed.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Hest<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Naebdyr<TypeZ extends self::Fisk<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.outline.expect
new file mode 100644
index 0000000..e70601a
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.outline.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class Fisk<TypeY extends self::Hest<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class Naebdyr<TypeZ extends self::Fisk<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.strong.expect
new file mode 100644
index 0000000..c1297fa
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.strong.expect
@@ -0,0 +1,24 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Naebdyr<TypeZ extends self::Fisk<dynamic> = self::Fisk<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'Hest' here.
+class Fisk<TypeY extends Hest> {}
+           ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.strong.transformed.expect
new file mode 100644
index 0000000..c1297fa
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.strong.transformed.expect
@@ -0,0 +1,24 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Naebdyr<TypeZ extends self::Fisk<dynamic> = self::Fisk<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'Hest' here.
+class Fisk<TypeY extends Hest> {}
+           ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.direct.expect
new file mode 100644
index 0000000..ccff566
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.direct.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Hest<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.direct.transformed.expect
new file mode 100644
index 0000000..ccff566
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.direct.transformed.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Hest<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.outline.expect
new file mode 100644
index 0000000..082d2fd
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.outline.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class Fisk<TypeY extends self::Hest<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.strong.expect
new file mode 100644
index 0000000..67f553b
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.strong.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart:12:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'Hest' here.
+class Fisk<TypeY extends Hest> {}
+           ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.strong.transformed.expect
new file mode 100644
index 0000000..67f553b
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.strong.transformed.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart:12:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+Try providing type arguments to 'Hest' here.
+class Fisk<TypeY extends Hest> {}
+           ^^^^^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.direct.expect
deleted file mode 100644
index caa1662..0000000
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.direct.expect
+++ /dev/null
@@ -1,8 +0,0 @@
-library;
-import self as self;
-import "dart:core" as core;
-
-typedef A<T extends core::Object = dynamic> = (T) → dynamic;
-typedef B<S extends (S) → dynamic = dynamic> = (S) → dynamic;
-static field (dynamic) → dynamic b;
-static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.direct.transformed.expect
deleted file mode 100644
index caa1662..0000000
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.direct.transformed.expect
+++ /dev/null
@@ -1,8 +0,0 @@
-library;
-import self as self;
-import "dart:core" as core;
-
-typedef A<T extends core::Object = dynamic> = (T) → dynamic;
-typedef B<S extends (S) → dynamic = dynamic> = (S) → dynamic;
-static field (dynamic) → dynamic b;
-static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.outline.expect
deleted file mode 100644
index 68eb853..0000000
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.outline.expect
+++ /dev/null
@@ -1,9 +0,0 @@
-library;
-import self as self;
-import "dart:core" as core;
-
-typedef A<T extends core::Object = dynamic> = (T) → dynamic;
-typedef B<S extends (S) → dynamic = dynamic> = (S) → dynamic;
-static field (dynamic) → dynamic b;
-static method main() → dynamic
-  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.strong.expect
deleted file mode 100644
index 7f1e93d..0000000
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.strong.expect
+++ /dev/null
@@ -1,8 +0,0 @@
-library;
-import self as self;
-import "dart:core" as core;
-
-typedef A<T extends core::Object> = (T) → dynamic;
-typedef B<S extends (S) → dynamic> = (S) → dynamic;
-static field ((core::Null) → dynamic) → dynamic b;
-static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/outline.status b/pkg/front_end/testcases/outline.status
index 80c77ad..1159e1b 100644
--- a/pkg/front_end/testcases/outline.status
+++ b/pkg/front_end/testcases/outline.status
@@ -247,25 +247,11 @@
 inference/unsafe_block_closure_inference_method_call_no_type_param: Fail
 inference/void_return_type_subtypes_dynamic: Fail
 
-instantiate_to_bound/non_simple_bound_due_to_non_simple: Fail
-instantiate_to_bound/non_simple_bound_due_to_variables: Fail
-instantiate_to_bound/non_simple_co_inductive: Fail
-instantiate_to_bound/non_simple_co_inductive_for_each: Fail
-instantiate_to_bound/non_simple_co_inductive_no_dup: Fail
-instantiate_to_bound/non_simple_folded_regress: Fail
-instantiate_to_bound/non_simple_for_each: Fail
-instantiate_to_bound/non_simple_generic_function_in_bound_regress: Fail
-instantiate_to_bound/non_simple_many: Fail
-instantiate_to_bound/non_simple_no_dup: Fail
-instantiate_to_bound/non_simple_suppress_consequence: Fail
-instantiate_to_bound/non_simple_variables_from_same: Fail
-instantiate_to_bound/non_simple_class_parametrized_typedef_cycle: Fail
-instantiate_to_bound/non_simple_class_typedef_cycle: Fail
-instantiate_to_bound/non_simple_from_compiled: Fail
-instantiate_to_bound/non_simple_many_libs_same_name_cycle: Fail
-
 rasta/issue_000045: Fail
 rasta/issue_000046: Fail
 rasta/issue_000047: Fail
 rasta/native_is_illegal: Pass # Issue 29763
 rasta/type_with_parse_error: Fail
+
+instantiate_to_bound/body_typedef_super_bounded_type: Fail # Issue 33444
+instantiate_to_bound/typedef_super_bounded_type: Fail # Issue 33444
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index 805d397..5e92a4c 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -112,24 +112,9 @@
 inference_new/infer_field_getter_setter_mismatch: TypeCheckError
 inference_new/infer_field_override_getter_overrides_setter: TypeCheckError
 
-instantiate_to_bound/body_typedef_super_bounded_type: Fail
-instantiate_to_bound/non_simple_bound_due_to_non_simple: Fail
-instantiate_to_bound/non_simple_bound_due_to_variables: Fail
-instantiate_to_bound/non_simple_co_inductive: Fail
-instantiate_to_bound/non_simple_co_inductive_for_each: Fail
-instantiate_to_bound/non_simple_co_inductive_no_dup: Fail
-instantiate_to_bound/non_simple_folded_regress: Fail
-instantiate_to_bound/non_simple_for_each: Fail
-instantiate_to_bound/non_simple_generic_function_in_bound_regress: Fail
-instantiate_to_bound/non_simple_many: Fail
-instantiate_to_bound/non_simple_no_dup: Fail
-instantiate_to_bound/non_simple_suppress_consequence: Fail
-instantiate_to_bound/non_simple_variables_from_same: Fail
-instantiate_to_bound/typedef_super_bounded_type: Fail
+instantiate_to_bound/body_typedef_super_bounded_type: Fail # Issue 33444
 instantiate_to_bound/non_simple_class_parametrized_typedef_cycle: Crash # Issue 33479
-instantiate_to_bound/non_simple_class_typedef_cycle: Fail
-instantiate_to_bound/non_simple_from_compiled: Fail
-instantiate_to_bound/non_simple_many_libs_same_name_cycle: Fail
+instantiate_to_bound/typedef_super_bounded_type: Fail # Issue 33444
 
 rasta/abstract_constructor: Fail
 rasta/bad_constructor_redirection: Fail