Additional type variable resolution tests

Change-Id: Idbe1eb50395354e66b0017207e5ed60b0c0b882f
Reviewed-on: https://dart-review.googlesource.com/58760
Commit-Queue: Dan Rubel <danrubel@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
diff --git a/pkg/front_end/testcases/regress/issue_31846.dart b/pkg/front_end/testcases/regress/issue_31846.dart
index e76a9c1..593212f 100644
--- a/pkg/front_end/testcases/regress/issue_31846.dart
+++ b/pkg/front_end/testcases/regress/issue_31846.dart
@@ -8,4 +8,6 @@
   print((<T extends num>(T x) => x).runtimeType);
   print((<T extends Comparable<T>>(T x) => x).runtimeType);
   print((<T extends Comparable<S>, S>(T x) => x).runtimeType);
+  print((<T extends Function(T)>(T x) => x).runtimeType);
+  print((<T extends List<List<T>>>(T x) => x).runtimeType);
 }
diff --git a/pkg/front_end/testcases/regress/issue_31846.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31846.dart.direct.expect
index 9a54d88..f71d395 100644
--- a/pkg/front_end/testcases/regress/issue_31846.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31846.dart.direct.expect
@@ -8,4 +8,6 @@
   core::print((<T extends core::num = dynamic>(T x) → dynamic => x).runtimeType);
   core::print((<T extends core::Comparable<T> = dynamic>(T x) → dynamic => x).runtimeType);
   core::print((<T extends core::Comparable<S> = dynamic, S extends core::Object = dynamic>(T x) → dynamic => x).runtimeType);
+  core::print((<T extends (T) → dynamic = dynamic>(T x) → dynamic => x).runtimeType);
+  core::print((<T extends core::List<core::List<T>> = dynamic>(T x) → dynamic => x).runtimeType);
 }
diff --git a/pkg/front_end/testcases/regress/issue_31846.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_31846.dart.direct.transformed.expect
index 9a54d88..f71d395 100644
--- a/pkg/front_end/testcases/regress/issue_31846.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31846.dart.direct.transformed.expect
@@ -8,4 +8,6 @@
   core::print((<T extends core::num = dynamic>(T x) → dynamic => x).runtimeType);
   core::print((<T extends core::Comparable<T> = dynamic>(T x) → dynamic => x).runtimeType);
   core::print((<T extends core::Comparable<S> = dynamic, S extends core::Object = dynamic>(T x) → dynamic => x).runtimeType);
+  core::print((<T extends (T) → dynamic = dynamic>(T x) → dynamic => x).runtimeType);
+  core::print((<T extends core::List<core::List<T>> = dynamic>(T x) → dynamic => x).runtimeType);
 }
diff --git a/pkg/front_end/testcases/regress/issue_31846.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31846.dart.strong.expect
index ecfc850..b07df45 100644
--- a/pkg/front_end/testcases/regress/issue_31846.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31846.dart.strong.expect
@@ -8,4 +8,6 @@
   core::print((<T extends core::num = core::num>(T x) → T => x).{core::Object::runtimeType});
   core::print((<T extends core::Comparable<T> = core::Comparable<dynamic>>(T x) → T => x).{core::Object::runtimeType});
   core::print((<T extends core::Comparable<S> = core::Comparable<dynamic>, S extends core::Object = dynamic>(T x) → T => x).{core::Object::runtimeType});
+  core::print((<T extends (T) → dynamic = (core::Null) → dynamic>(T x) → T => x).{core::Object::runtimeType});
+  core::print((<T extends core::List<core::List<T>> = core::List<core::List<dynamic>>>(T x) → T => x).{core::Object::runtimeType});
 }
diff --git a/pkg/front_end/testcases/regress/issue_31846.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31846.dart.strong.transformed.expect
index ecfc850..b07df45 100644
--- a/pkg/front_end/testcases/regress/issue_31846.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31846.dart.strong.transformed.expect
@@ -8,4 +8,6 @@
   core::print((<T extends core::num = core::num>(T x) → T => x).{core::Object::runtimeType});
   core::print((<T extends core::Comparable<T> = core::Comparable<dynamic>>(T x) → T => x).{core::Object::runtimeType});
   core::print((<T extends core::Comparable<S> = core::Comparable<dynamic>, S extends core::Object = dynamic>(T x) → T => x).{core::Object::runtimeType});
+  core::print((<T extends (T) → dynamic = (core::Null) → dynamic>(T x) → T => x).{core::Object::runtimeType});
+  core::print((<T extends core::List<core::List<T>> = core::List<core::List<dynamic>>>(T x) → T => x).{core::Object::runtimeType});
 }