[fasta] Update expectation files after CL 50941

Change-Id: I85aba2501a7b8a911e122f0a802dfc21b7e87e1e
Reviewed-on: https://dart-review.googlesource.com/51620
Reviewed-by: Peter von der Ahé <ahe@google.com>
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
diff --git a/pkg/front_end/testcases/arrow_function.dart.direct.expect b/pkg/front_end/testcases/arrow_function.dart.direct.expect
index ec2e898..fd2c981 100644
--- a/pkg/front_end/testcases/arrow_function.dart.direct.expect
+++ b/pkg/front_end/testcases/arrow_function.dart.direct.expect
@@ -2,5 +2,5 @@
 import self as self;
 import "dart:core" as core;
 
-static method main<T extends core::Object>() → dynamic
+static method main<T extends core::Object = dynamic>() → dynamic
   return () → dynamic => self::main::T;
diff --git a/pkg/front_end/testcases/arrow_function.dart.direct.transformed.expect b/pkg/front_end/testcases/arrow_function.dart.direct.transformed.expect
index ec2e898..fd2c981 100644
--- a/pkg/front_end/testcases/arrow_function.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/arrow_function.dart.direct.transformed.expect
@@ -2,5 +2,5 @@
 import self as self;
 import "dart:core" as core;
 
-static method main<T extends core::Object>() → dynamic
+static method main<T extends core::Object = dynamic>() → dynamic
   return () → dynamic => self::main::T;
diff --git a/pkg/front_end/testcases/arrow_function.dart.outline.expect b/pkg/front_end/testcases/arrow_function.dart.outline.expect
index 8304bc1..ebd9bdd 100644
--- a/pkg/front_end/testcases/arrow_function.dart.outline.expect
+++ b/pkg/front_end/testcases/arrow_function.dart.outline.expect
@@ -2,5 +2,5 @@
 import self as self;
 import "dart:core" as core;
 
-static method main<T extends core::Object>() → dynamic
+static method main<T extends core::Object = dynamic>() → dynamic
   ;
diff --git a/pkg/front_end/testcases/arrow_function.dart.strong.expect b/pkg/front_end/testcases/arrow_function.dart.strong.expect
index 4cea2f2..b1e02d2 100644
--- a/pkg/front_end/testcases/arrow_function.dart.strong.expect
+++ b/pkg/front_end/testcases/arrow_function.dart.strong.expect
@@ -2,5 +2,5 @@
 import self as self;
 import "dart:core" as core;
 
-static method main<T extends core::Object>() → dynamic
+static method main<T extends core::Object = dynamic>() → dynamic
   return () → core::Type => self::main::T;
diff --git a/pkg/front_end/testcases/arrow_function.dart.strong.transformed.expect b/pkg/front_end/testcases/arrow_function.dart.strong.transformed.expect
index 4cea2f2..b1e02d2 100644
--- a/pkg/front_end/testcases/arrow_function.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/arrow_function.dart.strong.transformed.expect
@@ -2,5 +2,5 @@
 import self as self;
 import "dart:core" as core;
 
-static method main<T extends core::Object>() → dynamic
+static method main<T extends core::Object = dynamic>() → dynamic
   return () → core::Type => self::main::T;
diff --git a/pkg/front_end/testcases/bug32629.dart.direct.expect b/pkg/front_end/testcases/bug32629.dart.direct.expect
index 1f4307c..2269f15 100644
--- a/pkg/front_end/testcases/bug32629.dart.direct.expect
+++ b/pkg/front_end/testcases/bug32629.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Reducer<S extends core::Object> = (S, dynamic) → S;
+typedef Reducer<S extends core::Object = dynamic> = (S, dynamic) → S;
 class A extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
@@ -11,7 +11,7 @@
     return a;
   }
 }
-static method foo<S extends core::Object>((self::foo::S, dynamic) → self::foo::S v) → void {}
+static method foo<S extends core::Object = dynamic>((self::foo::S, dynamic) → self::foo::S v) → void {}
 static method main() → void {
   self::foo<core::String>(new self::A::•());
 }
diff --git a/pkg/front_end/testcases/bug32629.dart.direct.transformed.expect b/pkg/front_end/testcases/bug32629.dart.direct.transformed.expect
index 1f4307c..2269f15 100644
--- a/pkg/front_end/testcases/bug32629.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/bug32629.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Reducer<S extends core::Object> = (S, dynamic) → S;
+typedef Reducer<S extends core::Object = dynamic> = (S, dynamic) → S;
 class A extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
@@ -11,7 +11,7 @@
     return a;
   }
 }
-static method foo<S extends core::Object>((self::foo::S, dynamic) → self::foo::S v) → void {}
+static method foo<S extends core::Object = dynamic>((self::foo::S, dynamic) → self::foo::S v) → void {}
 static method main() → void {
   self::foo<core::String>(new self::A::•());
 }
diff --git a/pkg/front_end/testcases/bug32629.dart.outline.expect b/pkg/front_end/testcases/bug32629.dart.outline.expect
index d37f8be..fd95657 100644
--- a/pkg/front_end/testcases/bug32629.dart.outline.expect
+++ b/pkg/front_end/testcases/bug32629.dart.outline.expect
@@ -2,14 +2,14 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Reducer<S extends core::Object> = (S, dynamic) → S;
+typedef Reducer<S extends core::Object = dynamic> = (S, dynamic) → S;
 class A extends core::Object {
   synthetic constructor •() → void
     ;
   method call(dynamic a, dynamic b) → dynamic
     ;
 }
-static method foo<S extends core::Object>((self::foo::S, dynamic) → self::foo::S v) → void
+static method foo<S extends core::Object = dynamic>((self::foo::S, dynamic) → self::foo::S v) → void
   ;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/covariant_generic.dart.direct.expect b/pkg/front_end/testcases/covariant_generic.dart.direct.expect
index 6c077b6..7070b05 100644
--- a/pkg/front_end/testcases/covariant_generic.dart.direct.expect
+++ b/pkg/front_end/testcases/covariant_generic.dart.direct.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Callback<T extends core::Object> = (T) → void;
-class Foo<T extends core::Object> extends core::Object {
+typedef Callback<T extends core::Object = dynamic> = (T) → void;
+class Foo<T extends core::Object = dynamic> extends core::Object {
   final field self::Foo::T finalField;
   final field (self::Foo::T) → void callbackField;
   field self::Foo::T mutableField = null;
diff --git a/pkg/front_end/testcases/covariant_generic.dart.direct.transformed.expect b/pkg/front_end/testcases/covariant_generic.dart.direct.transformed.expect
index 6c077b6..7070b05 100644
--- a/pkg/front_end/testcases/covariant_generic.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/covariant_generic.dart.direct.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Callback<T extends core::Object> = (T) → void;
-class Foo<T extends core::Object> extends core::Object {
+typedef Callback<T extends core::Object = dynamic> = (T) → void;
+class Foo<T extends core::Object = dynamic> extends core::Object {
   final field self::Foo::T finalField;
   final field (self::Foo::T) → void callbackField;
   field self::Foo::T mutableField = null;
diff --git a/pkg/front_end/testcases/covariant_generic.dart.outline.expect b/pkg/front_end/testcases/covariant_generic.dart.outline.expect
index e0c1173..ca50348 100644
--- a/pkg/front_end/testcases/covariant_generic.dart.outline.expect
+++ b/pkg/front_end/testcases/covariant_generic.dart.outline.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Callback<T extends core::Object> = (T) → void;
-class Foo<T extends core::Object> extends core::Object {
+typedef Callback<T extends core::Object = dynamic> = (T) → void;
+class Foo<T extends core::Object = dynamic> extends core::Object {
   final field self::Foo::T finalField;
   final field (self::Foo::T) → void callbackField;
   field self::Foo::T mutableField;
diff --git a/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect b/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect
index dc19dc1..197f600 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect
@@ -12,7 +12,7 @@
   print(void g<T>(T t) {});
              ^"]/* from null */;
 static method main() → dynamic {
-  dynamic x = let final <T extends core::Object>(T) → void f = <T extends core::Object>(T t) → dynamic {} in f;
+  dynamic x = let final <T extends core::Object = dynamic>(T) → void f = <T extends core::Object = dynamic>(T t) → dynamic {} in f;
   core::print(x.runtimeType);
-  core::print(let final <T extends core::Object>(T) → void g = <T extends core::Object>(T t) → dynamic {} in g);
+  core::print(let final <T extends core::Object = dynamic>(T) → void g = <T extends core::Object = dynamic>(T t) → dynamic {} in g);
 }
diff --git a/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.transformed.expect b/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.transformed.expect
index dc19dc1..197f600 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.transformed.expect
@@ -12,7 +12,7 @@
   print(void g<T>(T t) {});
              ^"]/* from null */;
 static method main() → dynamic {
-  dynamic x = let final <T extends core::Object>(T) → void f = <T extends core::Object>(T t) → dynamic {} in f;
+  dynamic x = let final <T extends core::Object = dynamic>(T) → void f = <T extends core::Object = dynamic>(T t) → dynamic {} in f;
   core::print(x.runtimeType);
-  core::print(let final <T extends core::Object>(T) → void g = <T extends core::Object>(T t) → dynamic {} in g);
+  core::print(let final <T extends core::Object = dynamic>(T) → void g = <T extends core::Object = dynamic>(T t) → dynamic {} in g);
 }
diff --git a/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect b/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect
index f1c5274..99ed439 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect
@@ -12,7 +12,7 @@
   print(void g<T>(T t) {});
              ^"]/* from null */;
 static method main() → dynamic {
-  <T extends core::Object>(T) → core::Null x = let final <T extends core::Object>(T) → core::Null f = <T extends core::Object>(T t) → core::Null {} in f;
+  <T extends core::Object = dynamic>(T) → core::Null x = let final <T extends core::Object = dynamic>(T) → core::Null f = <T extends core::Object = dynamic>(T t) → core::Null {} in f;
   core::print(x.{core::Object::runtimeType});
-  core::print(let final <T extends core::Object>(T) → core::Null g = <T extends core::Object>(T t) → core::Null {} in g);
+  core::print(let final <T extends core::Object = dynamic>(T) → core::Null g = <T extends core::Object = dynamic>(T t) → core::Null {} in g);
 }
diff --git a/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.transformed.expect b/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.transformed.expect
index f1c5274..99ed439 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
   print(void g<T>(T t) {});
              ^"]/* from null */;
 static method main() → dynamic {
-  <T extends core::Object>(T) → core::Null x = let final <T extends core::Object>(T) → core::Null f = <T extends core::Object>(T t) → core::Null {} in f;
+  <T extends core::Object = dynamic>(T) → core::Null x = let final <T extends core::Object = dynamic>(T) → core::Null f = <T extends core::Object = dynamic>(T t) → core::Null {} in f;
   core::print(x.{core::Object::runtimeType});
-  core::print(let final <T extends core::Object>(T) → core::Null g = <T extends core::Object>(T t) → core::Null {} in g);
+  core::print(let final <T extends core::Object = dynamic>(T) → core::Null g = <T extends core::Object = dynamic>(T t) → core::Null {} in g);
 }
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/status.status b/pkg/front_end/testcases/incremental_initialize_from_dill/status.status
index 656e437..79a60b5 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/status.status
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/status.status
@@ -4,5 +4,4 @@
 
 # Status file for the test suite ../test/incremental_load_from_dill_yaml_test.dart.
 
-calculated_bounds_no_strongmode: Crash
 strongmode_mixins_2: Crash
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.expect b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.expect
index 3cd8d21..4624781 100644
--- a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
 }
-abstract class D<T extends core::Object> extends core::Object {
+abstract class D<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::D::T t) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.transformed.expect
index 3cd8d21..4624781 100644
--- a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
 }
-abstract class D<T extends core::Object> extends core::Object {
+abstract class D<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::D::T t) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.outline.expect b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.outline.expect
index 66f08a3..09b40a0 100644
--- a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.outline.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     ;
 }
-abstract class D<T extends core::Object> extends core::Object {
+abstract class D<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::D::T t) → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/assert.dart.direct.expect b/pkg/front_end/testcases/inference/assert.dart.direct.expect
index e5a1b8f..53b9899 100644
--- a/pkg/front_end/testcases/inference/assert.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/assert.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   assert(self::f<dynamic>());
diff --git a/pkg/front_end/testcases/inference/assert.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/assert.dart.direct.transformed.expect
index e5a1b8f..53b9899 100644
--- a/pkg/front_end/testcases/inference/assert.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/assert.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   assert(self::f<dynamic>());
diff --git a/pkg/front_end/testcases/inference/assert.dart.outline.expect b/pkg/front_end/testcases/inference/assert.dart.outline.expect
index ac49c9e..e8c03c5 100644
--- a/pkg/front_end/testcases/inference/assert.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/assert.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/assert.dart.strong.expect b/pkg/front_end/testcases/inference/assert.dart.strong.expect
index 004b776..cfbd624 100644
--- a/pkg/front_end/testcases/inference/assert.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/assert.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   assert(self::f<core::bool>());
diff --git a/pkg/front_end/testcases/inference/assert.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/assert.dart.strong.transformed.expect
index 004b776..cfbd624 100644
--- a/pkg/front_end/testcases/inference/assert.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/assert.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   assert(self::f<core::bool>());
diff --git a/pkg/front_end/testcases/inference/assert_initializer.dart.direct.expect b/pkg/front_end/testcases/inference/assert_initializer.dart.direct.expect
index 602da12..a90d65d 100644
--- a/pkg/front_end/testcases/inference/assert_initializer.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/assert_initializer.dart.direct.expect
@@ -10,7 +10,7 @@
     : assert(self::f<dynamic>(), self::f<dynamic>()), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {
   assert(self::f<dynamic>());
diff --git a/pkg/front_end/testcases/inference/assert_initializer.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/assert_initializer.dart.direct.transformed.expect
index 602da12..a90d65d 100644
--- a/pkg/front_end/testcases/inference/assert_initializer.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/assert_initializer.dart.direct.transformed.expect
@@ -10,7 +10,7 @@
     : assert(self::f<dynamic>(), self::f<dynamic>()), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {
   assert(self::f<dynamic>());
diff --git a/pkg/front_end/testcases/inference/assert_initializer.dart.outline.expect b/pkg/front_end/testcases/inference/assert_initializer.dart.outline.expect
index 33bb051..5121bf1 100644
--- a/pkg/front_end/testcases/inference/assert_initializer.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/assert_initializer.dart.outline.expect
@@ -8,7 +8,7 @@
   constructor expressionAndMessage() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/assert_initializer.dart.strong.expect b/pkg/front_end/testcases/inference/assert_initializer.dart.strong.expect
index 27f0c32..f87c11c 100644
--- a/pkg/front_end/testcases/inference/assert_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/assert_initializer.dart.strong.expect
@@ -10,7 +10,7 @@
     : assert(self::f<core::bool>(), self::f<dynamic>()), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {
   assert(self::f<core::bool>());
diff --git a/pkg/front_end/testcases/inference/assert_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/assert_initializer.dart.strong.transformed.expect
index 27f0c32..f87c11c 100644
--- a/pkg/front_end/testcases/inference/assert_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/assert_initializer.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
     : assert(self::f<core::bool>(), self::f<dynamic>()), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {
   assert(self::f<core::bool>());
diff --git a/pkg/front_end/testcases/inference/assign_local.dart.direct.expect b/pkg/front_end/testcases/inference/assign_local.dart.direct.expect
index 92719ee..35d51d7 100644
--- a/pkg/front_end/testcases/inference/assign_local.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/assign_local.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends self::A<self::B::T> {
+class B<T extends core::Object = dynamic> extends self::A<self::B::T> {
   synthetic constructor •() → void
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/assign_local.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/assign_local.dart.direct.transformed.expect
index 92719ee..35d51d7 100644
--- a/pkg/front_end/testcases/inference/assign_local.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/assign_local.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends self::A<self::B::T> {
+class B<T extends core::Object = dynamic> extends self::A<self::B::T> {
   synthetic constructor •() → void
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/assign_local.dart.outline.expect b/pkg/front_end/testcases/inference/assign_local.dart.outline.expect
index 134d614..43446c8 100644
--- a/pkg/front_end/testcases/inference/assign_local.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/assign_local.dart.outline.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class B<T extends core::Object> extends self::A<self::B::T> {
+class B<T extends core::Object = dynamic> extends self::A<self::B::T> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/assign_local.dart.strong.expect b/pkg/front_end/testcases/inference/assign_local.dart.strong.expect
index e8e11fe..5eaea0d 100644
--- a/pkg/front_end/testcases/inference/assign_local.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/assign_local.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends self::A<self::B::T> {
+class B<T extends core::Object = dynamic> extends self::A<self::B::T> {
   synthetic constructor •() → void
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/assign_local.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/assign_local.dart.strong.transformed.expect
index e8e11fe..5eaea0d 100644
--- a/pkg/front_end/testcases/inference/assign_local.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/assign_local.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends self::A<self::B::T> {
+class B<T extends core::Object = dynamic> extends self::A<self::B::T> {
   synthetic constructor •() → void
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/bug30251.dart.direct.expect b/pkg/front_end/testcases/inference/bug30251.dart.direct.expect
index fdfd49f..b7f6d44 100644
--- a/pkg/front_end/testcases/inference/bug30251.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/bug30251.dart.direct.expect
@@ -8,6 +8,6 @@
     : self::C::x = self::f<dynamic>(1.+(p)), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>(self::f::T t) → self::f::T
+static method f<T extends core::Object = dynamic>(self::f::T t) → self::f::T
   return t;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30251.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/bug30251.dart.direct.transformed.expect
index fdfd49f..b7f6d44 100644
--- a/pkg/front_end/testcases/inference/bug30251.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug30251.dart.direct.transformed.expect
@@ -8,6 +8,6 @@
     : self::C::x = self::f<dynamic>(1.+(p)), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>(self::f::T t) → self::f::T
+static method f<T extends core::Object = dynamic>(self::f::T t) → self::f::T
   return t;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30251.dart.outline.expect b/pkg/front_end/testcases/inference/bug30251.dart.outline.expect
index 8512f84..a19f31b 100644
--- a/pkg/front_end/testcases/inference/bug30251.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/bug30251.dart.outline.expect
@@ -7,7 +7,7 @@
   constructor •(core::int p) → void
     ;
 }
-static method f<T extends core::Object>(self::f::T t) → self::f::T
+static method f<T extends core::Object = dynamic>(self::f::T t) → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/bug30251.dart.strong.expect b/pkg/front_end/testcases/inference/bug30251.dart.strong.expect
index c3087fe..cb2070c 100644
--- a/pkg/front_end/testcases/inference/bug30251.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/bug30251.dart.strong.expect
@@ -8,6 +8,6 @@
     : self::C::x = self::f<core::int>(1.{core::num::+}(p)), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>(self::f::T t) → self::f::T
+static method f<T extends core::Object = dynamic>(self::f::T t) → self::f::T
   return t;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30251.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/bug30251.dart.strong.transformed.expect
index c3087fe..cb2070c 100644
--- a/pkg/front_end/testcases/inference/bug30251.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug30251.dart.strong.transformed.expect
@@ -8,6 +8,6 @@
     : self::C::x = self::f<core::int>(1.{core::num::+}(p)), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>(self::f::T t) → self::f::T
+static method f<T extends core::Object = dynamic>(self::f::T t) → self::f::T
   return t;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30624.dart.direct.expect b/pkg/front_end/testcases/inference/bug30624.dart.direct.expect
index 9a75e22..eeedbaf 100644
--- a/pkg/front_end/testcases/inference/bug30624.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/bug30624.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<E extends core::Object> extends core::Object {
+class C<E extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -29,5 +29,5 @@
     return 1.unary-();
   }
 }
-static method foo<E extends core::Object>(self::C<self::foo::E> c, (self::foo::E, self::foo::E) → core::int cmp) → void {}
+static method foo<E extends core::Object = dynamic>(self::C<self::foo::E> c, (self::foo::E, self::foo::E) → core::int cmp) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30624.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/bug30624.dart.direct.transformed.expect
index 9a75e22..eeedbaf 100644
--- a/pkg/front_end/testcases/inference/bug30624.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug30624.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<E extends core::Object> extends core::Object {
+class C<E extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -29,5 +29,5 @@
     return 1.unary-();
   }
 }
-static method foo<E extends core::Object>(self::C<self::foo::E> c, (self::foo::E, self::foo::E) → core::int cmp) → void {}
+static method foo<E extends core::Object = dynamic>(self::C<self::foo::E> c, (self::foo::E, self::foo::E) → core::int cmp) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30624.dart.outline.expect b/pkg/front_end/testcases/inference/bug30624.dart.outline.expect
index f705538..ff60989 100644
--- a/pkg/front_end/testcases/inference/bug30624.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/bug30624.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<E extends core::Object> extends core::Object {
+class C<E extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method barA([(self::C::E, self::C::E) → core::int cmp]) → void
@@ -20,7 +20,7 @@
   static method _default(dynamic a, dynamic b) → core::int
     ;
 }
-static method foo<E extends core::Object>(self::C<self::foo::E> c, (self::foo::E, self::foo::E) → core::int cmp) → void
+static method foo<E extends core::Object = dynamic>(self::C<self::foo::E> c, (self::foo::E, self::foo::E) → core::int cmp) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/bug30624.dart.strong.expect b/pkg/front_end/testcases/inference/bug30624.dart.strong.expect
index 1f952f5..9a5f732 100644
--- a/pkg/front_end/testcases/inference/bug30624.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/bug30624.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<E extends core::Object> extends core::Object {
+class C<E extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -29,5 +29,5 @@
     return 1.{core::int::unary-}();
   }
 }
-static method foo<E extends core::Object>(self::C<self::foo::E> c, (self::foo::E, self::foo::E) → core::int cmp) → void {}
+static method foo<E extends core::Object = dynamic>(self::C<self::foo::E> c, (self::foo::E, self::foo::E) → core::int cmp) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30624.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/bug30624.dart.strong.transformed.expect
index 1f952f5..9a5f732 100644
--- a/pkg/front_end/testcases/inference/bug30624.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug30624.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<E extends core::Object> extends core::Object {
+class C<E extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -29,5 +29,5 @@
     return 1.{core::int::unary-}();
   }
 }
-static method foo<E extends core::Object>(self::C<self::foo::E> c, (self::foo::E, self::foo::E) → core::int cmp) → void {}
+static method foo<E extends core::Object = dynamic>(self::C<self::foo::E> c, (self::foo::E, self::foo::E) → core::int cmp) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.direct.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.direct.expect
index b1b2544..93409b0 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class ActionDispatcher<P extends core::Object> extends core::Object {
+class ActionDispatcher<P extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.direct.transformed.expect
index b1b2544..93409b0 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class ActionDispatcher<P extends core::Object> extends core::Object {
+class ActionDispatcher<P extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.outline.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.outline.expect
index edb733d..309e3d2 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class ActionDispatcher<P extends core::Object> extends core::Object {
+class ActionDispatcher<P extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method call([self::ActionDispatcher::P value]) → void
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.strong.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.strong.expect
index 3e59656..bce5d96 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class ActionDispatcher<P extends core::Object> extends core::Object {
+class ActionDispatcher<P extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.strong.transformed.expect
index 3e59656..bce5d96 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class ActionDispatcher<P extends core::Object> extends core::Object {
+class ActionDispatcher<P extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.direct.expect b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.direct.expect
index 8145e11..d942073 100644
--- a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::List<self::C::T> x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.direct.transformed.expect
index 8145e11..d942073 100644
--- a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::List<self::C::T> x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.outline.expect b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.outline.expect
index 0c2d0dc..dafb078 100644
--- a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::List<self::C::T> x) → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.strong.expect b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.strong.expect
index a952ea0..f11d58d 100644
--- a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::List<self::C::T> x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.strong.transformed.expect
index a952ea0..f11d58d 100644
--- a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::List<self::C::T> x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.direct.expect
index 1def021..9a717b9 100644
--- a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.direct.expect
@@ -12,7 +12,7 @@
     : super self::A::•()
     ;
 }
-class Foo<T extends self::A> extends core::Object {
+class Foo<T extends self::A = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.direct.transformed.expect
index 1def021..9a717b9 100644
--- a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.direct.transformed.expect
@@ -12,7 +12,7 @@
     : super self::A::•()
     ;
 }
-class Foo<T extends self::A> extends core::Object {
+class Foo<T extends self::A = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.strong.expect
index 4da3023..53339a4 100644
--- a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.strong.expect
@@ -12,7 +12,7 @@
     : super self::A::•()
     ;
 }
-class Foo<T extends self::A> extends core::Object {
+class Foo<T extends self::A = self::A> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.strong.transformed.expect
index 4da3023..53339a4 100644
--- a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
     : super self::A::•()
     ;
 }
-class Foo<T extends self::A> extends core::Object {
+class Foo<T extends self::A = self::A> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.direct.expect
index 8a1923c..e4269a9 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T t;
   constructor •(self::C::T t) → void
     : self::C::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.direct.transformed.expect
index 8a1923c..e4269a9 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T t;
   constructor •(self::C::T t) → void
     : self::C::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
index b902c2a..80cb335 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T t;
   constructor •(self::C::T t) → void
     : self::C::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.transformed.expect
index d6841ff..d1bb8ee 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T t;
   constructor •(self::C::T t) → void
     : self::C::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.direct.expect
index 619f0a3..872f905 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.direct.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = () → T;
+typedef F<T extends core::Object = dynamic> = () → T;
 class A extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<T extends self::A> extends core::Object {
+class C<T extends self::A = dynamic> extends core::Object {
   constructor •(() → self::C::T f) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.direct.transformed.expect
index 619f0a3..872f905 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.direct.transformed.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = () → T;
+typedef F<T extends core::Object = dynamic> = () → T;
 class A extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<T extends self::A> extends core::Object {
+class C<T extends self::A = dynamic> extends core::Object {
   constructor •(() → self::C::T f) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.strong.expect
index 4d9c033..68d5644 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.strong.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = () → T;
+typedef F<T extends core::Object = dynamic> = () → T;
 class A extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<T extends self::A> extends core::Object {
+class C<T extends self::A = self::A> extends core::Object {
   constructor •(() → self::C::T f) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.direct.expect
index c3c0ebc..dc33b93 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   final field self::C::T t;
   const constructor •(self::C::T t) → void
     : self::C::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.direct.transformed.expect
index c3c0ebc..dc33b93 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   final field self::C::T t;
   const constructor •(self::C::T t) → void
     : self::C::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.strong.expect
index 366ee21..88d450f 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   final field self::C::T t;
   const constructor •(self::C::T t) → void
     : self::C::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.strong.transformed.expect
index 366ee21..88d450f 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   final field self::C::T t;
   const constructor •(self::C::T t) → void
     : self::C::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.direct.expect
index f4cec98..b141829 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.direct.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = dynamic> extends core::Object {
   final field self::C::T x;
   const constructor •(self::C::T x) → void
     : self::C::x = x, super core::Object::•()
     ;
 }
-class D<T extends core::num> extends core::Object {
+class D<T extends core::num = dynamic> extends core::Object {
   const constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.direct.transformed.expect
index f4cec98..b141829 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.direct.transformed.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = dynamic> extends core::Object {
   final field self::C::T x;
   const constructor •(self::C::T x) → void
     : self::C::x = x, super core::Object::•()
     ;
 }
-class D<T extends core::num> extends core::Object {
+class D<T extends core::num = dynamic> extends core::Object {
   const constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.strong.expect
index 97e2ca4..f90d5a7 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.strong.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = core::num> extends core::Object {
   final field self::C::T x;
   const constructor •(self::C::T x) → void
     : self::C::x = x, super core::Object::•()
     ;
 }
-class D<T extends core::num> extends core::Object {
+class D<T extends core::num = core::num> extends core::Object {
   const constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.strong.transformed.expect
index 97e2ca4..f90d5a7 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.strong.transformed.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = core::num> extends core::Object {
   final field self::C::T x;
   const constructor •(self::C::T x) → void
     : self::C::x = x, super core::Object::•()
     ;
 }
-class D<T extends core::num> extends core::Object {
+class D<T extends core::num = core::num> extends core::Object {
   const constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.direct.expect
index 1e8e0c0..740c1dd 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::List<self::C::T> list) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.direct.transformed.expect
index 1e8e0c0..740c1dd 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::List<self::C::T> list) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.strong.expect
index 2950d68..4eeaeb3 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::List<self::C::T> list) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.strong.transformed.expect
index 2950d68..4eeaeb3 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::List<self::C::T> list) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.direct.expect
index c9e1108..2f2411b 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T t = null;
   constructor _() → void
     : super core::Object::•()
     ;
-  static factory •<T extends core::Object>(self::C::•::T t) → self::C<self::C::•::T> {
+  static factory •<T extends core::Object = dynamic>(self::C::•::T t) → self::C<self::C::•::T> {
     dynamic x = new self::C::_<self::C::•::T>();
     x.t = t;
     return x;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.direct.transformed.expect
index c9e1108..2f2411b 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T t = null;
   constructor _() → void
     : super core::Object::•()
     ;
-  static factory •<T extends core::Object>(self::C::•::T t) → self::C<self::C::•::T> {
+  static factory •<T extends core::Object = dynamic>(self::C::•::T t) → self::C<self::C::•::T> {
     dynamic x = new self::C::_<self::C::•::T>();
     x.t = t;
     return x;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
index 835b191..72af9d8 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T t = null;
   constructor _() → void
     : super core::Object::•()
     ;
-  static factory •<T extends core::Object>(self::C::•::T t) → self::C<self::C::•::T> {
+  static factory •<T extends core::Object = dynamic>(self::C::•::T t) → self::C<self::C::•::T> {
     self::C<self::C::•::T> x = new self::C::_<self::C::•::T>();
     x.{self::C::t} = t;
     return x;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.transformed.expect
index 65a3466..cd824ab 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T t = null;
   constructor _() → void
     : super core::Object::•()
     ;
-  static factory •<T extends core::Object>(self::C::•::T t) → self::C<self::C::•::T> {
+  static factory •<T extends core::Object = dynamic>(self::C::•::T t) → self::C<self::C::•::T> {
     self::C<self::C::•::T> x = new self::C::_<self::C::•::T>();
     x.{self::C::t} = t;
     return x;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.direct.expect
index 538fd28..5fbdc88 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   field self::A<self::A::T> f = new self::A::•<dynamic>();
   constructor •() → void
     : super core::Object::•()
     ;
-  static factory factory<T extends core::Object>() → self::A<self::A::factory::T>
+  static factory factory<T extends core::Object = dynamic>() → self::A<self::A::factory::T>
     return new self::A::•<dynamic>();
   method m() → self::A<self::A::T>
     return new self::A::•<dynamic>();
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.direct.transformed.expect
index 538fd28..5fbdc88 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   field self::A<self::A::T> f = new self::A::•<dynamic>();
   constructor •() → void
     : super core::Object::•()
     ;
-  static factory factory<T extends core::Object>() → self::A<self::A::factory::T>
+  static factory factory<T extends core::Object = dynamic>() → self::A<self::A::factory::T>
     return new self::A::•<dynamic>();
   method m() → self::A<self::A::T>
     return new self::A::•<dynamic>();
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.strong.expect
index ba0820f..4989080 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::A<self::A::T> f = new self::A::•<self::A::T>();
   constructor •() → void
     : super core::Object::•()
     ;
-  static factory factory<T extends core::Object>() → self::A<self::A::factory::T>
+  static factory factory<T extends core::Object = dynamic>() → self::A<self::A::factory::T>
     return new self::A::•<self::A::factory::T>();
   method m() → self::A<self::A::T>
     return new self::A::•<self::A::T>();
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.strong.transformed.expect
index ba0820f..4989080 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::A<self::A::T> f = new self::A::•<self::A::T>();
   constructor •() → void
     : super core::Object::•()
     ;
-  static factory factory<T extends core::Object>() → self::A<self::A::factory::T>
+  static factory factory<T extends core::Object = dynamic>() → self::A<self::A::factory::T>
     return new self::A::•<self::A::factory::T>();
   method m() → self::A<self::A::T>
     return new self::A::•<self::A::T>();
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.direct.expect
index f244bce..16daec8 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T t = null;
   constructor named(core::List<self::C::T> t) → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.direct.transformed.expect
index f244bce..16daec8 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T t = null;
   constructor named(core::List<self::C::T> t) → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.strong.expect
index 0e487ea..b0115e5 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T t = null;
   constructor named(core::List<self::C::T> t) → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.strong.transformed.expect
index 0e487ea..b0115e5 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T t = null;
   constructor named(core::List<self::C::T> t) → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.direct.expect
index b56ab2c..7fbdfc2 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T t = null;
   constructor •() → void
     : super core::Object::•()
     ;
-  static factory named<T extends core::Object>(self::C::named::T t) → self::C<self::C::named::T> {
+  static factory named<T extends core::Object = dynamic>(self::C::named::T t) → self::C<self::C::named::T> {
     dynamic x = new self::C::•<self::C::named::T>();
     x.t = t;
     return x;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.direct.transformed.expect
index b56ab2c..7fbdfc2 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T t = null;
   constructor •() → void
     : super core::Object::•()
     ;
-  static factory named<T extends core::Object>(self::C::named::T t) → self::C<self::C::named::T> {
+  static factory named<T extends core::Object = dynamic>(self::C::named::T t) → self::C<self::C::named::T> {
     dynamic x = new self::C::•<self::C::named::T>();
     x.t = t;
     return x;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.strong.expect
index 1b757b3..9fd81aa 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T t = null;
   constructor •() → void
     : super core::Object::•()
     ;
-  static factory named<T extends core::Object>(self::C::named::T t) → self::C<self::C::named::T> {
+  static factory named<T extends core::Object = dynamic>(self::C::named::T t) → self::C<self::C::named::T> {
     self::C<self::C::named::T> x = new self::C::•<self::C::named::T>();
     x.{self::C::t} = t;
     return x;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.strong.transformed.expect
index 1b757b3..9fd81aa 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T t = null;
   constructor •() → void
     : super core::Object::•()
     ;
-  static factory named<T extends core::Object>(self::C::named::T t) → self::C<self::C::named::T> {
+  static factory named<T extends core::Object = dynamic>(self::C::named::T t) → self::C<self::C::named::T> {
     self::C<self::C::named::T> x = new self::C::•<self::C::named::T>();
     x.{self::C::t} = t;
     return x;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.direct.expect
index 41cb4fa..a985558 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T t;
   constructor •(self::C::T t) → void
     : self::C::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.direct.transformed.expect
index 41cb4fa..a985558 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T t;
   constructor •(self::C::T t) → void
     : self::C::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.strong.expect
index d250ca0..b2a5c1a 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T t;
   constructor •(self::C::T t) → void
     : self::C::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.strong.transformed.expect
index d250ca0..b2a5c1a 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T t;
   constructor •(self::C::T t) → void
     : self::C::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.direct.expect
index d2fa30a..4683180 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.direct.expect
@@ -2,14 +2,14 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class C<T extends core::Object> extends core::Object {
+abstract class C<T extends core::Object = dynamic> extends core::Object {
   static field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T;
   abstract set t(self::C::T x) → void;
-  static factory •<T extends core::Object>(self::C::•::T t) → self::C<self::C::•::T>
+  static factory •<T extends core::Object = dynamic>(self::C::•::T t) → self::C<self::C::•::T>
     let dynamic #redirecting_factory = self::CImpl::• in let self::C::•::T #typeArg0 = null in invalid-expression;
 }
-class CImpl<T extends core::Object> extends core::Object implements self::C<self::CImpl::T> {
+class CImpl<T extends core::Object = dynamic> extends core::Object implements self::C<self::CImpl::T> {
   field self::CImpl::T t;
   constructor •(self::CImpl::T t) → void
     : self::CImpl::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.direct.transformed.expect
index d2fa30a..4683180 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.direct.transformed.expect
@@ -2,14 +2,14 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class C<T extends core::Object> extends core::Object {
+abstract class C<T extends core::Object = dynamic> extends core::Object {
   static field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T;
   abstract set t(self::C::T x) → void;
-  static factory •<T extends core::Object>(self::C::•::T t) → self::C<self::C::•::T>
+  static factory •<T extends core::Object = dynamic>(self::C::•::T t) → self::C<self::C::•::T>
     let dynamic #redirecting_factory = self::CImpl::• in let self::C::•::T #typeArg0 = null in invalid-expression;
 }
-class CImpl<T extends core::Object> extends core::Object implements self::C<self::CImpl::T> {
+class CImpl<T extends core::Object = dynamic> extends core::Object implements self::C<self::CImpl::T> {
   field self::CImpl::T t;
   constructor •(self::CImpl::T t) → void
     : self::CImpl::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.strong.expect
index 309c800..54b4372 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.strong.expect
@@ -2,14 +2,14 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class C<T extends core::Object> extends core::Object {
+abstract class C<T extends core::Object = dynamic> extends core::Object {
   static field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T;
   abstract set t(generic-covariant-impl generic-covariant-interface self::C::T x) → void;
-  static factory •<T extends core::Object>(self::C::•::T t) → self::C<self::C::•::T>
+  static factory •<T extends core::Object = dynamic>(self::C::•::T t) → self::C<self::C::•::T>
     let dynamic #redirecting_factory = self::CImpl::• in let self::C::•::T #typeArg0 = null in invalid-expression;
 }
-class CImpl<T extends core::Object> extends core::Object implements self::C<self::CImpl::T> {
+class CImpl<T extends core::Object = dynamic> extends core::Object implements self::C<self::CImpl::T> {
   generic-covariant-impl generic-covariant-interface field self::CImpl::T t;
   constructor •(self::CImpl::T t) → void
     : self::CImpl::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.strong.transformed.expect
index b46bcd1..2289573 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.strong.transformed.expect
@@ -2,14 +2,14 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class C<T extends core::Object> extends core::Object {
+abstract class C<T extends core::Object = dynamic> extends core::Object {
   static field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T;
   abstract set t(generic-covariant-impl generic-covariant-interface self::C::T x) → void;
-  static factory •<T extends core::Object>(self::C::•::T t) → self::C<self::C::•::T>
+  static factory •<T extends core::Object = dynamic>(self::C::•::T t) → self::C<self::C::•::T>
     let<BottomType> #redirecting_factory = self::CImpl::• in let self::C::•::T #typeArg0 = null in invalid-expression;
 }
-class CImpl<T extends core::Object> extends core::Object implements self::C<self::CImpl::T> {
+class CImpl<T extends core::Object = dynamic> extends core::Object implements self::C<self::CImpl::T> {
   generic-covariant-impl generic-covariant-interface field self::CImpl::T t;
   constructor •(self::CImpl::T t) → void
     : self::CImpl::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.direct.expect
index 1975274..47f9df0 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.direct.expect
@@ -2,19 +2,19 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class C<T extends core::Object> extends core::Object {
+abstract class C<T extends core::Object = dynamic> extends core::Object {
   static field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T;
   abstract set t(self::C::T x) → void;
-  static factory •<T extends core::Object>(self::C::•::T t) → self::C<self::C::•::T>
+  static factory •<T extends core::Object = dynamic>(self::C::•::T t) → self::C<self::C::•::T>
     let dynamic #redirecting_factory = self::CImpl::• in let self::C::•::T #typeArg0 = null in invalid-expression;
 }
-class CImpl<T extends core::Object> extends core::Object implements self::C<self::CImpl::T> {
+class CImpl<T extends core::Object = dynamic> extends core::Object implements self::C<self::CImpl::T> {
   field self::CImpl::T t;
   constructor _(self::CImpl::T t) → void
     : self::CImpl::t = t, super core::Object::•()
     ;
-  static factory •<T extends core::Object>(self::CImpl::•::T t) → self::CImpl<self::CImpl::•::T>
+  static factory •<T extends core::Object = dynamic>(self::CImpl::•::T t) → self::CImpl<self::CImpl::•::T>
     return new self::CImpl::_<dynamic>(t);
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.direct.transformed.expect
index 1975274..47f9df0 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.direct.transformed.expect
@@ -2,19 +2,19 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class C<T extends core::Object> extends core::Object {
+abstract class C<T extends core::Object = dynamic> extends core::Object {
   static field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T;
   abstract set t(self::C::T x) → void;
-  static factory •<T extends core::Object>(self::C::•::T t) → self::C<self::C::•::T>
+  static factory •<T extends core::Object = dynamic>(self::C::•::T t) → self::C<self::C::•::T>
     let dynamic #redirecting_factory = self::CImpl::• in let self::C::•::T #typeArg0 = null in invalid-expression;
 }
-class CImpl<T extends core::Object> extends core::Object implements self::C<self::CImpl::T> {
+class CImpl<T extends core::Object = dynamic> extends core::Object implements self::C<self::CImpl::T> {
   field self::CImpl::T t;
   constructor _(self::CImpl::T t) → void
     : self::CImpl::t = t, super core::Object::•()
     ;
-  static factory •<T extends core::Object>(self::CImpl::•::T t) → self::CImpl<self::CImpl::•::T>
+  static factory •<T extends core::Object = dynamic>(self::CImpl::•::T t) → self::CImpl<self::CImpl::•::T>
     return new self::CImpl::_<dynamic>(t);
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.outline.expect
index 37113f5..018e8a0 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.outline.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class C<T extends core::Object> extends core::Object {
+abstract class C<T extends core::Object = dynamic> extends core::Object {
   static field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T;
   abstract set t(self::C::T x) → void;
-  static factory •<T extends core::Object>(self::C::•::T t) → self::C<self::C::•::T>
+  static factory •<T extends core::Object = dynamic>(self::C::•::T t) → self::C<self::C::•::T>
     let dynamic #redirecting_factory = self::CImpl::• in let self::C::•::T #typeArg0 = null in invalid-expression;
 }
-class CImpl<T extends core::Object> extends core::Object implements self::C<self::CImpl::T> {
+class CImpl<T extends core::Object = dynamic> extends core::Object implements self::C<self::CImpl::T> {
   field self::CImpl::T t;
   constructor _(self::CImpl::T t) → void
     ;
-  static factory •<T extends core::Object>(self::CImpl::•::T t) → self::CImpl<self::CImpl::•::T>
+  static factory •<T extends core::Object = dynamic>(self::CImpl::•::T t) → self::CImpl<self::CImpl::•::T>
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.strong.expect
index 5e10461..111277c 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.strong.expect
@@ -2,19 +2,19 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class C<T extends core::Object> extends core::Object {
+abstract class C<T extends core::Object = dynamic> extends core::Object {
   static field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T;
   abstract set t(generic-covariant-impl generic-covariant-interface self::C::T x) → void;
-  static factory •<T extends core::Object>(self::C::•::T t) → self::C<self::C::•::T>
+  static factory •<T extends core::Object = dynamic>(self::C::•::T t) → self::C<self::C::•::T>
     let dynamic #redirecting_factory = self::CImpl::• in let self::C::•::T #typeArg0 = null in invalid-expression;
 }
-class CImpl<T extends core::Object> extends core::Object implements self::C<self::CImpl::T> {
+class CImpl<T extends core::Object = dynamic> extends core::Object implements self::C<self::CImpl::T> {
   generic-covariant-impl generic-covariant-interface field self::CImpl::T t;
   constructor _(self::CImpl::T t) → void
     : self::CImpl::t = t, super core::Object::•()
     ;
-  static factory •<T extends core::Object>(self::CImpl::•::T t) → self::CImpl<self::CImpl::•::T>
+  static factory •<T extends core::Object = dynamic>(self::CImpl::•::T t) → self::CImpl<self::CImpl::•::T>
     return new self::CImpl::_<self::CImpl::•::T>(t);
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.strong.transformed.expect
index e599360..14d4ed3 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.strong.transformed.expect
@@ -2,19 +2,19 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class C<T extends core::Object> extends core::Object {
+abstract class C<T extends core::Object = dynamic> extends core::Object {
   static field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T;
   abstract set t(generic-covariant-impl generic-covariant-interface self::C::T x) → void;
-  static factory •<T extends core::Object>(self::C::•::T t) → self::C<self::C::•::T>
-    let <T extends core::Object>(self::CImpl::•::T) → self::CImpl<self::CImpl::•::T> #redirecting_factory = self::CImpl::• in let self::C::•::T #typeArg0 = null in invalid-expression;
+  static factory •<T extends core::Object = dynamic>(self::C::•::T t) → self::C<self::C::•::T>
+    let <T extends core::Object = dynamic>(self::CImpl::•::T) → self::CImpl<self::CImpl::•::T> #redirecting_factory = self::CImpl::• in let self::C::•::T #typeArg0 = null in invalid-expression;
 }
-class CImpl<T extends core::Object> extends core::Object implements self::C<self::CImpl::T> {
+class CImpl<T extends core::Object = dynamic> extends core::Object implements self::C<self::CImpl::T> {
   generic-covariant-impl generic-covariant-interface field self::CImpl::T t;
   constructor _(self::CImpl::T t) → void
     : self::CImpl::t = t, super core::Object::•()
     ;
-  static factory •<T extends core::Object>(self::CImpl::•::T t) → self::CImpl<self::CImpl::•::T>
+  static factory •<T extends core::Object = dynamic>(self::CImpl::•::T t) → self::CImpl<self::CImpl::•::T>
     return new self::CImpl::_<self::CImpl::•::T>(t);
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.direct.expect
index 25d5c94..24bc890 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class Clonable<T extends core::Object> extends core::Object {
+class Clonable<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class Pair<T extends self::Clonable<self::Pair::T>, U extends self::Clonable<self::Pair::U>> extends core::Object {
+class Pair<T extends self::Clonable<self::Pair::T> = dynamic, U extends self::Clonable<self::Pair::U> = dynamic> extends core::Object {
   field self::Pair::T t;
   field self::Pair::U u;
   constructor •(self::Pair::T t, self::Pair::U u) → void
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.direct.transformed.expect
index 25d5c94..24bc890 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class Clonable<T extends core::Object> extends core::Object {
+class Clonable<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class Pair<T extends self::Clonable<self::Pair::T>, U extends self::Clonable<self::Pair::U>> extends core::Object {
+class Pair<T extends self::Clonable<self::Pair::T> = dynamic, U extends self::Clonable<self::Pair::U> = dynamic> extends core::Object {
   field self::Pair::T t;
   field self::Pair::U u;
   constructor •(self::Pair::T t, self::Pair::U u) → void
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect
index 6b36422..d22785f 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class Clonable<T extends core::Object> extends core::Object {
+class Clonable<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class Pair<T extends self::Clonable<self::Pair::T>, U extends self::Clonable<self::Pair::U>> extends core::Object {
+class Pair<T extends self::Clonable<self::Pair::T> = self::Clonable<dynamic>, U extends self::Clonable<self::Pair::U> = self::Clonable<dynamic>> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::Pair::T t;
   generic-covariant-impl generic-covariant-interface field self::Pair::U u;
   constructor •(self::Pair::T t, self::Pair::U u) → void
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.transformed.expect
index 6b36422..d22785f 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class Clonable<T extends core::Object> extends core::Object {
+class Clonable<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class Pair<T extends self::Clonable<self::Pair::T>, U extends self::Clonable<self::Pair::U>> extends core::Object {
+class Pair<T extends self::Clonable<self::Pair::T> = self::Clonable<dynamic>, U extends self::Clonable<self::Pair::U> = self::Clonable<dynamic>> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::Pair::T t;
   generic-covariant-impl generic-covariant-interface field self::Pair::U u;
   constructor •(self::Pair::T t, self::Pair::U u) → void
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.direct.expect
index dcf34f0..af3546f 100644
--- a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class Pair<T extends core::Object, U extends core::Object> extends core::Object {
+class Pair<T extends core::Object = dynamic, U extends core::Object = dynamic> extends core::Object {
   field self::Pair::T t;
   field self::Pair::U u;
   constructor •(self::Pair::T t, self::Pair::U u) → void
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.direct.transformed.expect
index dcf34f0..af3546f 100644
--- a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class Pair<T extends core::Object, U extends core::Object> extends core::Object {
+class Pair<T extends core::Object = dynamic, U extends core::Object = dynamic> extends core::Object {
   field self::Pair::T t;
   field self::Pair::U u;
   constructor •(self::Pair::T t, self::Pair::U u) → void
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.strong.expect
index 7db8910..777d093 100644
--- a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class Pair<T extends core::Object, U extends core::Object> extends core::Object {
+class Pair<T extends core::Object = dynamic, U extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::Pair::T t;
   generic-covariant-impl generic-covariant-interface field self::Pair::U u;
   constructor •(self::Pair::T t, self::Pair::U u) → void
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.strong.transformed.expect
index 7db8910..777d093 100644
--- a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class Pair<T extends core::Object, U extends core::Object> extends core::Object {
+class Pair<T extends core::Object = dynamic, U extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::Pair::T t;
   generic-covariant-impl generic-covariant-interface field self::Pair::U u;
   constructor •(self::Pair::T t, self::Pair::U u) → void
diff --git a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.direct.expect b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.direct.expect
index 3fbf5b6..f8dcee7 100644
--- a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.direct.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<S extends core::Object, T extends core::Object> = (S) → T;
-class A<T extends core::Object> extends core::Object {
+typedef Function2<S extends core::Object = dynamic, T extends core::Object = dynamic> = (S) → T;
+class A<T extends core::Object = dynamic> extends core::Object {
   field (self::A::T) → self::A::T x;
   constructor •((self::A::T) → self::A::T x) → void
     : self::A::x = x, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.direct.transformed.expect
index 3fbf5b6..f8dcee7 100644
--- a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.direct.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<S extends core::Object, T extends core::Object> = (S) → T;
-class A<T extends core::Object> extends core::Object {
+typedef Function2<S extends core::Object = dynamic, T extends core::Object = dynamic> = (S) → T;
+class A<T extends core::Object = dynamic> extends core::Object {
   field (self::A::T) → self::A::T x;
   constructor •((self::A::T) → self::A::T x) → void
     : self::A::x = x, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.strong.expect b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.strong.expect
index 4a97594..7fa4e4d 100644
--- a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.strong.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<S extends core::Object, T extends core::Object> = (S) → T;
-class A<T extends core::Object> extends core::Object {
+typedef Function2<S extends core::Object = dynamic, T extends core::Object = dynamic> = (S) → T;
+class A<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field (self::A::T) → self::A::T x;
   constructor •((self::A::T) → self::A::T x) → void
     : self::A::x = x, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.strong.transformed.expect
index 4a97594..7fa4e4d 100644
--- a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<S extends core::Object, T extends core::Object> = (S) → T;
-class A<T extends core::Object> extends core::Object {
+typedef Function2<S extends core::Object = dynamic, T extends core::Object = dynamic> = (S) → T;
+class A<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field (self::A::T) → self::A::T x;
   constructor •((self::A::T) → self::A::T x) → void
     : self::A::x = x, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.direct.expect
index c798f57..4ad6c42 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.direct.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = () → void;
+typedef F<T extends core::Object = dynamic> = () → void;
 class Foo extends core::Object {
   const constructor •(core::List<core::String> l) → void
     : super core::Object::•()
     ;
 }
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -17,7 +17,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>() → void {}
+  method m<T extends core::Object = dynamic>() → void {}
 }
-static method f<T extends core::Object>() → void {}
+static method f<T extends core::Object = dynamic>() → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.direct.transformed.expect
index c798f57..4ad6c42 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.direct.transformed.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = () → void;
+typedef F<T extends core::Object = dynamic> = () → void;
 class Foo extends core::Object {
   const constructor •(core::List<core::String> l) → void
     : super core::Object::•()
     ;
 }
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -17,7 +17,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>() → void {}
+  method m<T extends core::Object = dynamic>() → void {}
 }
-static method f<T extends core::Object>() → void {}
+static method f<T extends core::Object = dynamic>() → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.outline.expect
index 2c07f4f..bc221a6 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.outline.expect
@@ -2,22 +2,22 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = () → void;
+typedef F<T extends core::Object = dynamic> = () → void;
 class Foo extends core::Object {
   const constructor •(core::List<core::String> l) → void
     ;
 }
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
 class D extends core::Object {
   synthetic constructor •() → void
     ;
-  method m<T extends core::Object>() → void
+  method m<T extends core::Object = dynamic>() → void
     ;
 }
-static method f<T extends core::Object>() → void
+static method f<T extends core::Object = dynamic>() → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.direct.expect
index 4d24a73..7f49df8 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.direct.expect
@@ -8,7 +8,7 @@
     ;
 }
 static method test() → void {
-  function f<T extends core::Object>() → void {}
-  dynamic x = <T extends core::Object>() → dynamic {};
+  function f<T extends core::Object = dynamic>() → void {}
+  dynamic x = <T extends core::Object = dynamic>() → dynamic {};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.direct.transformed.expect
index 4d24a73..7f49df8 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.direct.transformed.expect
@@ -8,7 +8,7 @@
     ;
 }
 static method test() → void {
-  function f<T extends core::Object>() → void {}
-  dynamic x = <T extends core::Object>() → dynamic {};
+  function f<T extends core::Object = dynamic>() → void {}
+  dynamic x = <T extends core::Object = dynamic>() → dynamic {};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.direct.expect
index faa662c..7a1ba88 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.direct.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-abstract class MyStream<T extends core::Object> extends asy::Stream<self::MyStream::T> {
-  static factory •<T extends core::Object>() → self::MyStream<self::MyStream::•::T>
+abstract class MyStream<T extends core::Object = dynamic> extends asy::Stream<self::MyStream::T> {
+  static factory •<T extends core::Object = dynamic>() → self::MyStream<self::MyStream::•::T>
     return null;
 }
-static method F<T extends core::Object>() → self::F::T
+static method F<T extends core::Object = dynamic>() → self::F::T
   return null;
 static method f() → asy::Future<dynamic> async {
   dynamic d;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.direct.transformed.expect
index ef5dc3a..3ef1a43 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.direct.transformed.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-abstract class MyStream<T extends core::Object> extends asy::Stream<self::MyStream::T> {
-  static factory •<T extends core::Object>() → self::MyStream<self::MyStream::•::T>
+abstract class MyStream<T extends core::Object = dynamic> extends asy::Stream<self::MyStream::T> {
+  static factory •<T extends core::Object = dynamic>() → self::MyStream<self::MyStream::•::T>
     return null;
 }
-static method F<T extends core::Object>() → self::F::T
+static method F<T extends core::Object = dynamic>() → self::F::T
   return null;
 static method f() → asy::Future<dynamic> /* originally async */ {
   final asy::Completer<dynamic> :completer = asy::Completer::sync<dynamic>();
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.expect
index 86b9f5d..ad5f6d8 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-abstract class MyStream<T extends core::Object> extends asy::Stream<self::MyStream::T> {
-  static factory •<T extends core::Object>() → self::MyStream<self::MyStream::•::T>
+abstract class MyStream<T extends core::Object = dynamic> extends asy::Stream<self::MyStream::T> {
+  static factory •<T extends core::Object = dynamic>() → self::MyStream<self::MyStream::•::T>
     return null;
 }
-static method F<T extends core::Object>() → self::F::T
+static method F<T extends core::Object = dynamic>() → self::F::T
   return null;
 static method f() → asy::Future<dynamic> async {
   dynamic d;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.transformed.expect
index 2138cb0..7dee1bb 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.transformed.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-abstract class MyStream<T extends core::Object> extends asy::Stream<self::MyStream::T> {
-  static factory •<T extends core::Object>() → self::MyStream<self::MyStream::•::T>
+abstract class MyStream<T extends core::Object = dynamic> extends asy::Stream<self::MyStream::T> {
+  static factory •<T extends core::Object = dynamic>() → self::MyStream<self::MyStream::•::T>
     return null;
 }
-static method F<T extends core::Object>() → self::F::T
+static method F<T extends core::Object = dynamic>() → self::F::T
   return null;
 static method f() → asy::Future<dynamic> /* originally async */ {
   final asy::Completer<dynamic> :completer = asy::Completer::sync<dynamic>();
diff --git a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.direct.expect
index cb0d81e..93b9a23 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<S extends core::Object, T extends core::Object> = ([S]) → T;
+typedef Function2<S extends core::Object = dynamic, T extends core::Object = dynamic> = ([S]) → T;
 class Foo extends core::Object {
   field core::List<core::int> x;
   constructor •([core::List<core::int> x = const <dynamic>[1]]) → void
diff --git a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.direct.transformed.expect
index cb0d81e..93b9a23 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<S extends core::Object, T extends core::Object> = ([S]) → T;
+typedef Function2<S extends core::Object = dynamic, T extends core::Object = dynamic> = ([S]) → T;
 class Foo extends core::Object {
   field core::List<core::int> x;
   constructor •([core::List<core::int> x = const <dynamic>[1]]) → void
diff --git a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.strong.expect
index 29996bd..40bcf29 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<S extends core::Object, T extends core::Object> = ([S]) → T;
+typedef Function2<S extends core::Object = dynamic, T extends core::Object = dynamic> = ([S]) → T;
 class Foo extends core::Object {
   field core::List<core::int> x;
   constructor •([core::List<core::int> x = const <core::int>[1]]) → void
diff --git a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.strong.transformed.expect
index 29996bd..40bcf29 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<S extends core::Object, T extends core::Object> = ([S]) → T;
+typedef Function2<S extends core::Object = dynamic, T extends core::Object = dynamic> = ([S]) → T;
 class Foo extends core::Object {
   field core::List<core::int> x;
   constructor •([core::List<core::int> x = const <core::int>[1]]) → void
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.direct.expect
index ca9246e..bd69c63 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.direct.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.direct.transformed.expect
index ca9246e..bd69c63 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.direct.transformed.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.strong.expect
index b742af9..6c7e70c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.strong.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.strong.transformed.expect
index e377e03..8227e66 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.direct.expect
index da516ac..771832d 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::A::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.direct.transformed.expect
index da516ac..771832d 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::A::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.outline.expect
index 12d8079..f9d3fb9 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::A::T x) → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.strong.expect
index d0e29da..c52cb1b 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::A::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.strong.transformed.expect
index d0e29da..c52cb1b 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::A::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.direct.expect
index 12eb980..c3123ef 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<S extends core::Object, T extends core::Object> = (S) → T;
+typedef Function2<S extends core::Object = dynamic, T extends core::Object = dynamic> = (S) → T;
 static method test() → void {
   {
     (core::int) → core::String l0 = (core::int x) → dynamic => null;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.direct.transformed.expect
index 12eb980..c3123ef 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<S extends core::Object, T extends core::Object> = (S) → T;
+typedef Function2<S extends core::Object = dynamic, T extends core::Object = dynamic> = (S) → T;
 static method test() → void {
   {
     (core::int) → core::String l0 = (core::int x) → dynamic => null;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
index 419a2d6..2f7fa93 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<S extends core::Object, T extends core::Object> = (S) → T;
+typedef Function2<S extends core::Object = dynamic, T extends core::Object = dynamic> = (S) → T;
 static method test() → void {
   {
     (core::int) → core::String l0 = (core::int x) → core::Null => null;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.transformed.expect
index 7e72e90..d4df104 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<S extends core::Object, T extends core::Object> = (S) → T;
+typedef Function2<S extends core::Object = dynamic, T extends core::Object = dynamic> = (S) → T;
 static method test() → void {
   {
     (core::int) → core::String l0 = (core::int x) → core::Null => null;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.direct.expect
index 5ffe78d..169595b 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.direct.expect
@@ -4,16 +4,16 @@
 
 static method main() → void {
   {
-    function f<T extends core::Object>(T x) → T
+    function f<T extends core::Object = dynamic>(T x) → T
       return null;
     dynamic v1 = f;
-    v1 = <S extends core::Object>(dynamic x) → dynamic => x;
+    v1 = <S extends core::Object = dynamic>(dynamic x) → dynamic => x;
   }
   {
-    function f<T extends core::Object>(T x) → core::List<T>
+    function f<T extends core::Object = dynamic>(T x) → core::List<T>
       return null;
     dynamic v2 = f;
-    v2 = <S extends core::Object>(dynamic x) → dynamic => <dynamic>[x];
+    v2 = <S extends core::Object = dynamic>(dynamic x) → dynamic => <dynamic>[x];
     core::Iterable<core::int> r = v2.call(42);
     core::Iterable<core::String> s = v2.call("hello");
     core::Iterable<core::List<core::int>> t = v2.call(<core::int>[]);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.direct.transformed.expect
index 5ffe78d..169595b 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.direct.transformed.expect
@@ -4,16 +4,16 @@
 
 static method main() → void {
   {
-    function f<T extends core::Object>(T x) → T
+    function f<T extends core::Object = dynamic>(T x) → T
       return null;
     dynamic v1 = f;
-    v1 = <S extends core::Object>(dynamic x) → dynamic => x;
+    v1 = <S extends core::Object = dynamic>(dynamic x) → dynamic => x;
   }
   {
-    function f<T extends core::Object>(T x) → core::List<T>
+    function f<T extends core::Object = dynamic>(T x) → core::List<T>
       return null;
     dynamic v2 = f;
-    v2 = <S extends core::Object>(dynamic x) → dynamic => <dynamic>[x];
+    v2 = <S extends core::Object = dynamic>(dynamic x) → dynamic => <dynamic>[x];
     core::Iterable<core::int> r = v2.call(42);
     core::Iterable<core::String> s = v2.call("hello");
     core::Iterable<core::List<core::int>> t = v2.call(<core::int>[]);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.direct.expect
index 995d542..8e6cf96 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.direct.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class F3<T extends core::Object> extends core::Object {
+class F3<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::Iterable<core::Iterable<self::F3::T>> a) → void
     : super core::Object::•() {}
 }
-class F4<T extends core::Object> extends core::Object {
+class F4<T extends core::Object = dynamic> extends core::Object {
   constructor •({core::Iterable<core::Iterable<self::F4::T>> a = null}) → void
     : super core::Object::•() {}
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.direct.transformed.expect
index 995d542..8e6cf96 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.direct.transformed.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class F3<T extends core::Object> extends core::Object {
+class F3<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::Iterable<core::Iterable<self::F3::T>> a) → void
     : super core::Object::•() {}
 }
-class F4<T extends core::Object> extends core::Object {
+class F4<T extends core::Object = dynamic> extends core::Object {
   constructor •({core::Iterable<core::Iterable<self::F4::T>> a = null}) → void
     : super core::Object::•() {}
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.strong.expect
index 8c1b574..3cb6605 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.strong.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class F3<T extends core::Object> extends core::Object {
+class F3<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::Iterable<core::Iterable<self::F3::T>> a) → void
     : super core::Object::•() {}
 }
-class F4<T extends core::Object> extends core::Object {
+class F4<T extends core::Object = dynamic> extends core::Object {
   constructor •({core::Iterable<core::Iterable<self::F4::T>> a = null}) → void
     : super core::Object::•() {}
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.strong.transformed.expect
index 8c1b574..3cb6605 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.strong.transformed.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class F3<T extends core::Object> extends core::Object {
+class F3<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::Iterable<core::Iterable<self::F3::T>> a) → void
     : super core::Object::•() {}
 }
-class F4<T extends core::Object> extends core::Object {
+class F4<T extends core::Object = dynamic> extends core::Object {
   constructor •({core::Iterable<core::Iterable<self::F4::T>> a = null}) → void
     : super core::Object::•() {}
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.direct.expect
index 336e915..6ee04ff 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.direct.expect
@@ -2,23 +2,23 @@
 import self as self;
 import "dart:core" as core;
 
-class F0<T extends core::Object> extends core::Object {
+class F0<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::List<self::F0::T> a) → void
     : super core::Object::•() {}
 }
-class F1<T extends core::Object> extends core::Object {
+class F1<T extends core::Object = dynamic> extends core::Object {
   constructor •({core::List<self::F1::T> a = null}) → void
     : super core::Object::•() {}
 }
-class F2<T extends core::Object> extends core::Object {
+class F2<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::Iterable<self::F2::T> a) → void
     : super core::Object::•() {}
 }
-class F3<T extends core::Object> extends core::Object {
+class F3<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::Iterable<core::Iterable<self::F3::T>> a) → void
     : super core::Object::•() {}
 }
-class F4<T extends core::Object> extends core::Object {
+class F4<T extends core::Object = dynamic> extends core::Object {
   constructor •({core::Iterable<core::Iterable<self::F4::T>> a = null}) → void
     : super core::Object::•() {}
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.direct.transformed.expect
index 336e915..6ee04ff 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.direct.transformed.expect
@@ -2,23 +2,23 @@
 import self as self;
 import "dart:core" as core;
 
-class F0<T extends core::Object> extends core::Object {
+class F0<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::List<self::F0::T> a) → void
     : super core::Object::•() {}
 }
-class F1<T extends core::Object> extends core::Object {
+class F1<T extends core::Object = dynamic> extends core::Object {
   constructor •({core::List<self::F1::T> a = null}) → void
     : super core::Object::•() {}
 }
-class F2<T extends core::Object> extends core::Object {
+class F2<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::Iterable<self::F2::T> a) → void
     : super core::Object::•() {}
 }
-class F3<T extends core::Object> extends core::Object {
+class F3<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::Iterable<core::Iterable<self::F3::T>> a) → void
     : super core::Object::•() {}
 }
-class F4<T extends core::Object> extends core::Object {
+class F4<T extends core::Object = dynamic> extends core::Object {
   constructor •({core::Iterable<core::Iterable<self::F4::T>> a = null}) → void
     : super core::Object::•() {}
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
index 2984bb7..9d2e2a2 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
@@ -2,23 +2,23 @@
 import self as self;
 import "dart:core" as core;
 
-class F0<T extends core::Object> extends core::Object {
+class F0<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::List<self::F0::T> a) → void
     : super core::Object::•() {}
 }
-class F1<T extends core::Object> extends core::Object {
+class F1<T extends core::Object = dynamic> extends core::Object {
   constructor •({core::List<self::F1::T> a = null}) → void
     : super core::Object::•() {}
 }
-class F2<T extends core::Object> extends core::Object {
+class F2<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::Iterable<self::F2::T> a) → void
     : super core::Object::•() {}
 }
-class F3<T extends core::Object> extends core::Object {
+class F3<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::Iterable<core::Iterable<self::F3::T>> a) → void
     : super core::Object::•() {}
 }
-class F4<T extends core::Object> extends core::Object {
+class F4<T extends core::Object = dynamic> extends core::Object {
   constructor •({core::Iterable<core::Iterable<self::F4::T>> a = null}) → void
     : super core::Object::•() {}
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.transformed.expect
index 5aa4f1e..2517cb9 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.transformed.expect
@@ -2,23 +2,23 @@
 import self as self;
 import "dart:core" as core;
 
-class F0<T extends core::Object> extends core::Object {
+class F0<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::List<self::F0::T> a) → void
     : super core::Object::•() {}
 }
-class F1<T extends core::Object> extends core::Object {
+class F1<T extends core::Object = dynamic> extends core::Object {
   constructor •({core::List<self::F1::T> a = null}) → void
     : super core::Object::•() {}
 }
-class F2<T extends core::Object> extends core::Object {
+class F2<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::Iterable<self::F2::T> a) → void
     : super core::Object::•() {}
 }
-class F3<T extends core::Object> extends core::Object {
+class F3<T extends core::Object = dynamic> extends core::Object {
   constructor •(core::Iterable<core::Iterable<self::F3::T>> a) → void
     : super core::Object::•() {}
 }
-class F4<T extends core::Object> extends core::Object {
+class F4<T extends core::Object = dynamic> extends core::Object {
   constructor •({core::Iterable<core::Iterable<self::F4::T>> a = null}) → void
     : super core::Object::•() {}
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart
index f2c349c..7ca127b 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart
@@ -8,7 +8,7 @@
 void test() {
   {
     String f<S>(int x) => null;
-    var /*@type=<S extends Object>(int) -> String*/ v = f;
+    var /*@type=<S extends Object = dynamic>(int) -> String*/ v = f;
     v = <T> /*@returnType=Null*/ (int x) => null;
     v = <T> /*@returnType=String*/ (int x) => "hello";
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
@@ -20,7 +20,7 @@
   }
   {
     String f<S>(int x) => null;
-    var /*@type=<S extends Object>(int) -> String*/ v = f;
+    var /*@type=<S extends Object = dynamic>(int) -> String*/ v = f;
     v = <T> /*@returnType=Null*/ (/*@type=int*/ x) => null;
     v = <T> /*@returnType=String*/ (/*@type=int*/ x) => "hello";
     v = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/ <
@@ -35,7 +35,7 @@
   }
   {
     List<String> f<S>(int x) => null;
-    var /*@type=<S extends Object>(int) -> List<String>*/ v = f;
+    var /*@type=<S extends Object = dynamic>(int) -> List<String>*/ v = f;
     v = <T> /*@returnType=Null*/ (int x) => null;
     v = <T> /*@returnType=List<String>*/ (int x) => /*@typeArgs=String*/ [
           "hello"
@@ -55,16 +55,17 @@
     int int2int<S>(int x) => null;
     String int2String<T>(int x) => null;
     String string2String<T>(String x) => null;
-    var /*@type=<S extends Object>(int) -> int*/ x = int2int;
+    var /*@type=<S extends Object = dynamic>(int) -> int*/ x = int2int;
     x = <T> /*@returnType=int*/ (/*@type=int*/ x) => x;
     x = <T> /*@returnType=int*/ (/*@type=int*/ x) => x /*@target=num::+*/ + 1;
-    var /*@type=<T extends Object>(int) -> String*/ y = int2String;
+    var /*@type=<T extends Object = dynamic>(int) -> String*/ y = int2String;
     y = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/ <
             T> /*@returnType=String*/ (/*@type=int*/ x) =>
         x;
     y = <T> /*@returnType=String*/ (/*@type=int*/ x) => /*info:DYNAMIC_INVOKE, info:DYNAMIC_CAST*/ x
         .substring(3);
-    var /*@type=<T extends Object>(String) -> String*/ z = string2String;
+    var /*@type=<T extends Object = dynamic>(String) -> String*/ z =
+        string2String;
     z = <T> /*@returnType=String*/ (/*@type=String*/ x) =>
         x. /*@target=String::substring*/ substring(3);
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.direct.expect
index ae8eea6..f1cf2f0 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.direct.expect
@@ -4,58 +4,58 @@
 
 static method test() → void {
   {
-    function f<S extends core::Object>(core::int x) → core::String
+    function f<S extends core::Object = dynamic>(core::int x) → core::String
       return null;
     dynamic v = f;
-    v = <T extends core::Object>(core::int x) → dynamic => null;
-    v = <T extends core::Object>(core::int x) → dynamic => "hello";
-    v = <T extends core::Object>(core::String x) → dynamic => "hello";
-    v = <T extends core::Object>(core::int x) → dynamic => 3;
-    v = <T extends core::Object>(core::int x) → dynamic {
+    v = <T extends core::Object = dynamic>(core::int x) → dynamic => null;
+    v = <T extends core::Object = dynamic>(core::int x) → dynamic => "hello";
+    v = <T extends core::Object = dynamic>(core::String x) → dynamic => "hello";
+    v = <T extends core::Object = dynamic>(core::int x) → dynamic => 3;
+    v = <T extends core::Object = dynamic>(core::int x) → dynamic {
       return 3;
     };
   }
   {
-    function f<S extends core::Object>(core::int x) → core::String
+    function f<S extends core::Object = dynamic>(core::int x) → core::String
       return null;
     dynamic v = f;
-    v = <T extends core::Object>(dynamic x) → dynamic => null;
-    v = <T extends core::Object>(dynamic x) → dynamic => "hello";
-    v = <T extends core::Object>(dynamic x) → dynamic => 3;
-    v = <T extends core::Object>(dynamic x) → dynamic {
+    v = <T extends core::Object = dynamic>(dynamic x) → dynamic => null;
+    v = <T extends core::Object = dynamic>(dynamic x) → dynamic => "hello";
+    v = <T extends core::Object = dynamic>(dynamic x) → dynamic => 3;
+    v = <T extends core::Object = dynamic>(dynamic x) → dynamic {
       return 3;
     };
-    v = <T extends core::Object>(dynamic x) → dynamic {
+    v = <T extends core::Object = dynamic>(dynamic x) → dynamic {
       return x;
     };
   }
   {
-    function f<S extends core::Object>(core::int x) → core::List<core::String>
+    function f<S extends core::Object = dynamic>(core::int x) → core::List<core::String>
       return null;
     dynamic v = f;
-    v = <T extends core::Object>(core::int x) → dynamic => null;
-    v = <T extends core::Object>(core::int x) → dynamic => <dynamic>["hello"];
-    v = <T extends core::Object>(core::String x) → dynamic => <dynamic>["hello"];
-    v = <T extends core::Object>(core::int x) → dynamic => <dynamic>[3];
-    v = <T extends core::Object>(core::int x) → dynamic {
+    v = <T extends core::Object = dynamic>(core::int x) → dynamic => null;
+    v = <T extends core::Object = dynamic>(core::int x) → dynamic => <dynamic>["hello"];
+    v = <T extends core::Object = dynamic>(core::String x) → dynamic => <dynamic>["hello"];
+    v = <T extends core::Object = dynamic>(core::int x) → dynamic => <dynamic>[3];
+    v = <T extends core::Object = dynamic>(core::int x) → dynamic {
       return <dynamic>[3];
     };
   }
   {
-    function int2int<S extends core::Object>(core::int x) → core::int
+    function int2int<S extends core::Object = dynamic>(core::int x) → core::int
       return null;
-    function int2String<T extends core::Object>(core::int x) → core::String
+    function int2String<T extends core::Object = dynamic>(core::int x) → core::String
       return null;
-    function string2String<T extends core::Object>(core::String x) → core::String
+    function string2String<T extends core::Object = dynamic>(core::String x) → core::String
       return null;
     dynamic x = int2int;
-    x = <T extends core::Object>(dynamic x) → dynamic => x;
-    x = <T extends core::Object>(dynamic x) → dynamic => x.+(1);
+    x = <T extends core::Object = dynamic>(dynamic x) → dynamic => x;
+    x = <T extends core::Object = dynamic>(dynamic x) → dynamic => x.+(1);
     dynamic y = int2String;
-    y = <T extends core::Object>(dynamic x) → dynamic => x;
-    y = <T extends core::Object>(dynamic x) → dynamic => x.substring(3);
+    y = <T extends core::Object = dynamic>(dynamic x) → dynamic => x;
+    y = <T extends core::Object = dynamic>(dynamic x) → dynamic => x.substring(3);
     dynamic z = string2String;
-    z = <T extends core::Object>(dynamic x) → dynamic => x.substring(3);
+    z = <T extends core::Object = dynamic>(dynamic x) → dynamic => x.substring(3);
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.direct.transformed.expect
index ae8eea6..f1cf2f0 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.direct.transformed.expect
@@ -4,58 +4,58 @@
 
 static method test() → void {
   {
-    function f<S extends core::Object>(core::int x) → core::String
+    function f<S extends core::Object = dynamic>(core::int x) → core::String
       return null;
     dynamic v = f;
-    v = <T extends core::Object>(core::int x) → dynamic => null;
-    v = <T extends core::Object>(core::int x) → dynamic => "hello";
-    v = <T extends core::Object>(core::String x) → dynamic => "hello";
-    v = <T extends core::Object>(core::int x) → dynamic => 3;
-    v = <T extends core::Object>(core::int x) → dynamic {
+    v = <T extends core::Object = dynamic>(core::int x) → dynamic => null;
+    v = <T extends core::Object = dynamic>(core::int x) → dynamic => "hello";
+    v = <T extends core::Object = dynamic>(core::String x) → dynamic => "hello";
+    v = <T extends core::Object = dynamic>(core::int x) → dynamic => 3;
+    v = <T extends core::Object = dynamic>(core::int x) → dynamic {
       return 3;
     };
   }
   {
-    function f<S extends core::Object>(core::int x) → core::String
+    function f<S extends core::Object = dynamic>(core::int x) → core::String
       return null;
     dynamic v = f;
-    v = <T extends core::Object>(dynamic x) → dynamic => null;
-    v = <T extends core::Object>(dynamic x) → dynamic => "hello";
-    v = <T extends core::Object>(dynamic x) → dynamic => 3;
-    v = <T extends core::Object>(dynamic x) → dynamic {
+    v = <T extends core::Object = dynamic>(dynamic x) → dynamic => null;
+    v = <T extends core::Object = dynamic>(dynamic x) → dynamic => "hello";
+    v = <T extends core::Object = dynamic>(dynamic x) → dynamic => 3;
+    v = <T extends core::Object = dynamic>(dynamic x) → dynamic {
       return 3;
     };
-    v = <T extends core::Object>(dynamic x) → dynamic {
+    v = <T extends core::Object = dynamic>(dynamic x) → dynamic {
       return x;
     };
   }
   {
-    function f<S extends core::Object>(core::int x) → core::List<core::String>
+    function f<S extends core::Object = dynamic>(core::int x) → core::List<core::String>
       return null;
     dynamic v = f;
-    v = <T extends core::Object>(core::int x) → dynamic => null;
-    v = <T extends core::Object>(core::int x) → dynamic => <dynamic>["hello"];
-    v = <T extends core::Object>(core::String x) → dynamic => <dynamic>["hello"];
-    v = <T extends core::Object>(core::int x) → dynamic => <dynamic>[3];
-    v = <T extends core::Object>(core::int x) → dynamic {
+    v = <T extends core::Object = dynamic>(core::int x) → dynamic => null;
+    v = <T extends core::Object = dynamic>(core::int x) → dynamic => <dynamic>["hello"];
+    v = <T extends core::Object = dynamic>(core::String x) → dynamic => <dynamic>["hello"];
+    v = <T extends core::Object = dynamic>(core::int x) → dynamic => <dynamic>[3];
+    v = <T extends core::Object = dynamic>(core::int x) → dynamic {
       return <dynamic>[3];
     };
   }
   {
-    function int2int<S extends core::Object>(core::int x) → core::int
+    function int2int<S extends core::Object = dynamic>(core::int x) → core::int
       return null;
-    function int2String<T extends core::Object>(core::int x) → core::String
+    function int2String<T extends core::Object = dynamic>(core::int x) → core::String
       return null;
-    function string2String<T extends core::Object>(core::String x) → core::String
+    function string2String<T extends core::Object = dynamic>(core::String x) → core::String
       return null;
     dynamic x = int2int;
-    x = <T extends core::Object>(dynamic x) → dynamic => x;
-    x = <T extends core::Object>(dynamic x) → dynamic => x.+(1);
+    x = <T extends core::Object = dynamic>(dynamic x) → dynamic => x;
+    x = <T extends core::Object = dynamic>(dynamic x) → dynamic => x.+(1);
     dynamic y = int2String;
-    y = <T extends core::Object>(dynamic x) → dynamic => x;
-    y = <T extends core::Object>(dynamic x) → dynamic => x.substring(3);
+    y = <T extends core::Object = dynamic>(dynamic x) → dynamic => x;
+    y = <T extends core::Object = dynamic>(dynamic x) → dynamic => x.substring(3);
     dynamic z = string2String;
-    z = <T extends core::Object>(dynamic x) → dynamic => x.substring(3);
+    z = <T extends core::Object = dynamic>(dynamic x) → dynamic => x.substring(3);
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
index 4565308..03e0d17 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
@@ -4,20 +4,20 @@
 
 static method test() → void {
   {
-    function f<S extends core::Object>(core::int x) → core::String
+    function f<S extends core::Object = dynamic>(core::int x) → core::String
       return null;
-    <S extends core::Object>(core::int) → core::String v = f;
-    v = <T extends core::Object>(core::int x) → core::Null => null;
-    v = <T extends core::Object>(core::int x) → core::String => "hello";
-    v = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object>(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.
-Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.
+    <S extends core::Object = dynamic>(core::int) → core::String v = f;
+    v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
+    v = <T extends core::Object = dynamic>(core::int x) → core::String => "hello";
+    v = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::String'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
-                                                                ^" in let final dynamic #t2 = <T extends core::Object>(core::String x) → core::String => "hello" in null;
-    v = <T extends core::Object>(core::int x) → core::String => let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                ^" in let final dynamic #t2 = <T extends core::Object = dynamic>(core::String x) → core::String => "hello" in null;
+    v = <T extends core::Object = dynamic>(core::int x) → core::String => let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;
                                                                            ^" in let final dynamic #t4 = 3 in null;
-    v = <T extends core::Object>(core::int x) → core::String {
+    v = <T extends core::Object = dynamic>(core::int x) → core::String {
       return let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
@@ -25,22 +25,22 @@
     };
   }
   {
-    function f<S extends core::Object>(core::int x) → core::String
+    function f<S extends core::Object = dynamic>(core::int x) → core::String
       return null;
-    <S extends core::Object>(core::int) → core::String v = f;
-    v = <T extends core::Object>(core::int x) → core::Null => null;
-    v = <T extends core::Object>(core::int x) → core::String => "hello";
-    v = <T extends core::Object>(core::int x) → core::String => let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    <S extends core::Object = dynamic>(core::int) → core::String v = f;
+    v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
+    v = <T extends core::Object = dynamic>(core::int x) → core::String => "hello";
+    v = <T extends core::Object = dynamic>(core::int x) → core::String => let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         3;
         ^" in let final dynamic #t8 = 3 in null;
-    v = <T extends core::Object>(core::int x) → core::String {
+    v = <T extends core::Object = dynamic>(core::int x) → core::String {
       return let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                               ^" in let final dynamic #t10 = 3 in null;
     };
-    v = <T extends core::Object>(core::int x) → core::String {
+    v = <T extends core::Object = dynamic>(core::int x) → core::String {
       return let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
@@ -48,20 +48,20 @@
     };
   }
   {
-    function f<S extends core::Object>(core::int x) → core::List<core::String>
+    function f<S extends core::Object = dynamic>(core::int x) → core::List<core::String>
       return null;
-    <S extends core::Object>(core::int) → core::List<core::String> v = f;
-    v = <T extends core::Object>(core::int x) → core::Null => null;
-    v = <T extends core::Object>(core::int x) → core::List<core::String> => <core::String>["hello"];
-    v = let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object>(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
-Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+    <S extends core::Object = dynamic>(core::int) → core::List<core::String> v = f;
+    v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
+    v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> => <core::String>["hello"];
+    v = let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String
-                                                                      ^" in let final dynamic #t14 = <T extends core::Object>(core::String x) → core::List<core::String> => <core::String>["hello"] in null;
-    v = <T extends core::Object>(core::int x) → core::List<core::String> => <core::String>[let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                      ^" in let final dynamic #t14 = <T extends core::Object = dynamic>(core::String x) → core::List<core::String> => <core::String>["hello"] in null;
+    v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> => <core::String>[let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                      ^" in let final dynamic #t16 = 3 in null];
-    v = <T extends core::Object>(core::int x) → core::List<core::String> {
+    v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> {
       return <core::String>[let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
@@ -69,26 +69,26 @@
     };
   }
   {
-    function int2int<S extends core::Object>(core::int x) → core::int
+    function int2int<S extends core::Object = dynamic>(core::int x) → core::int
       return null;
-    function int2String<T extends core::Object>(core::int x) → core::String
+    function int2String<T extends core::Object = dynamic>(core::int x) → core::String
       return null;
-    function string2String<T extends core::Object>(core::String x) → core::String
+    function string2String<T extends core::Object = dynamic>(core::String x) → core::String
       return null;
-    <S extends core::Object>(core::int) → core::int x = int2int;
-    x = <T extends core::Object>(core::int x) → core::int => x;
-    x = <T extends core::Object>(core::int x) → core::int => x.{core::num::+}(1);
-    <T extends core::Object>(core::int) → core::String y = int2String;
-    y = <T extends core::Object>(core::int x) → core::String => let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    <S extends core::Object = dynamic>(core::int) → core::int x = int2int;
+    x = <T extends core::Object = dynamic>(core::int x) → core::int => x;
+    x = <T extends core::Object = dynamic>(core::int x) → core::int => x.{core::num::+}(1);
+    <T extends core::Object = dynamic>(core::int) → core::String y = int2String;
+    y = <T extends core::Object = dynamic>(core::int x) → core::String => let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         x;
         ^" in let final dynamic #t20 = x in null;
-    y = <T extends core::Object>(core::int x) → core::String => (let final dynamic #t21 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:66:10: Error: The method 'substring' isn't defined for the class 'dart.core::int'.
+    y = <T extends core::Object = dynamic>(core::int x) → core::String => (let final dynamic #t21 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:66:10: Error: The method 'substring' isn't defined for the class 'dart.core::int'.
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
         .substring(3);
          ^") as{TypeError} core::String;
-    <T extends core::Object>(core::String) → core::String z = string2String;
-    z = <T extends core::Object>(core::String x) → core::String => x.{core::String::substring}(3);
+    <T extends core::Object = dynamic>(core::String) → core::String z = string2String;
+    z = <T extends core::Object = dynamic>(core::String x) → core::String => x.{core::String::substring}(3);
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.transformed.expect
index c9bbbdd..fbc3370 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.transformed.expect
@@ -4,20 +4,20 @@
 
 static method test() → void {
   {
-    function f<S extends core::Object>(core::int x) → core::String
+    function f<S extends core::Object = dynamic>(core::int x) → core::String
       return null;
-    <S extends core::Object>(core::int) → core::String v = f;
-    v = <T extends core::Object>(core::int x) → core::Null => null;
-    v = <T extends core::Object>(core::int x) → core::String => "hello";
-    v = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object>(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.
-Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.
+    <S extends core::Object = dynamic>(core::int) → core::String v = f;
+    v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
+    v = <T extends core::Object = dynamic>(core::int x) → core::String => "hello";
+    v = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::String'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
-                                                                ^" in let final <T extends core::Object>(core::String) → core::String #t2 = <T extends core::Object>(core::String x) → core::String => "hello" in null;
-    v = <T extends core::Object>(core::int x) → core::String => let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                ^" in let final <T extends core::Object = dynamic>(core::String) → core::String #t2 = <T extends core::Object = dynamic>(core::String x) → core::String => "hello" in null;
+    v = <T extends core::Object = dynamic>(core::int x) → core::String => let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;
                                                                            ^" in let final core::int #t4 = 3 in null;
-    v = <T extends core::Object>(core::int x) → core::String {
+    v = <T extends core::Object = dynamic>(core::int x) → core::String {
       return let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
@@ -25,22 +25,22 @@
     };
   }
   {
-    function f<S extends core::Object>(core::int x) → core::String
+    function f<S extends core::Object = dynamic>(core::int x) → core::String
       return null;
-    <S extends core::Object>(core::int) → core::String v = f;
-    v = <T extends core::Object>(core::int x) → core::Null => null;
-    v = <T extends core::Object>(core::int x) → core::String => "hello";
-    v = <T extends core::Object>(core::int x) → core::String => let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    <S extends core::Object = dynamic>(core::int) → core::String v = f;
+    v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
+    v = <T extends core::Object = dynamic>(core::int x) → core::String => "hello";
+    v = <T extends core::Object = dynamic>(core::int x) → core::String => let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         3;
         ^" in let final core::int #t8 = 3 in null;
-    v = <T extends core::Object>(core::int x) → core::String {
+    v = <T extends core::Object = dynamic>(core::int x) → core::String {
       return let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                               ^" in let final core::int #t10 = 3 in null;
     };
-    v = <T extends core::Object>(core::int x) → core::String {
+    v = <T extends core::Object = dynamic>(core::int x) → core::String {
       return let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
@@ -48,20 +48,20 @@
     };
   }
   {
-    function f<S extends core::Object>(core::int x) → core::List<core::String>
+    function f<S extends core::Object = dynamic>(core::int x) → core::List<core::String>
       return null;
-    <S extends core::Object>(core::int) → core::List<core::String> v = f;
-    v = <T extends core::Object>(core::int x) → core::Null => null;
-    v = <T extends core::Object>(core::int x) → core::List<core::String> => <core::String>["hello"];
-    v = let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object>(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
-Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+    <S extends core::Object = dynamic>(core::int) → core::List<core::String> v = f;
+    v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
+    v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> => <core::String>["hello"];
+    v = let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String
-                                                                      ^" in let final <T extends core::Object>(core::String) → core::List<core::String> #t14 = <T extends core::Object>(core::String x) → core::List<core::String> => <core::String>["hello"] in null;
-    v = <T extends core::Object>(core::int x) → core::List<core::String> => <core::String>[let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                      ^" in let final <T extends core::Object = dynamic>(core::String) → core::List<core::String> #t14 = <T extends core::Object = dynamic>(core::String x) → core::List<core::String> => <core::String>["hello"] in null;
+    v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> => <core::String>[let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                      ^" in let final core::int #t16 = 3 in null];
-    v = <T extends core::Object>(core::int x) → core::List<core::String> {
+    v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> {
       return <core::String>[let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
@@ -69,26 +69,26 @@
     };
   }
   {
-    function int2int<S extends core::Object>(core::int x) → core::int
+    function int2int<S extends core::Object = dynamic>(core::int x) → core::int
       return null;
-    function int2String<T extends core::Object>(core::int x) → core::String
+    function int2String<T extends core::Object = dynamic>(core::int x) → core::String
       return null;
-    function string2String<T extends core::Object>(core::String x) → core::String
+    function string2String<T extends core::Object = dynamic>(core::String x) → core::String
       return null;
-    <S extends core::Object>(core::int) → core::int x = int2int;
-    x = <T extends core::Object>(core::int x) → core::int => x;
-    x = <T extends core::Object>(core::int x) → core::int => x.{core::num::+}(1);
-    <T extends core::Object>(core::int) → core::String y = int2String;
-    y = <T extends core::Object>(core::int x) → core::String => let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    <S extends core::Object = dynamic>(core::int) → core::int x = int2int;
+    x = <T extends core::Object = dynamic>(core::int x) → core::int => x;
+    x = <T extends core::Object = dynamic>(core::int x) → core::int => x.{core::num::+}(1);
+    <T extends core::Object = dynamic>(core::int) → core::String y = int2String;
+    y = <T extends core::Object = dynamic>(core::int x) → core::String => let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         x;
         ^" in let final core::int #t20 = x in null;
-    y = <T extends core::Object>(core::int x) → core::String => (let final core::int #t21 = x in let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:66:10: Error: The method 'substring' isn't defined for the class 'dart.core::int'.
+    y = <T extends core::Object = dynamic>(core::int x) → core::String => (let final core::int #t21 = x in let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:66:10: Error: The method 'substring' isn't defined for the class 'dart.core::int'.
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
         .substring(3);
          ^") as{TypeError} core::String;
-    <T extends core::Object>(core::String) → core::String z = string2String;
-    z = <T extends core::Object>(core::String x) → core::String => x.{core::String::substring}(3);
+    <T extends core::Object = dynamic>(core::String) → core::String z = string2String;
+    z = <T extends core::Object = dynamic>(core::String x) → core::String => x.{core::String::substring}(3);
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.direct.expect
index e0aaab1..2f9e241 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<S extends core::Object, T extends core::Object> extends core::Object {
+class A<S extends core::Object = dynamic, T extends core::Object = dynamic> extends core::Object {
   field self::A::S x;
   field self::A::T y;
   constructor •(self::A::S x, self::A::T y) → void
@@ -12,7 +12,7 @@
     : self::A::x = x, self::A::y = y, super core::Object::•()
     ;
 }
-class B<S extends core::Object, T extends core::Object> extends self::A<self::B::T, self::B::S> {
+class B<S extends core::Object = dynamic, T extends core::Object = dynamic> extends self::A<self::B::T, self::B::S> {
   constructor •(self::B::S y, self::B::T x) → void
     : super self::A::•(x, y)
     ;
@@ -20,7 +20,7 @@
     : super self::A::named(x, y)
     ;
 }
-class C<S extends core::Object> extends self::B<self::C::S, self::C::S> {
+class C<S extends core::Object = dynamic> extends self::B<self::C::S, self::C::S> {
   constructor •(self::C::S a) → void
     : super self::B::•(a, a)
     ;
@@ -28,7 +28,7 @@
     : super self::B::named(a, a)
     ;
 }
-class D<S extends core::Object, T extends core::Object> extends self::B<self::D::T, core::int> {
+class D<S extends core::Object = dynamic, T extends core::Object = dynamic> extends self::B<self::D::T, core::int> {
   constructor •(self::D::T a) → void
     : super self::B::•(a, 3)
     ;
@@ -36,12 +36,12 @@
     : super self::B::named(a, 3)
     ;
 }
-class E<S extends core::Object, T extends core::Object> extends self::A<self::C<self::E::S>, self::E::T> {
+class E<S extends core::Object = dynamic, T extends core::Object = dynamic> extends self::A<self::C<self::E::S>, self::E::T> {
   constructor •(self::E::T a) → void
     : super self::A::•(null, a)
     ;
 }
-class F<S extends core::Object, T extends core::Object> extends self::A<self::F::S, self::F::T> {
+class F<S extends core::Object = dynamic, T extends core::Object = dynamic> extends self::A<self::F::S, self::F::T> {
   constructor •(self::F::S x, self::F::T y, {core::List<self::F::S> a = null, core::List<self::F::T> b = null}) → void
     : super self::A::•(x, y)
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.direct.transformed.expect
index e0aaab1..2f9e241 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<S extends core::Object, T extends core::Object> extends core::Object {
+class A<S extends core::Object = dynamic, T extends core::Object = dynamic> extends core::Object {
   field self::A::S x;
   field self::A::T y;
   constructor •(self::A::S x, self::A::T y) → void
@@ -12,7 +12,7 @@
     : self::A::x = x, self::A::y = y, super core::Object::•()
     ;
 }
-class B<S extends core::Object, T extends core::Object> extends self::A<self::B::T, self::B::S> {
+class B<S extends core::Object = dynamic, T extends core::Object = dynamic> extends self::A<self::B::T, self::B::S> {
   constructor •(self::B::S y, self::B::T x) → void
     : super self::A::•(x, y)
     ;
@@ -20,7 +20,7 @@
     : super self::A::named(x, y)
     ;
 }
-class C<S extends core::Object> extends self::B<self::C::S, self::C::S> {
+class C<S extends core::Object = dynamic> extends self::B<self::C::S, self::C::S> {
   constructor •(self::C::S a) → void
     : super self::B::•(a, a)
     ;
@@ -28,7 +28,7 @@
     : super self::B::named(a, a)
     ;
 }
-class D<S extends core::Object, T extends core::Object> extends self::B<self::D::T, core::int> {
+class D<S extends core::Object = dynamic, T extends core::Object = dynamic> extends self::B<self::D::T, core::int> {
   constructor •(self::D::T a) → void
     : super self::B::•(a, 3)
     ;
@@ -36,12 +36,12 @@
     : super self::B::named(a, 3)
     ;
 }
-class E<S extends core::Object, T extends core::Object> extends self::A<self::C<self::E::S>, self::E::T> {
+class E<S extends core::Object = dynamic, T extends core::Object = dynamic> extends self::A<self::C<self::E::S>, self::E::T> {
   constructor •(self::E::T a) → void
     : super self::A::•(null, a)
     ;
 }
-class F<S extends core::Object, T extends core::Object> extends self::A<self::F::S, self::F::T> {
+class F<S extends core::Object = dynamic, T extends core::Object = dynamic> extends self::A<self::F::S, self::F::T> {
   constructor •(self::F::S x, self::F::T y, {core::List<self::F::S> a = null, core::List<self::F::T> b = null}) → void
     : super self::A::•(x, y)
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
index b3047dd..5fc98c7 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<S extends core::Object, T extends core::Object> extends core::Object {
+class A<S extends core::Object = dynamic, T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::A::S x;
   generic-covariant-impl generic-covariant-interface field self::A::T y;
   constructor •(self::A::S x, self::A::T y) → void
@@ -12,7 +12,7 @@
     : self::A::x = x, self::A::y = y, super core::Object::•()
     ;
 }
-class B<S extends core::Object, T extends core::Object> extends self::A<self::B::T, self::B::S> {
+class B<S extends core::Object = dynamic, T extends core::Object = dynamic> extends self::A<self::B::T, self::B::S> {
   constructor •(self::B::S y, self::B::T x) → void
     : super self::A::•(x, y)
     ;
@@ -20,7 +20,7 @@
     : super self::A::named(x, y)
     ;
 }
-class C<S extends core::Object> extends self::B<self::C::S, self::C::S> {
+class C<S extends core::Object = dynamic> extends self::B<self::C::S, self::C::S> {
   constructor •(self::C::S a) → void
     : super self::B::•(a, a)
     ;
@@ -28,7 +28,7 @@
     : super self::B::named(a, a)
     ;
 }
-class D<S extends core::Object, T extends core::Object> extends self::B<self::D::T, core::int> {
+class D<S extends core::Object = dynamic, T extends core::Object = dynamic> extends self::B<self::D::T, core::int> {
   constructor •(self::D::T a) → void
     : super self::B::•(a, 3)
     ;
@@ -37,12 +37,12 @@
     ;
   abstract forwarding-stub set x(generic-covariant-impl core::int _) → void;
 }
-class E<S extends core::Object, T extends core::Object> extends self::A<self::C<self::E::S>, self::E::T> {
+class E<S extends core::Object = dynamic, T extends core::Object = dynamic> extends self::A<self::C<self::E::S>, self::E::T> {
   constructor •(self::E::T a) → void
     : super self::A::•(null, a)
     ;
 }
-class F<S extends core::Object, T extends core::Object> extends self::A<self::F::S, self::F::T> {
+class F<S extends core::Object = dynamic, T extends core::Object = dynamic> extends self::A<self::F::S, self::F::T> {
   constructor •(self::F::S x, self::F::T y, {core::List<self::F::S> a = null, core::List<self::F::T> b = null}) → void
     : super self::A::•(x, y)
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.transformed.expect
index 97104e0..1100687 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<S extends core::Object, T extends core::Object> extends core::Object {
+class A<S extends core::Object = dynamic, T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::A::S x;
   generic-covariant-impl generic-covariant-interface field self::A::T y;
   constructor •(self::A::S x, self::A::T y) → void
@@ -12,7 +12,7 @@
     : self::A::x = x, self::A::y = y, super core::Object::•()
     ;
 }
-class B<S extends core::Object, T extends core::Object> extends self::A<self::B::T, self::B::S> {
+class B<S extends core::Object = dynamic, T extends core::Object = dynamic> extends self::A<self::B::T, self::B::S> {
   constructor •(self::B::S y, self::B::T x) → void
     : super self::A::•(x, y)
     ;
@@ -20,7 +20,7 @@
     : super self::A::named(x, y)
     ;
 }
-class C<S extends core::Object> extends self::B<self::C::S, self::C::S> {
+class C<S extends core::Object = dynamic> extends self::B<self::C::S, self::C::S> {
   constructor •(self::C::S a) → void
     : super self::B::•(a, a)
     ;
@@ -28,7 +28,7 @@
     : super self::B::named(a, a)
     ;
 }
-class D<S extends core::Object, T extends core::Object> extends self::B<self::D::T, core::int> {
+class D<S extends core::Object = dynamic, T extends core::Object = dynamic> extends self::B<self::D::T, core::int> {
   constructor •(self::D::T a) → void
     : super self::B::•(a, 3)
     ;
@@ -37,12 +37,12 @@
     ;
   abstract forwarding-stub set x(generic-covariant-impl core::int _) → void;
 }
-class E<S extends core::Object, T extends core::Object> extends self::A<self::C<self::E::S>, self::E::T> {
+class E<S extends core::Object = dynamic, T extends core::Object = dynamic> extends self::A<self::C<self::E::S>, self::E::T> {
   constructor •(self::E::T a) → void
     : super self::A::•(null, a)
     ;
 }
-class F<S extends core::Object, T extends core::Object> extends self::A<self::F::S, self::F::T> {
+class F<S extends core::Object = dynamic, T extends core::Object = dynamic> extends self::A<self::F::S, self::F::T> {
   constructor •(self::F::S x, self::F::T y, {core::List<self::F::S> a = null, core::List<self::F::T> b = null}) → void
     : super self::A::•(x, y)
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.direct.expect
index 85ea052..c243444 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.direct.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Asserter<T extends core::Object> = (T) → void;
-typedef AsserterBuilder<S extends core::Object, T extends core::Object> = (S) → (T) → void;
+typedef Asserter<T extends core::Object = dynamic> = (T) → void;
+typedef AsserterBuilder<S extends core::Object = dynamic, T extends core::Object = dynamic> = (S) → (T) → void;
 class DartType extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
@@ -26,7 +26,7 @@
     assertEOf.call(<dynamic>[self::_isInt, self::_isString]);
   }
 }
-abstract class G<T extends core::Object> extends core::Object {
+abstract class G<T extends core::Object = dynamic> extends core::Object {
   field (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.direct.transformed.expect
index 85ea052..c243444 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.direct.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Asserter<T extends core::Object> = (T) → void;
-typedef AsserterBuilder<S extends core::Object, T extends core::Object> = (S) → (T) → void;
+typedef Asserter<T extends core::Object = dynamic> = (T) → void;
+typedef AsserterBuilder<S extends core::Object = dynamic, T extends core::Object = dynamic> = (S) → (T) → void;
 class DartType extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
@@ -26,7 +26,7 @@
     assertEOf.call(<dynamic>[self::_isInt, self::_isString]);
   }
 }
-abstract class G<T extends core::Object> extends core::Object {
+abstract class G<T extends core::Object = dynamic> extends core::Object {
   field (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.strong.expect
index 3339b4b..de41535 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.strong.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Asserter<T extends core::Object> = (T) → void;
-typedef AsserterBuilder<S extends core::Object, T extends core::Object> = (S) → (T) → void;
+typedef Asserter<T extends core::Object = dynamic> = (T) → void;
+typedef AsserterBuilder<S extends core::Object = dynamic, T extends core::Object = dynamic> = (S) → (T) → void;
 class DartType extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
@@ -26,7 +26,7 @@
     assertEOf.call(<(self::DartType) → void>[self::_isInt, self::_isString]);
   }
 }
-abstract class G<T extends core::Object> extends core::Object {
+abstract class G<T extends core::Object = dynamic> extends core::Object {
   field (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.strong.transformed.expect
index 3339b4b..de41535 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Asserter<T extends core::Object> = (T) → void;
-typedef AsserterBuilder<S extends core::Object, T extends core::Object> = (S) → (T) → void;
+typedef Asserter<T extends core::Object = dynamic> = (T) → void;
+typedef AsserterBuilder<S extends core::Object = dynamic, T extends core::Object = dynamic> = (S) → (T) → void;
 class DartType extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
@@ -26,7 +26,7 @@
     assertEOf.call(<(self::DartType) → void>[self::_isInt, self::_isString]);
   }
 }
-abstract class G<T extends core::Object> extends core::Object {
+abstract class G<T extends core::Object = dynamic> extends core::Object {
   field (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.direct.expect
index 2a6a8d9..bbe604f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.direct.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-abstract class MyStream<T extends core::Object> extends asy::Stream<self::MyStream::T> {
-  static factory •<T extends core::Object>() → self::MyStream<self::MyStream::•::T>
+abstract class MyStream<T extends core::Object = dynamic> extends asy::Stream<self::MyStream::T> {
+  static factory •<T extends core::Object = dynamic>() → self::MyStream<self::MyStream::•::T>
     return null;
 }
 static method foo() → asy::Stream<core::List<core::int>> async* {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.direct.transformed.expect
index 55bf544..14c0f7c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.direct.transformed.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-abstract class MyStream<T extends core::Object> extends asy::Stream<self::MyStream::T> {
-  static factory •<T extends core::Object>() → self::MyStream<self::MyStream::•::T>
+abstract class MyStream<T extends core::Object = dynamic> extends asy::Stream<self::MyStream::T> {
+  static factory •<T extends core::Object = dynamic>() → self::MyStream<self::MyStream::•::T>
     return null;
 }
 static method foo() → asy::Stream<core::List<core::int>> /* originally async* */ {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
index 67bbde6..fcaf358 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-abstract class MyStream<T extends core::Object> extends asy::Stream<self::MyStream::T> {
-  static factory •<T extends core::Object>() → self::MyStream<self::MyStream::•::T>
+abstract class MyStream<T extends core::Object = dynamic> extends asy::Stream<self::MyStream::T> {
+  static factory •<T extends core::Object = dynamic>() → self::MyStream<self::MyStream::•::T>
     return null;
 }
 static method foo() → asy::Stream<core::List<core::int>> async* {
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.direct.expect b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.direct.expect
index a9ca0dd..01196f3 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.direct.expect
@@ -8,6 +8,6 @@
     : self::C::x = self::f<dynamic>(), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.direct.transformed.expect
index a9ca0dd..01196f3 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.direct.transformed.expect
@@ -8,6 +8,6 @@
     : self::C::x = self::f<dynamic>(), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.outline.expect b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.outline.expect
index c3d8126..1a319e3 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.outline.expect
@@ -7,7 +7,7 @@
   constructor •() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.strong.expect b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.strong.expect
index 8924797..ebfd78a 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.strong.expect
@@ -8,6 +8,6 @@
     : self::C::x = self::f<core::int>(), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.strong.transformed.expect
index 8924797..ebfd78a 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.strong.transformed.expect
@@ -8,6 +8,6 @@
     : self::C::x = self::f<core::int>(), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.direct.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.direct.expect
index d495b26..9057cb2 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.direct.expect
@@ -14,6 +14,6 @@
     ;
   abstract get x() → core::int;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.direct.transformed.expect
index d495b26..9057cb2 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.direct.transformed.expect
@@ -14,6 +14,6 @@
     ;
   abstract get x() → core::int;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.outline.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.outline.expect
index e0ab312..a7c7685 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.outline.expect
@@ -12,7 +12,7 @@
     ;
   abstract get x() → core::int;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.strong.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.strong.expect
index ef576d9..e060b43 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.strong.expect
@@ -14,6 +14,6 @@
     ;
   abstract get x() → core::int;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.strong.transformed.expect
index ef576d9..e060b43 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.strong.transformed.expect
@@ -14,6 +14,6 @@
     ;
   abstract get x() → core::int;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.direct.expect b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.direct.expect
index a9ca0dd..01196f3 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.direct.expect
@@ -8,6 +8,6 @@
     : self::C::x = self::f<dynamic>(), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.direct.transformed.expect
index a9ca0dd..01196f3 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.direct.transformed.expect
@@ -8,6 +8,6 @@
     : self::C::x = self::f<dynamic>(), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.outline.expect b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.outline.expect
index c3d8126..1a319e3 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.outline.expect
@@ -7,7 +7,7 @@
   constructor •() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.strong.expect b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.strong.expect
index 8924797..ebfd78a 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.strong.expect
@@ -8,6 +8,6 @@
     : self::C::x = self::f<core::int>(), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.strong.transformed.expect
index 8924797..ebfd78a 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.strong.transformed.expect
@@ -8,6 +8,6 @@
     : self::C::x = self::f<core::int>(), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.direct.expect b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.direct.expect
index dfabd77..f3969cb 100644
--- a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.direct.expect
@@ -8,6 +8,6 @@
     : self::C::x = self::f<dynamic>(p), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>(self::f::T t) → self::f::T
+static method f<T extends core::Object = dynamic>(self::f::T t) → self::f::T
   return t;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.direct.transformed.expect
index dfabd77..f3969cb 100644
--- a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.direct.transformed.expect
@@ -8,6 +8,6 @@
     : self::C::x = self::f<dynamic>(p), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>(self::f::T t) → self::f::T
+static method f<T extends core::Object = dynamic>(self::f::T t) → self::f::T
   return t;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.outline.expect b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.outline.expect
index 8512f84..a19f31b 100644
--- a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.outline.expect
@@ -7,7 +7,7 @@
   constructor •(core::int p) → void
     ;
 }
-static method f<T extends core::Object>(self::f::T t) → self::f::T
+static method f<T extends core::Object = dynamic>(self::f::T t) → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.strong.expect b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.strong.expect
index ba6f581f..e0950da 100644
--- a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.strong.expect
@@ -8,6 +8,6 @@
     : self::C::x = self::f<core::int>(p), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>(self::f::T t) → self::f::T
+static method f<T extends core::Object = dynamic>(self::f::T t) → self::f::T
   return t;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.strong.transformed.expect
index ba6f581f..e0950da 100644
--- a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.strong.transformed.expect
@@ -8,6 +8,6 @@
     : self::C::x = self::f<core::int>(p), super core::Object::•()
     ;
 }
-static method f<T extends core::Object>(self::f::T t) → self::f::T
+static method f<T extends core::Object = dynamic>(self::f::T t) → self::f::T
   return t;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then.dart.direct.expect b/pkg/front_end/testcases/inference/future_then.dart.direct.expect
index d9c0e0e..238fc77 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_then.dart.direct.transformed.expect
index 80a20d3..d3553bd 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then.dart.outline.expect b/pkg/front_end/testcases/inference/future_then.dart.outline.expect
index bf89d40..0e4e4b9 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value(self::MyFuture::T x) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then.dart.strong.expect b/pkg/front_end/testcases/inference/future_then.dart.strong.expect
index b7c6c22..59ff30a 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then.dart.strong.transformed.expect
index 5caa1e0..5f0f486 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.direct.expect b/pkg/front_end/testcases/inference/future_then_2.dart.direct.expect
index 3290595..d6b1ae2 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_then_2.dart.direct.transformed.expect
index 93b4078..433be3a 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_2.dart.outline.expect
index bf89d40..0e4e4b9 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value(self::MyFuture::T x) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_2.dart.strong.expect
index 264f452..c4514a8 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_2.dart.strong.transformed.expect
index 8989332..4d6c659 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.direct.expect b/pkg/front_end/testcases/inference/future_then_3.dart.direct.expect
index fc2ec41..28f970f 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_then_3.dart.direct.transformed.expect
index a94ad9c..05ea1f5 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_3.dart.outline.expect
index bf89d40..0e4e4b9 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value(self::MyFuture::T x) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_3.dart.strong.expect
index 496a434..41dd64d 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_3.dart.strong.transformed.expect
index 78a4a61..90396a6 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.direct.expect b/pkg/front_end/testcases/inference/future_then_4.dart.direct.expect
index 627469a9..9d89e58 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_then_4.dart.direct.transformed.expect
index ee00df9..ed1cac1 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_4.dart.outline.expect
index bf89d40..0e4e4b9 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value(self::MyFuture::T x) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_4.dart.strong.expect
index 0e9ab26..fb3eb9f 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_4.dart.strong.transformed.expect
index 03446f5..ff00d40 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.direct.expect b/pkg/front_end/testcases/inference/future_then_5.dart.direct.expect
index cf8341b..d8ab165 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_then_5.dart.direct.transformed.expect
index 2c79488..62658a3 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_5.dart.outline.expect
index bf89d40..0e4e4b9 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value(self::MyFuture::T x) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_5.dart.strong.expect
index 60a45b2..369cd48 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_5.dart.strong.transformed.expect
index 495a584..3aba981 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.direct.expect b/pkg/front_end/testcases/inference/future_then_6.dart.direct.expect
index 59eca7d..be6b273 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_then_6.dart.direct.transformed.expect
index 470f6c1..434b5d6 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_6.dart.outline.expect
index bf89d40..0e4e4b9 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value(self::MyFuture::T x) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_6.dart.strong.expect
index 03a4550..51d8ee3 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_6.dart.strong.transformed.expect
index 01b2db8..2e7cc96 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.direct.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.direct.expect
index 6352e0d..60890bc 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.direct.transformed.expect
index 8b8e2a7..f2f15cd 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.outline.expect
index bf89d40..0e4e4b9 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value(self::MyFuture::T x) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.expect
index 08ec64a..1d68a0b 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.transformed.expect
index ff77eeb..a1d8145 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.direct.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.direct.expect
index 4884c6c..ffc7080 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.direct.transformed.expect
index 77323ea..2fa2c058 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.outline.expect
index bf89d40..0e4e4b9 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value(self::MyFuture::T x) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.expect
index 13b1486..0d784ca 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.transformed.expect
index f272bfc..10610b3 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.direct.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.direct.expect
index 477583e..215e634 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.direct.transformed.expect
index 4fc92fe..ef2e0fb 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.outline.expect
index bf89d40..0e4e4b9 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value(self::MyFuture::T x) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.expect
index af297a2..d153459 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.transformed.expect
index f2c3a2a..b2e6ed0 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.direct.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.direct.expect
index 73ac5c0..801d3e8 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.direct.transformed.expect
index dc2f85e..5ceaae0 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.outline.expect
index bf89d40..0e4e4b9 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value(self::MyFuture::T x) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.expect
index b3e8ccc..a6160a6 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.transformed.expect
index 6c4ab09..1262645 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.direct.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.direct.expect
index 32dbcf8..94ca72c 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.direct.transformed.expect
index d7bf2f2..a20328a 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.outline.expect
index bf89d40..0e4e4b9 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value(self::MyFuture::T x) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.expect
index 8425b11..0fe0dcd 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.transformed.expect
index f1cb720..de8bd3e 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.direct.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.direct.expect
index 2fb57b2..57291da 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.direct.transformed.expect
index 93c7048..77de0e0 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.outline.expect
index bf89d40..0e4e4b9 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value(self::MyFuture::T x) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.expect
index 47e72b3..55f02eb 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.transformed.expect
index 48d5198..1dd34b9 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.direct.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.direct.expect
index 3f7d35c..2665c52 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.direct.transformed.expect
index f0608c1..cb0d0d1 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.outline.expect
index bf89d40..0e4e4b9 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value(self::MyFuture::T x) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.expect
index 0b16167..5bef4dd 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.transformed.expect
index 186d1fe..a07f3c4 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.direct.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.direct.expect
index ad86cf9..4f7b85b 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.direct.transformed.expect
index ad86cf9..4f7b85b 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.outline.expect
index dd8d84a..b0ad581 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value(self::MyFuture::T x) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
index e70813f..b8334ef 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect
index 5f33f15..ae2f1fe 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.direct.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.direct.expect
index a47a67c..8e506d2 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.direct.transformed.expect
index a47a67c..8e506d2 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.outline.expect
index dd8d84a..b0ad581 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value(self::MyFuture::T x) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
index 7a3e3e5..3557d61 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect
index c45f7a3..13d7235 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.direct.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.direct.expect
index e107ab2..78825bf 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.direct.transformed.expect
index e107ab2..78825bf 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.outline.expect
index f9939e0..f7f3336 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value(self::MyFuture::T x) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
index d0de61c..ef64c92 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect
index 7784c77..163b552 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(self::MyFuture::T x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.direct.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.direct.expect
index 2f01968..cf63b53 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(dynamic x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.direct.transformed.expect
index 5fc5f19..b058d42 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(dynamic x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.outline.expect
index 353c1be..cb95b45 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value(dynamic x) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.expect
index 722f2d6..fc102e4 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(dynamic x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.transformed.expect
index 260e803..6385881 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(dynamic x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.direct.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.direct.expect
index e4c0c12..d08eb4f 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(dynamic x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.direct.transformed.expect
index 3010ada..fa93ea9 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(dynamic x) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.outline.expect
index 353c1be..cb95b45 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value(dynamic x) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.expect
index c539bcd..b2ae474 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(dynamic x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.transformed.expect
index ee81fa3..ad3c572 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value(dynamic x) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.direct.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.direct.expect
index 2bdcc03..31c6b7a 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.direct.transformed.expect
index 5db5ef3..167fe79 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.outline.expect
index 203722c..2bad4e8 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value([dynamic x]) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
index c6c4632..07071bc 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect
index e8e745e..2086318 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.direct.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.direct.expect
index c76f12a..e8e6411 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.direct.transformed.expect
index 87b4be0eb..24fedaa 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.outline.expect
index 203722c..2bad4e8 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value([dynamic x]) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.expect
index 5c9ecaf..83706a9 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.transformed.expect
index 7eae3ec..6134e15 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.direct.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.direct.expect
index 7e03996..9027e83 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.direct.transformed.expect
index 665f3ee..aacc250 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.outline.expect
index 64f58e3..4e0c84c 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value([dynamic x]) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
index a78fef7..ed51407 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect
index ff49091..4dbee3a 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.direct.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.direct.expect
index a80ae91..4873748 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.direct.transformed.expect
index b952431..87239a3 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.direct.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → void
     : super core::Object::•() {}
   method noSuchMethod(dynamic invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.outline.expect
index 64f58e3..4e0c84c 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     ;
   constructor value([dynamic x]) → void
     ;
   method noSuchMethod(dynamic invocation) → dynamic
     ;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError}) → self::MyFuture<self::MyFuture::then::S>
     ;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.expect
index d62bc1b..65901ec 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.transformed.expect
index f3bd417..af8f590 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.transformed.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
+class MyFuture<T extends core::Object = dynamic> extends core::Object implements asy::Future<self::MyFuture::T> {
   constructor •() → void
     : super core::Object::•() {}
   constructor value([dynamic x = null]) → void
     : super core::Object::•() {}
   method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
+  method then<S extends core::Object = dynamic>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
     return null;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) → core::bool test = null}) → asy::Future<self::MyFuture::T>;
   abstract no-such-method-forwarder method /* from org-dartlang-testcase-sdk:///sdk/lib/async/future.dart */ whenComplete(() → asy::FutureOr<dynamic> action) → asy::Future<self::MyFuture::T>;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.direct.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.direct.expect
index 99a343c..cee5b68 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method id<T extends core::Object>(self::id::T x) → self::id::T
+static method id<T extends core::Object = dynamic>(self::id::T x) → self::id::T
   return x;
 static method test() → dynamic async {
   asy::Future<core::String> f;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.direct.transformed.expect
index 826a96d..91cb8b0 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.direct.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method id<T extends core::Object>(self::id::T x) → self::id::T
+static method id<T extends core::Object = dynamic>(self::id::T x) → self::id::T
   return x;
 static method test() → dynamic /* originally async */ {
   final asy::Completer<dynamic> :completer = asy::Completer::sync<dynamic>();
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.outline.expect
index a323d38..92d9692 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method id<T extends core::Object>(self::id::T x) → self::id::T
+static method id<T extends core::Object = dynamic>(self::id::T x) → self::id::T
   ;
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.strong.expect
index 2417d16..39e445a 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method id<T extends core::Object>(self::id::T x) → self::id::T
+static method id<T extends core::Object = dynamic>(self::id::T x) → self::id::T
   return x;
 static method test() → dynamic async {
   asy::Future<core::String> f;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.strong.transformed.expect
index 0a3ce6b..92c8c6b 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method id<T extends core::Object>(self::id::T x) → self::id::T
+static method id<T extends core::Object = dynamic>(self::id::T x) → self::id::T
   return x;
 static method test() → dynamic /* originally async */ {
   final asy::Completer<dynamic> :completer = asy::Completer::sync<dynamic>();
diff --git a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.direct.expect b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.direct.expect
index e583060..53ab933f 100644
--- a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.direct.expect
@@ -2,9 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-typedef ToValue<T extends core::Object> = (T) → void;
+typedef ToValue<T extends core::Object = dynamic> = (T) → void;
 static method main() → dynamic {
-  function f<T extends core::Object>(T x) → (T) → void
+  function f<T extends core::Object = dynamic>(T x) → (T) → void
     return null;
   dynamic x = f.call<core::int>(42);
   dynamic y = f.call(42);
diff --git a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.direct.transformed.expect
index e583060..53ab933f 100644
--- a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.direct.transformed.expect
@@ -2,9 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-typedef ToValue<T extends core::Object> = (T) → void;
+typedef ToValue<T extends core::Object = dynamic> = (T) → void;
 static method main() → dynamic {
-  function f<T extends core::Object>(T x) → (T) → void
+  function f<T extends core::Object = dynamic>(T x) → (T) → void
     return null;
   dynamic x = f.call<core::int>(42);
   dynamic y = f.call(42);
diff --git a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.direct.expect
index a770f08..fe1c799 100644
--- a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<S extends core::Object, T extends core::Object>(self::f::S s) → self::f::T
+static method f<S extends core::Object = dynamic, T extends core::Object = dynamic>(self::f::S s) → self::f::T
   return null;
 static method main() → dynamic {
   core::String x = self::f<dynamic, dynamic>(42);
diff --git a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.direct.transformed.expect
index a770f08..fe1c799 100644
--- a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<S extends core::Object, T extends core::Object>(self::f::S s) → self::f::T
+static method f<S extends core::Object = dynamic, T extends core::Object = dynamic>(self::f::S s) → self::f::T
   return null;
 static method main() → dynamic {
   core::String x = self::f<dynamic, dynamic>(42);
diff --git a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.strong.expect
index e9fb8da..b410886 100644
--- a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<S extends core::Object, T extends core::Object>(self::f::S s) → self::f::T
+static method f<S extends core::Object = dynamic, T extends core::Object = dynamic>(self::f::S s) → self::f::T
   return null;
 static method main() → dynamic {
   core::String x = self::f<core::int, core::String>(42);
diff --git a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.strong.transformed.expect
index e9fb8da..b410886 100644
--- a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<S extends core::Object, T extends core::Object>(self::f::S s) → self::f::T
+static method f<S extends core::Object = dynamic, T extends core::Object = dynamic>(self::f::S s) → self::f::T
   return null;
 static method main() → dynamic {
   core::String x = self::f<core::int, core::String>(42);
diff --git a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.direct.expect
index 4b4f413..17b048c 100644
--- a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.direct.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends core::Pattern> extends core::Object {
+class Foo<T extends core::Pattern = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method method<U extends self::Foo::T>(self::Foo::method::U u) → self::Foo::method::U
+  method method<U extends self::Foo::T = dynamic>(self::Foo::method::U u) → self::Foo::method::U
     return u;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.direct.transformed.expect
index 4b4f413..17b048c 100644
--- a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.direct.transformed.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends core::Pattern> extends core::Object {
+class Foo<T extends core::Pattern = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method method<U extends self::Foo::T>(self::Foo::method::U u) → self::Foo::method::U
+  method method<U extends self::Foo::T = dynamic>(self::Foo::method::U u) → self::Foo::method::U
     return u;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.strong.expect
index 920bdcc..f365fb5 100644
--- a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.strong.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends core::Pattern> extends core::Object {
+class Foo<T extends core::Pattern = core::Pattern> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method method<generic-covariant-impl generic-covariant-interface U extends self::Foo::T>(self::Foo::method::U u) → self::Foo::method::U
+  method method<generic-covariant-impl generic-covariant-interface U extends self::Foo::T = dynamic>(self::Foo::method::U u) → self::Foo::method::U
     return u;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.direct.expect
index 7e92972..4370627 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.direct.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(self::C::m::T x) → self::C::m::T
+  method m<T extends core::Object = dynamic>(self::C::m::T x) → self::C::m::T
     return x;
 }
 class D extends self::C {
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.direct.transformed.expect
index 7e92972..4370627 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.direct.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(self::C::m::T x) → self::C::m::T
+  method m<T extends core::Object = dynamic>(self::C::m::T x) → self::C::m::T
     return x;
 }
 class D extends self::C {
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
index 8514bf6..1d84eb1 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(self::C::m::T x) → self::C::m::T
+  method m<T extends core::Object = dynamic>(self::C::m::T x) → self::C::m::T
     return x;
 }
 class D extends self::C {
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.direct.expect
index e070910..5ab9647 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>(core::List<self::f::T> s) → self::f::T
+static method f<T extends core::Object = dynamic>(core::List<self::f::T> s) → self::f::T
   return null;
 static method test() → dynamic {
   core::String x = self::f<dynamic>(<dynamic>["hi"]);
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.direct.transformed.expect
index e070910..5ab9647 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>(core::List<self::f::T> s) → self::f::T
+static method f<T extends core::Object = dynamic>(core::List<self::f::T> s) → self::f::T
   return null;
 static method test() → dynamic {
   core::String x = self::f<dynamic>(<dynamic>["hi"]);
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
index 5ac5390..a980b89 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>(core::List<self::f::T> s) → self::f::T
+static method f<T extends core::Object = dynamic>(core::List<self::f::T> s) → self::f::T
   return null;
 static method test() → dynamic {
   core::String x = self::f<core::String>(<core::String>["hi"]);
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.transformed.expect
index 4722ed3..4a81079 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>(core::List<self::f::T> s) → self::f::T
+static method f<T extends core::Object = dynamic>(core::List<self::f::T> s) → self::f::T
   return null;
 static method test() → dynamic {
   core::String x = self::f<core::String>(<core::String>["hi"]);
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.direct.expect
index af643ea..f688995 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.direct.expect
@@ -15,9 +15,9 @@
   synthetic constructor •() → void
     : super self::C::•()
     ;
-  method m<T extends core::Object>(self::D::m::T x) → self::D::m::T
+  method m<T extends core::Object = dynamic>(self::D::m::T x) → self::D::m::T
     return x;
-  method g<T extends core::Object>(self::D::g::T x) → self::D::g::T
+  method g<T extends core::Object = dynamic>(self::D::g::T x) → self::D::g::T
     return x;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.direct.transformed.expect
index af643ea..f688995 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.direct.transformed.expect
@@ -15,9 +15,9 @@
   synthetic constructor •() → void
     : super self::C::•()
     ;
-  method m<T extends core::Object>(self::D::m::T x) → self::D::m::T
+  method m<T extends core::Object = dynamic>(self::D::m::T x) → self::D::m::T
     return x;
-  method g<T extends core::Object>(self::D::g::T x) → self::D::g::T
+  method g<T extends core::Object = dynamic>(self::D::g::T x) → self::D::g::T
     return x;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
index db0f902..7e4bcfc6 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
@@ -15,9 +15,9 @@
   synthetic constructor •() → void
     : super self::C::•()
     ;
-  method m<T extends core::Object>(self::D::m::T x) → self::D::m::T
+  method m<T extends core::Object = dynamic>(self::D::m::T x) → self::D::m::T
     return x;
-  method g<T extends core::Object>(self::D::g::T x) → self::D::g::T
+  method g<T extends core::Object = dynamic>(self::D::g::T x) → self::D::g::T
     return x;
 }
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:14:46: Error: Declared type variables of 'D::m' doesn't match those on overridden method 'C::m'.
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.direct.expect
index 99e84b5..0f57adc 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.direct.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<V extends core::Object> = (V) → void;
-class C<T extends core::Object> extends self::D<self::C::T> {
+typedef F<V extends core::Object = dynamic> = (V) → void;
+class C<T extends core::Object = dynamic> extends self::D<self::C::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
-  method f<U extends core::Object>(dynamic x) → dynamic {}
+  method f<U extends core::Object = dynamic>(dynamic x) → dynamic {}
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends core::Object>(self::D::f::U u) → (self::D::f::U) → void
+  method f<U extends core::Object = dynamic>(self::D::f::U u) → (self::D::f::U) → void
     return null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.direct.transformed.expect
index 99e84b5..0f57adc 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.direct.transformed.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<V extends core::Object> = (V) → void;
-class C<T extends core::Object> extends self::D<self::C::T> {
+typedef F<V extends core::Object = dynamic> = (V) → void;
+class C<T extends core::Object = dynamic> extends self::D<self::C::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
-  method f<U extends core::Object>(dynamic x) → dynamic {}
+  method f<U extends core::Object = dynamic>(dynamic x) → dynamic {}
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends core::Object>(self::D::f::U u) → (self::D::f::U) → void
+  method f<U extends core::Object = dynamic>(self::D::f::U u) → (self::D::f::U) → void
     return null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.strong.expect
index b141cc6..9e57aaf 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.strong.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<V extends core::Object> = (V) → void;
-class C<T extends core::Object> extends self::D<self::C::T> {
+typedef F<V extends core::Object = dynamic> = (V) → void;
+class C<T extends core::Object = dynamic> extends self::D<self::C::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
-  method f<U extends core::Object>(self::C::f::U x) → (self::C::f::U) → void {}
+  method f<U extends core::Object = dynamic>(self::C::f::U x) → (self::C::f::U) → void {}
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends core::Object>(self::D::f::U u) → (self::D::f::U) → void
+  method f<U extends core::Object = dynamic>(self::D::f::U u) → (self::D::f::U) → void
     return null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.strong.transformed.expect
index b141cc6..9e57aaf 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.strong.transformed.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<V extends core::Object> = (V) → void;
-class C<T extends core::Object> extends self::D<self::C::T> {
+typedef F<V extends core::Object = dynamic> = (V) → void;
+class C<T extends core::Object = dynamic> extends self::D<self::C::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
-  method f<U extends core::Object>(self::C::f::U x) → (self::C::f::U) → void {}
+  method f<U extends core::Object = dynamic>(self::C::f::U x) → (self::C::f::U) → void {}
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends core::Object>(self::D::f::U u) → (self::D::f::U) → void
+  method f<U extends core::Object = dynamic>(self::D::f::U u) → (self::D::f::U) → void
     return null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.direct.expect
index 551a22b..17d6815 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.direct.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-typedef G<V extends core::Object> = () → core::List<V>;
-class C<T extends core::Object> extends self::D<self::C::T> {
+typedef G<V extends core::Object = dynamic> = () → core::List<V>;
+class C<T extends core::Object = dynamic> extends self::D<self::C::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
-  method f<U extends core::Object>(dynamic g) → dynamic
+  method f<U extends core::Object = dynamic>(dynamic g) → dynamic
     return null;
 }
-abstract class D<T extends core::Object> extends core::Object {
+abstract class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  abstract method f<U extends core::Object>(() → core::List<self::D::f::U> g) → void;
+  abstract method f<U extends core::Object = dynamic>(() → core::List<self::D::f::U> g) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.direct.transformed.expect
index 551a22b..17d6815 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.direct.transformed.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-typedef G<V extends core::Object> = () → core::List<V>;
-class C<T extends core::Object> extends self::D<self::C::T> {
+typedef G<V extends core::Object = dynamic> = () → core::List<V>;
+class C<T extends core::Object = dynamic> extends self::D<self::C::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
-  method f<U extends core::Object>(dynamic g) → dynamic
+  method f<U extends core::Object = dynamic>(dynamic g) → dynamic
     return null;
 }
-abstract class D<T extends core::Object> extends core::Object {
+abstract class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  abstract method f<U extends core::Object>(() → core::List<self::D::f::U> g) → void;
+  abstract method f<U extends core::Object = dynamic>(() → core::List<self::D::f::U> g) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.strong.expect
index 4e1632a..d201593 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.strong.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-typedef G<V extends core::Object> = () → core::List<V>;
-class C<T extends core::Object> extends self::D<self::C::T> {
+typedef G<V extends core::Object = dynamic> = () → core::List<V>;
+class C<T extends core::Object = dynamic> extends self::D<self::C::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
-  method f<U extends core::Object>(() → core::List<self::C::f::U> g) → void
+  method f<U extends core::Object = dynamic>(() → core::List<self::C::f::U> g) → void
     return null;
 }
-abstract class D<T extends core::Object> extends core::Object {
+abstract class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  abstract method f<U extends core::Object>(() → core::List<self::D::f::U> g) → void;
+  abstract method f<U extends core::Object = dynamic>(() → core::List<self::D::f::U> g) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.strong.transformed.expect
index 4e1632a..d201593 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.strong.transformed.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-typedef G<V extends core::Object> = () → core::List<V>;
-class C<T extends core::Object> extends self::D<self::C::T> {
+typedef G<V extends core::Object = dynamic> = () → core::List<V>;
+class C<T extends core::Object = dynamic> extends self::D<self::C::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
-  method f<U extends core::Object>(() → core::List<self::C::f::U> g) → void
+  method f<U extends core::Object = dynamic>(() → core::List<self::C::f::U> g) → void
     return null;
 }
-abstract class D<T extends core::Object> extends core::Object {
+abstract class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  abstract method f<U extends core::Object>(() → core::List<self::D::f::U> g) → void;
+  abstract method f<U extends core::Object = dynamic>(() → core::List<self::D::f::U> g) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.direct.expect
index 4465b65..4b020dd 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.direct.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<V extends core::Object> = () → V;
-class C<T extends core::Object> extends self::D<self::C::T> {
+typedef F<V extends core::Object = dynamic> = () → V;
+class C<T extends core::Object = dynamic> extends self::D<self::C::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
-  method f<U extends core::Object>(dynamic x) → dynamic {}
+  method f<U extends core::Object = dynamic>(dynamic x) → dynamic {}
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends core::Object>(self::D::f::U u) → () → self::D::f::U
+  method f<U extends core::Object = dynamic>(self::D::f::U u) → () → self::D::f::U
     return null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.direct.transformed.expect
index 4465b65..4b020dd 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.direct.transformed.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<V extends core::Object> = () → V;
-class C<T extends core::Object> extends self::D<self::C::T> {
+typedef F<V extends core::Object = dynamic> = () → V;
+class C<T extends core::Object = dynamic> extends self::D<self::C::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
-  method f<U extends core::Object>(dynamic x) → dynamic {}
+  method f<U extends core::Object = dynamic>(dynamic x) → dynamic {}
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends core::Object>(self::D::f::U u) → () → self::D::f::U
+  method f<U extends core::Object = dynamic>(self::D::f::U u) → () → self::D::f::U
     return null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.strong.expect
index eb9055b..53feefd 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.strong.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<V extends core::Object> = () → V;
-class C<T extends core::Object> extends self::D<self::C::T> {
+typedef F<V extends core::Object = dynamic> = () → V;
+class C<T extends core::Object = dynamic> extends self::D<self::C::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
-  method f<U extends core::Object>(self::C::f::U x) → () → self::C::f::U {}
+  method f<U extends core::Object = dynamic>(self::C::f::U x) → () → self::C::f::U {}
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends core::Object>(self::D::f::U u) → () → self::D::f::U
+  method f<U extends core::Object = dynamic>(self::D::f::U u) → () → self::D::f::U
     return null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.strong.transformed.expect
index eb9055b..53feefd 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.strong.transformed.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<V extends core::Object> = () → V;
-class C<T extends core::Object> extends self::D<self::C::T> {
+typedef F<V extends core::Object = dynamic> = () → V;
+class C<T extends core::Object = dynamic> extends self::D<self::C::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
-  method f<U extends core::Object>(self::C::f::U x) → () → self::C::f::U {}
+  method f<U extends core::Object = dynamic>(self::C::f::U x) → () → self::C::f::U {}
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends core::Object>(self::D::f::U u) → () → self::D::f::U
+  method f<U extends core::Object = dynamic>(self::D::f::U u) → () → self::D::f::U
     return null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.direct.expect
index 3a68a44..5f8ac38 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.direct.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::num>(self::C::m::T x, self::C::m::T y) → self::C::m::T
+  method m<T extends core::num = dynamic>(self::C::m::T x, self::C::m::T y) → self::C::m::T
     return null;
 }
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.direct.transformed.expect
index 3a68a44..5f8ac38 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.direct.transformed.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::num>(self::C::m::T x, self::C::m::T y) → self::C::m::T
+  method m<T extends core::num = dynamic>(self::C::m::T x, self::C::m::T y) → self::C::m::T
     return null;
 }
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
index 7774f17..7572fdd 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::num>(self::C::m::T x, self::C::m::T y) → self::C::m::T
+  method m<T extends core::num = dynamic>(self::C::m::T x, self::C::m::T y) → self::C::m::T
     return null;
 }
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.transformed.expect
index a11c923..a687df6 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::num>(self::C::m::T x, self::C::m::T y) → self::C::m::T
+  method m<T extends core::num = dynamic>(self::C::m::T x, self::C::m::T y) → self::C::m::T
     return null;
 }
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.direct.expect
index 41749ee..65e0f43 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.direct.expect
@@ -6,14 +6,14 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(self::C::m::T x) → self::C::m::T
+  method m<T extends core::Object = dynamic>(self::C::m::T x) → self::C::m::T
     return x;
 }
 class D extends self::C {
   synthetic constructor •() → void
     : super self::C::•()
     ;
-  method m<S extends core::Object>(dynamic x) → dynamic
+  method m<S extends core::Object = dynamic>(dynamic x) → dynamic
     return x;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.direct.transformed.expect
index 41749ee..65e0f43 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.direct.transformed.expect
@@ -6,14 +6,14 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(self::C::m::T x) → self::C::m::T
+  method m<T extends core::Object = dynamic>(self::C::m::T x) → self::C::m::T
     return x;
 }
 class D extends self::C {
   synthetic constructor •() → void
     : super self::C::•()
     ;
-  method m<S extends core::Object>(dynamic x) → dynamic
+  method m<S extends core::Object = dynamic>(dynamic x) → dynamic
     return x;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.strong.expect
index 671ce41..b58c879 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.strong.expect
@@ -6,14 +6,14 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(self::C::m::T x) → self::C::m::T
+  method m<T extends core::Object = dynamic>(self::C::m::T x) → self::C::m::T
     return x;
 }
 class D extends self::C {
   synthetic constructor •() → void
     : super self::C::•()
     ;
-  method m<S extends core::Object>(self::D::m::S x) → self::D::m::S
+  method m<S extends core::Object = dynamic>(self::D::m::S x) → self::D::m::S
     return x;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.strong.transformed.expect
index 671ce41..b58c879 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.strong.transformed.expect
@@ -6,14 +6,14 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(self::C::m::T x) → self::C::m::T
+  method m<T extends core::Object = dynamic>(self::C::m::T x) → self::C::m::T
     return x;
 }
 class D extends self::C {
   synthetic constructor •() → void
     : super self::C::•()
     ;
-  method m<S extends core::Object>(self::D::m::S x) → self::D::m::S
+  method m<S extends core::Object = dynamic>(self::D::m::S x) → self::D::m::S
     return x;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.direct.expect
index 1c4540d..cdb7f17 100644
--- a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.direct.expect
@@ -4,7 +4,7 @@
 
 typedef F = (core::int) → core::Iterable<core::num>;
 typedef G = (core::double) → core::List<core::int>;
-static method generic<T extends core::Object>((self::generic::T) → dynamic a, (self::generic::T) → dynamic b) → self::generic::T
+static method generic<T extends core::Object = dynamic>((self::generic::T) → dynamic a, (self::generic::T) → dynamic b) → self::generic::T
   return null;
 static method main() → dynamic {
   dynamic v = self::generic<dynamic>(((core::int) → core::Iterable<core::num> f) → dynamic => null, ((core::double) → core::List<core::int> g) → dynamic => null);
diff --git a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.direct.transformed.expect
index 1c4540d..cdb7f17 100644
--- a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.direct.transformed.expect
@@ -4,7 +4,7 @@
 
 typedef F = (core::int) → core::Iterable<core::num>;
 typedef G = (core::double) → core::List<core::int>;
-static method generic<T extends core::Object>((self::generic::T) → dynamic a, (self::generic::T) → dynamic b) → self::generic::T
+static method generic<T extends core::Object = dynamic>((self::generic::T) → dynamic a, (self::generic::T) → dynamic b) → self::generic::T
   return null;
 static method main() → dynamic {
   dynamic v = self::generic<dynamic>(((core::int) → core::Iterable<core::num> f) → dynamic => null, ((core::double) → core::List<core::int> g) → dynamic => null);
diff --git a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.strong.expect
index 0aafd64..cd5eddc 100644
--- a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef F = (core::int) → core::Iterable<core::num>;
 typedef G = (core::double) → core::List<core::int>;
-static method generic<T extends core::Object>((self::generic::T) → dynamic a, (self::generic::T) → dynamic b) → self::generic::T
+static method generic<T extends core::Object = dynamic>((self::generic::T) → dynamic a, (self::generic::T) → dynamic b) → self::generic::T
   return null;
 static method main() → dynamic {
   (core::num) → core::List<core::int> v = self::generic<(core::num) → core::List<core::int>>(((core::int) → core::Iterable<core::num> f) → core::Null => null, ((core::double) → core::List<core::int> g) → core::Null => null);
diff --git a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.strong.transformed.expect
index 0aafd64..cd5eddc 100644
--- a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 typedef F = (core::int) → core::Iterable<core::num>;
 typedef G = (core::double) → core::List<core::int>;
-static method generic<T extends core::Object>((self::generic::T) → dynamic a, (self::generic::T) → dynamic b) → self::generic::T
+static method generic<T extends core::Object = dynamic>((self::generic::T) → dynamic a, (self::generic::T) → dynamic b) → self::generic::T
   return null;
 static method main() → dynamic {
   (core::num) → core::List<core::int> v = self::generic<(core::num) → core::List<core::int>>(((core::int) → core::Iterable<core::num> f) → core::Null => null, ((core::double) → core::List<core::int> g) → core::Null => null);
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.direct.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.direct.expect
index e98bebc..bf38d28 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class C<E extends core::Object> extends core::Object {
+abstract class C<E extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -12,7 +12,7 @@
   static method _compareAny(dynamic a, dynamic b) → core::int {
     throw "unimplemented";
   }
-  static method sort2<E extends core::Object>(self::C<self::C::sort2::E> a, (self::C::sort2::E, self::C::sort2::E) → core::int compare) → void {
+  static method sort2<E extends core::Object = dynamic>(self::C<self::C::sort2::E> a, (self::C::sort2::E, self::C::sort2::E) → core::int compare) → void {
     throw "unimplemented";
   }
 }
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.direct.transformed.expect
index e98bebc..bf38d28 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class C<E extends core::Object> extends core::Object {
+abstract class C<E extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -12,7 +12,7 @@
   static method _compareAny(dynamic a, dynamic b) → core::int {
     throw "unimplemented";
   }
-  static method sort2<E extends core::Object>(self::C<self::C::sort2::E> a, (self::C::sort2::E, self::C::sort2::E) → core::int compare) → void {
+  static method sort2<E extends core::Object = dynamic>(self::C<self::C::sort2::E> a, (self::C::sort2::E, self::C::sort2::E) → core::int compare) → void {
     throw "unimplemented";
   }
 }
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.outline.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.outline.expect
index 3ab1e85..dcee7af 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.outline.expect
@@ -2,14 +2,14 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class C<E extends core::Object> extends core::Object {
+abstract class C<E extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method sort([(self::C::E, self::C::E) → core::int compare]) → void
     ;
   static method _compareAny(dynamic a, dynamic b) → core::int
     ;
-  static method sort2<E extends core::Object>(self::C<self::C::sort2::E> a, (self::C::sort2::E, self::C::sort2::E) → core::int compare) → void
+  static method sort2<E extends core::Object = dynamic>(self::C<self::C::sort2::E> a, (self::C::sort2::E, self::C::sort2::E) → core::int compare) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.strong.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.strong.expect
index 949aa38..12798a4 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class C<E extends core::Object> extends core::Object {
+abstract class C<E extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -12,7 +12,7 @@
   static method _compareAny(dynamic a, dynamic b) → core::int {
     throw "unimplemented";
   }
-  static method sort2<E extends core::Object>(self::C<self::C::sort2::E> a, (self::C::sort2::E, self::C::sort2::E) → core::int compare) → void {
+  static method sort2<E extends core::Object = dynamic>(self::C<self::C::sort2::E> a, (self::C::sort2::E, self::C::sort2::E) → core::int compare) → void {
     throw "unimplemented";
   }
 }
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.strong.transformed.expect
index 949aa38..12798a4 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class C<E extends core::Object> extends core::Object {
+abstract class C<E extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -12,7 +12,7 @@
   static method _compareAny(dynamic a, dynamic b) → core::int {
     throw "unimplemented";
   }
-  static method sort2<E extends core::Object>(self::C<self::C::sort2::E> a, (self::C::sort2::E, self::C::sort2::E) → core::int compare) → void {
+  static method sort2<E extends core::Object = dynamic>(self::C<self::C::sort2::E> a, (self::C::sort2::E, self::C::sort2::E) → core::int compare) → void {
     throw "unimplemented";
   }
 }
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.direct.expect
index 2b083f0..c5a8995 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.direct.expect
@@ -46,6 +46,6 @@
     dynamic v7 = let final dynamic #t2 = this.{self::Test::member} in let final dynamic #t3 = this.{self::Test::member} = #t2.-(1) in #t2;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.direct.transformed.expect
index 2b083f0..c5a8995 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.direct.transformed.expect
@@ -46,6 +46,6 @@
     dynamic v7 = let final dynamic #t2 = this.{self::Test::member} in let final dynamic #t3 = this.{self::Test::member} = #t2.-(1) in #t2;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.outline.expect
index 031084f..ca2db03 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.outline.expect
@@ -29,7 +29,7 @@
   method test() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.strong.expect
index 9efe1fd..06514fa 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.strong.expect
@@ -46,6 +46,6 @@
     self::B v7 = let final self::B #t2 = this.{self::Test::member} in let final self::B #t3 = this.{self::Test::member} = #t2.{self::B::-}(1) in #t2;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.strong.transformed.expect
index 9efe1fd..06514fa 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.strong.transformed.expect
@@ -46,6 +46,6 @@
     self::B v7 = let final self::B #t2 = this.{self::Test::member} in let final self::B #t3 = this.{self::Test::member} = #t2.{self::B::-}(1) in #t2;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.direct.expect
index 38a2aec..a8ccc13 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.direct.expect
@@ -54,6 +54,6 @@
     dynamic v7 = let final dynamic #t38 = t in let final dynamic #t39 = self::f<dynamic>() in let final dynamic #t40 = #t38.[](#t39) in let final dynamic #t41 = #t38.[]=(#t39, #t40.-(1)) in #t40;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.direct.transformed.expect
index 38a2aec..a8ccc13 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.direct.transformed.expect
@@ -54,6 +54,6 @@
     dynamic v7 = let final dynamic #t38 = t in let final dynamic #t39 = self::f<dynamic>() in let final dynamic #t40 = #t38.[](#t39) in let final dynamic #t41 = #t38.[]=(#t39, #t40.-(1)) in #t40;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.outline.expect
index ff1db0b..8286554 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.outline.expect
@@ -36,7 +36,7 @@
   method test() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.strong.expect
index 5675288..62bd534 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.strong.expect
@@ -54,6 +54,6 @@
     self::B v7 = let final self::Test #t38 = t in let final dynamic #t39 = self::f<dynamic>() in let final self::B #t40 = #t38.{self::Test::[]}(#t39 as{TypeError} self::Index) in let final void #t41 = #t38.{self::Test::[]=}(#t39 as{TypeError} self::Index, #t40.{self::B::-}(1)) in #t40;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.strong.transformed.expect
index 5675288..62bd534 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.strong.transformed.expect
@@ -54,6 +54,6 @@
     self::B v7 = let final self::Test #t38 = t in let final dynamic #t39 = self::f<dynamic>() in let final self::B #t40 = #t38.{self::Test::[]}(#t39 as{TypeError} self::Index) in let final void #t41 = #t38.{self::Test::[]=}(#t39 as{TypeError} self::Index, #t40.{self::B::-}(1)) in #t40;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.direct.expect
index d8df616..ed16eaa 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.direct.expect
@@ -58,6 +58,6 @@
     dynamic v7 = let final dynamic #t27 = self::f<dynamic>() in let final dynamic #t28 = super.{self::Base::[]}(#t27) in let final dynamic #t29 = super.{self::Base::[]=}(#t27, #t28.-(1)) in #t28;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.direct.transformed.expect
index d8df616..ed16eaa 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.direct.transformed.expect
@@ -58,6 +58,6 @@
     dynamic v7 = let final dynamic #t27 = self::f<dynamic>() in let final dynamic #t28 = super.{self::Base::[]}(#t27) in let final dynamic #t29 = super.{self::Base::[]=}(#t27, #t28.-(1)) in #t28;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.outline.expect
index 421df3f..1d2a695 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.outline.expect
@@ -40,7 +40,7 @@
   method test() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.strong.expect
index 1b1837a..6b4c7fe 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.strong.expect
@@ -58,6 +58,6 @@
     self::B v7 = let final dynamic #t27 = self::f<dynamic>() in let final self::B #t28 = super.{self::Base::[]}(#t27 as{TypeError} self::Index) in let final void #t29 = super.{self::Base::[]=}(#t27 as{TypeError} self::Index, #t28.{self::B::-}(1)) in #t28;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.strong.transformed.expect
index 1b1837a..6b4c7fe 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.strong.transformed.expect
@@ -58,6 +58,6 @@
     self::B v7 = let final dynamic #t27 = self::f<dynamic>() in let final self::B #t28 = super.{self::Base::[]}(#t27 as{TypeError} self::Index) in let final void #t29 = super.{self::Base::[]=}(#t27 as{TypeError} self::Index, #t28.{self::B::-}(1)) in #t28;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.direct.expect
index 80bc52f..ac3de09 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.direct.expect
@@ -53,6 +53,6 @@
     dynamic v7 = let final dynamic #t27 = self::f<dynamic>() in let final dynamic #t28 = this.[](#t27) in let final dynamic #t29 = this.[]=(#t27, #t28.-(1)) in #t28;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.direct.transformed.expect
index 80bc52f..ac3de09 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.direct.transformed.expect
@@ -53,6 +53,6 @@
     dynamic v7 = let final dynamic #t27 = self::f<dynamic>() in let final dynamic #t28 = this.[](#t27) in let final dynamic #t29 = this.[]=(#t27, #t28.-(1)) in #t28;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.outline.expect
index ff1db0b..8286554 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.outline.expect
@@ -36,7 +36,7 @@
   method test() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.strong.expect
index 781c625..81add7c 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.strong.expect
@@ -53,6 +53,6 @@
     self::B v7 = let final dynamic #t27 = self::f<dynamic>() in let final self::B #t28 = this.{self::Test::[]}(#t27 as{TypeError} self::Index) in let final void #t29 = this.{self::Test::[]=}(#t27 as{TypeError} self::Index, #t28.{self::B::-}(1)) in #t28;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.strong.transformed.expect
index 781c625..81add7c 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.strong.transformed.expect
@@ -53,6 +53,6 @@
     self::B v7 = let final dynamic #t27 = self::f<dynamic>() in let final self::B #t28 = this.{self::Test::[]}(#t27 as{TypeError} self::Index) in let final void #t29 = this.{self::Test::[]=}(#t27 as{TypeError} self::Index, #t28.{self::B::-}(1)) in #t28;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.direct.expect
index 3566c8f..e94bc2f 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.direct.expect
@@ -25,7 +25,7 @@
     : super self::B::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   self::B local;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.direct.transformed.expect
index 3566c8f..e94bc2f 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.direct.transformed.expect
@@ -25,7 +25,7 @@
     : super self::B::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   self::B local;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.outline.expect
index e4b381c..7db001d 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.outline.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.strong.expect
index 22bf885..917a5ff 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.strong.expect
@@ -25,7 +25,7 @@
     : super self::B::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   self::B local;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.strong.transformed.expect
index 22bf885..917a5ff 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.strong.transformed.expect
@@ -25,7 +25,7 @@
     : super self::B::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   self::B local;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.direct.expect
index 8dd8737..519248d 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.direct.expect
@@ -46,6 +46,6 @@
     dynamic v7 = let final dynamic #t12 = t in let final dynamic #t13 = #t12.member in let final dynamic #t14 = #t12.member = #t13.-(1) in #t13;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.direct.transformed.expect
index 8dd8737..519248d 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.direct.transformed.expect
@@ -46,6 +46,6 @@
     dynamic v7 = let final dynamic #t12 = t in let final dynamic #t13 = #t12.member in let final dynamic #t14 = #t12.member = #t13.-(1) in #t13;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.outline.expect
index de60c09..c483408 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.outline.expect
@@ -29,7 +29,7 @@
   static method test(self::Test t) → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.strong.expect
index 69aa5fc..84dd210 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.strong.expect
@@ -46,6 +46,6 @@
     self::B v7 = let final self::Test #t12 = t in let final self::B #t13 = #t12.{self::Test::member} in let final self::B #t14 = #t12.{self::Test::member} = #t13.{self::B::-}(1) in #t13;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.strong.transformed.expect
index 69aa5fc..84dd210 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.strong.transformed.expect
@@ -46,6 +46,6 @@
     self::B v7 = let final self::Test #t12 = t in let final self::B #t13 = #t12.{self::Test::member} in let final self::B #t14 = #t12.{self::Test::member} = #t13.{self::B::-}(1) in #t13;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.direct.expect
index 94d0d64..5513712 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.direct.expect
@@ -46,6 +46,6 @@
     dynamic v7 = let final dynamic #t14 = t in #t14.==(null) ? null : let final dynamic #t15 = #t14.member in let final dynamic #t16 = #t14.member = #t15.-(1) in #t15;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.direct.transformed.expect
index 94d0d64..5513712 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.direct.transformed.expect
@@ -46,6 +46,6 @@
     dynamic v7 = let final dynamic #t14 = t in #t14.==(null) ? null : let final dynamic #t15 = #t14.member in let final dynamic #t16 = #t14.member = #t15.-(1) in #t15;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.outline.expect
index de60c09..c483408 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.outline.expect
@@ -29,7 +29,7 @@
   static method test(self::Test t) → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.strong.expect
index 941a4b2..abecc5d 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.strong.expect
@@ -46,6 +46,6 @@
     self::B v7 = let final self::Test #t14 = t in #t14.==(null) ?{self::B} null : let final self::B #t15 = #t14.{self::Test::member} in let final self::B #t16 = #t14.{self::Test::member} = #t15.{self::B::-}(1) in #t15;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.strong.transformed.expect
index 941a4b2..abecc5d 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.strong.transformed.expect
@@ -46,6 +46,6 @@
     self::B v7 = let final self::Test #t14 = t in #t14.==(null) ?{self::B} null : let final self::B #t15 = #t14.{self::Test::member} in let final self::B #t16 = #t14.{self::Test::member} = #t15.{self::B::-}(1) in #t15;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.direct.expect
index 9f3a3bf..a4ec9d8 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.direct.expect
@@ -51,6 +51,6 @@
     dynamic v7 = let final dynamic #t2 = super.{self::Base::member} in let final dynamic #t3 = super.{self::Base::member} = #t2.-(1) in #t2;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.direct.transformed.expect
index 9f3a3bf..a4ec9d8 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.direct.transformed.expect
@@ -51,6 +51,6 @@
     dynamic v7 = let final dynamic #t2 = super.{self::Base::member} in let final dynamic #t3 = super.{self::Base::member} = #t2.-(1) in #t2;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.outline.expect
index 077e4d6..8aa62bc 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.outline.expect
@@ -33,7 +33,7 @@
   method test() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.strong.expect
index 65a0233..609bc691 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.strong.expect
@@ -51,6 +51,6 @@
     self::B v7 = let final self::B #t2 = super.{self::Base::member} in let final self::B #t3 = super.{self::Base::member} = #t2.{self::B::-}(1) in #t2;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.strong.transformed.expect
index 65a0233..609bc691 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.strong.transformed.expect
@@ -51,6 +51,6 @@
     self::B v7 = let final self::B #t2 = super.{self::Base::member} in let final self::B #t3 = super.{self::Base::member} = #t2.{self::B::-}(1) in #t2;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.direct.expect
index f3c9f8d..02325a0 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.direct.expect
@@ -27,7 +27,7 @@
     ;
 }
 static field self::B topLevelVariable;
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test_topLevelVariable() → void {
   self::topLevelVariable = self::f<dynamic>();
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.direct.transformed.expect
index f3c9f8d..02325a0 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.direct.transformed.expect
@@ -27,7 +27,7 @@
     ;
 }
 static field self::B topLevelVariable;
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test_topLevelVariable() → void {
   self::topLevelVariable = self::f<dynamic>();
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.outline.expect
index e348b03..dca7f38 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.outline.expect
@@ -24,7 +24,7 @@
     ;
 }
 static field self::B topLevelVariable;
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method test_topLevelVariable() → void
   ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.strong.expect
index e66e6c8..5199214 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.strong.expect
@@ -27,7 +27,7 @@
     ;
 }
 static field self::B topLevelVariable;
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test_topLevelVariable() → void {
   self::topLevelVariable = self::f<self::B>();
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.strong.transformed.expect
index e66e6c8..5199214 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.strong.transformed.expect
@@ -27,7 +27,7 @@
     ;
 }
 static field self::B topLevelVariable;
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test_topLevelVariable() → void {
   self::topLevelVariable = self::f<self::B>();
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.direct.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.direct.expect
index de0ee9c..d80578b 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class A<T extends core::Object> extends core::Object {
+abstract class A<T extends core::Object = dynamic> extends core::Object {
   field core::List<self::A::T> z = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.direct.transformed.expect
index de0ee9c..d80578b 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class A<T extends core::Object> extends core::Object {
+abstract class A<T extends core::Object = dynamic> extends core::Object {
   field core::List<self::A::T> z = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.outline.expect
index 1d6e2bc..bb96bee 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class A<T extends core::Object> extends core::Object {
+abstract class A<T extends core::Object = dynamic> extends core::Object {
   field core::List<self::A::T> z;
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.strong.expect
index e1b8859..3139312 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class A<T extends core::Object> extends core::Object {
+abstract class A<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field core::List<self::A::T> z = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.strong.transformed.expect
index e1b8859..3139312 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class A<T extends core::Object> extends core::Object {
+abstract class A<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field core::List<self::A::T> z = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.direct.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.direct.expect
index 79ae48f..4b95c54 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.direct.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(core::int a, {core::String b = null, self::C::m::T c = null}) → self::C::m::T
+  method m<T extends core::Object = dynamic>(core::int a, {core::String b = null, self::C::m::T c = null}) → self::C::m::T
     return null;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.direct.transformed.expect
index 79ae48f..4b95c54 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.direct.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(core::int a, {core::String b = null, self::C::m::T c = null}) → self::C::m::T
+  method m<T extends core::Object = dynamic>(core::int a, {core::String b = null, self::C::m::T c = null}) → self::C::m::T
     return null;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.strong.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.strong.expect
index 3e03634..bd07f13 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.strong.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(core::int a, {core::String b = null, self::C::m::T c = null}) → self::C::m::T
+  method m<T extends core::Object = dynamic>(core::int a, {core::String b = null, self::C::m::T c = null}) → self::C::m::T
     return null;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.strong.transformed.expect
index 3e03634..bd07f13 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(core::int a, {core::String b = null, self::C::m::T c = null}) → self::C::m::T
+  method m<T extends core::Object = dynamic>(core::int a, {core::String b = null, self::C::m::T c = null}) → self::C::m::T
     return null;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.direct.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.direct.expect
index b3f2fc0..2641064 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.direct.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(core::int a, [self::C::m::T b = null]) → self::C::m::T
+  method m<T extends core::Object = dynamic>(core::int a, [self::C::m::T b = null]) → self::C::m::T
     return null;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.direct.transformed.expect
index b3f2fc0..2641064 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.direct.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(core::int a, [self::C::m::T b = null]) → self::C::m::T
+  method m<T extends core::Object = dynamic>(core::int a, [self::C::m::T b = null]) → self::C::m::T
     return null;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.strong.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.strong.expect
index 7f57027..58dcecf 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.strong.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(core::int a, [self::C::m::T b = null]) → self::C::m::T
+  method m<T extends core::Object = dynamic>(core::int a, [self::C::m::T b = null]) → self::C::m::T
     return null;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.strong.transformed.expect
index 7f57027..58dcecf 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(core::int a, [self::C::m::T b = null]) → self::C::m::T
+  method m<T extends core::Object = dynamic>(core::int a, [self::C::m::T b = null]) → self::C::m::T
     return null;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.direct.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.direct.expect
index c4ff57c..e4e7bd1 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.direct.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(core::int a, [core::String b = null, self::C::m::T c = null]) → self::C::m::T
+  method m<T extends core::Object = dynamic>(core::int a, [core::String b = null, self::C::m::T c = null]) → self::C::m::T
     return null;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.direct.transformed.expect
index c4ff57c..e4e7bd1 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.direct.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(core::int a, [core::String b = null, self::C::m::T c = null]) → self::C::m::T
+  method m<T extends core::Object = dynamic>(core::int a, [core::String b = null, self::C::m::T c = null]) → self::C::m::T
     return null;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.strong.expect
index 4b84fa0..10a9999 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.strong.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(core::int a, [core::String b = null, self::C::m::T c = null]) → self::C::m::T
+  method m<T extends core::Object = dynamic>(core::int a, [core::String b = null, self::C::m::T c = null]) → self::C::m::T
     return null;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.strong.transformed.expect
index 4b84fa0..10a9999 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(core::int a, [core::String b = null, self::C::m::T c = null]) → self::C::m::T
+  method m<T extends core::Object = dynamic>(core::int a, [core::String b = null, self::C::m::T c = null]) → self::C::m::T
     return null;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.direct.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.direct.expect
index c9998b1..bfa9057 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.direct.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(self::C::m::T x) → self::C::m::T
+  method m<T extends core::Object = dynamic>(self::C::m::T x) → self::C::m::T
     return x;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.direct.transformed.expect
index c9998b1..bfa9057 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.direct.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(self::C::m::T x) → self::C::m::T
+  method m<T extends core::Object = dynamic>(self::C::m::T x) → self::C::m::T
     return x;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.strong.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.strong.expect
index 1d672d3..da75fda 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.strong.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(self::C::m::T x) → self::C::m::T
+  method m<T extends core::Object = dynamic>(self::C::m::T x) → self::C::m::T
     return x;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.strong.transformed.expect
index 1d672d3..da75fda 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method m<T extends core::Object>(self::C::m::T x) → self::C::m::T
+  method m<T extends core::Object = dynamic>(self::C::m::T x) → self::C::m::T
     return x;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.direct.expect b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.direct.expect
index 3ae0ee0..3fc4e1c 100644
--- a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.direct.expect
@@ -12,7 +12,7 @@
     : super self::Resource::•()
     ;
 }
-class Foo<T extends core::Object> extends core::Object {
+class Foo<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::Foo::T t) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.direct.transformed.expect
index 3ae0ee0..3fc4e1c 100644
--- a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.direct.transformed.expect
@@ -12,7 +12,7 @@
     : super self::Resource::•()
     ;
 }
-class Foo<T extends core::Object> extends core::Object {
+class Foo<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::Foo::T t) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.strong.expect b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.strong.expect
index 61a99de..517d849 100644
--- a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.strong.expect
@@ -12,7 +12,7 @@
     : super self::Resource::•()
     ;
 }
-class Foo<T extends core::Object> extends core::Object {
+class Foo<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::Foo::T t) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.strong.transformed.expect
index 61a99de..517d849 100644
--- a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
     : super self::Resource::•()
     ;
 }
-class Foo<T extends core::Object> extends core::Object {
+class Foo<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::Foo::T t) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.direct.expect b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.direct.expect
index cb7e421..d4ee51b 100644
--- a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.direct.expect
@@ -15,7 +15,7 @@
     ;
   abstract method x(() → dynamic value) → void;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method g(self::B b) → dynamic {
   b.x(self::f<dynamic>());
diff --git a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.direct.transformed.expect
index cb7e421..d4ee51b 100644
--- a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.direct.transformed.expect
@@ -15,7 +15,7 @@
     ;
   abstract method x(() → dynamic value) → void;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method g(self::B b) → dynamic {
   b.x(self::f<dynamic>());
diff --git a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.outline.expect b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.outline.expect
index 00d3cbe..4ee1701 100644
--- a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.outline.expect
@@ -13,7 +13,7 @@
     ;
   abstract method x(() → dynamic value) → void;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method g(self::B b) → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.strong.expect b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.strong.expect
index f0e5701..dd7fcd8 100644
--- a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.strong.expect
@@ -15,7 +15,7 @@
     ;
   abstract method x(() → dynamic value) → void;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method g(self::B b) → dynamic {
   b.{self::B::x}(self::f<() → dynamic>());
diff --git a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.strong.transformed.expect
index f0e5701..dd7fcd8 100644
--- a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
     ;
   abstract method x(() → dynamic value) → void;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method g(self::B b) → dynamic {
   b.{self::B::x}(self::f<() → dynamic>());
diff --git a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.direct.expect b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.direct.expect
index d15047a..ddb9de6 100644
--- a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.direct.expect
@@ -15,7 +15,7 @@
     ;
   abstract set x(() → dynamic value) → void;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method g(self::B b) → dynamic {
   b.x = self::f<dynamic>();
diff --git a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.direct.transformed.expect
index d15047a..ddb9de6 100644
--- a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.direct.transformed.expect
@@ -15,7 +15,7 @@
     ;
   abstract set x(() → dynamic value) → void;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method g(self::B b) → dynamic {
   b.x = self::f<dynamic>();
diff --git a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.outline.expect b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.outline.expect
index f550eb1..e8bf885 100644
--- a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.outline.expect
@@ -13,7 +13,7 @@
     ;
   abstract set x(() → dynamic value) → void;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method g(self::B b) → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.strong.expect b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.strong.expect
index dafd372..d9e3fdf 100644
--- a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.strong.expect
@@ -15,7 +15,7 @@
     ;
   abstract set x(() → dynamic value) → void;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method g(self::B b) → dynamic {
   b.{self::B::x} = self::f<() → dynamic>();
diff --git a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.strong.transformed.expect
index dafd372..d9e3fdf 100644
--- a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
     ;
   abstract set x(() → dynamic value) → void;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method g(self::B b) → dynamic {
   b.{self::B::x} = self::f<() → dynamic>();
diff --git a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.direct.expect b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.direct.expect
index 7e9227c..0964033 100644
--- a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static field dynamic x = throw self::f<dynamic>();
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method g() → void {
   dynamic x = throw self::f<dynamic>();
diff --git a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.direct.transformed.expect
index 7e9227c..0964033 100644
--- a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.direct.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static field dynamic x = throw self::f<dynamic>();
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method g() → void {
   dynamic x = throw self::f<dynamic>();
diff --git a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.outline.expect b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.outline.expect
index 8e0e7e2..61ee50c 100644
--- a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static field dynamic x;
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method g() → void
   ;
diff --git a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.strong.expect
index 7e9227c..0964033 100644
--- a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static field dynamic x = throw self::f<dynamic>();
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method g() → void {
   dynamic x = throw self::f<dynamic>();
diff --git a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.strong.transformed.expect
index 7e9227c..0964033 100644
--- a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static field dynamic x = throw self::f<dynamic>();
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method g() → void {
   dynamic x = throw self::f<dynamic>();
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.direct.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.direct.expect
index cb1b1b6..10fb95d 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   final field self::A::T x = null;
   final field self::A::T w = null;
   synthetic constructor •() → void
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.direct.transformed.expect
index cb1b1b6..10fb95d 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   final field self::A::T x = null;
   final field self::A::T w = null;
   synthetic constructor •() → void
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
index f6f271d..680dc9c 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   final field self::A::T x = null;
   final field self::A::T w = null;
   synthetic constructor •() → void
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.transformed.expect
index b41ed11..cecd7ae 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   final field self::A::T x = null;
   final field self::A::T w = null;
   synthetic constructor •() → void
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.direct.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.direct.expect
index 3aa3a9c..b834ab4 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.direct.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   field self::A::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<E extends core::Object> extends self::A<self::B::E> {
+class B<E extends core::Object = dynamic> extends self::A<self::B::E> {
   field self::B::E y = null;
   synthetic constructor •() → void
     : super self::A::•()
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.direct.transformed.expect
index 3aa3a9c..b834ab4 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.direct.transformed.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   field self::A::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<E extends core::Object> extends self::A<self::B::E> {
+class B<E extends core::Object = dynamic> extends self::A<self::B::E> {
   field self::B::E y = null;
   synthetic constructor •() → void
     : super self::A::•()
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
index 870f4ed..df2a21a 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::A::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<E extends core::Object> extends self::A<self::B::E> {
+class B<E extends core::Object = dynamic> extends self::A<self::B::E> {
   generic-covariant-impl generic-covariant-interface field self::B::E y = null;
   synthetic constructor •() → void
     : super self::A::•()
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.transformed.expect
index 30e1bb6..06e2b22 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.transformed.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::A::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<E extends core::Object> extends self::A<self::B::E> {
+class B<E extends core::Object = dynamic> extends self::A<self::B::E> {
   generic-covariant-impl generic-covariant-interface field self::B::E y = null;
   synthetic constructor •() → void
     : super self::A::•()
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.direct.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.direct.expect
index b9909f6..d3df882 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.direct.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I<E extends core::Object> extends core::Object {
+abstract class I<E extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method m(dynamic a, (dynamic, self::I::E) → core::String f) → core::String;
 }
-abstract class A<E extends core::Object> extends core::Object implements self::I<self::A::E> {
+abstract class A<E extends core::Object = dynamic> extends core::Object implements self::I<self::A::E> {
   const constructor •() → void
     : super core::Object::•()
     ;
@@ -20,7 +20,7 @@
     : super core::Object::•()
     ;
 }
-class B<E extends core::Object> extends self::A<self::B::E> implements self::M {
+class B<E extends core::Object = dynamic> extends self::A<self::B::E> implements self::M {
   const constructor •() → void
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.direct.transformed.expect
index b9909f6..d3df882 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.direct.transformed.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I<E extends core::Object> extends core::Object {
+abstract class I<E extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method m(dynamic a, (dynamic, self::I::E) → core::String f) → core::String;
 }
-abstract class A<E extends core::Object> extends core::Object implements self::I<self::A::E> {
+abstract class A<E extends core::Object = dynamic> extends core::Object implements self::I<self::A::E> {
   const constructor •() → void
     : super core::Object::•()
     ;
@@ -20,7 +20,7 @@
     : super core::Object::•()
     ;
 }
-class B<E extends core::Object> extends self::A<self::B::E> implements self::M {
+class B<E extends core::Object = dynamic> extends self::A<self::B::E> implements self::M {
   const constructor •() → void
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
index 7c59a35..8bd9cd0 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I<E extends core::Object> extends core::Object {
+abstract class I<E extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method m(dynamic a, (dynamic, self::I::E) → core::String f) → core::String;
 }
-abstract class A<E extends core::Object> extends core::Object implements self::I<self::A::E> {
+abstract class A<E extends core::Object = dynamic> extends core::Object implements self::I<self::A::E> {
   const constructor •() → void
     : super core::Object::•()
     ;
@@ -20,7 +20,7 @@
     : super core::Object::•()
     ;
 }
-class B<E extends core::Object> extends self::A<self::B::E> implements self::M {
+class B<E extends core::Object = dynamic> extends self::A<self::B::E> implements self::M {
   const constructor •() → void
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.transformed.expect
index 9d7b98a..5c0657a 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.transformed.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I<E extends core::Object> extends core::Object {
+abstract class I<E extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method m(dynamic a, (dynamic, self::I::E) → core::String f) → core::String;
 }
-abstract class A<E extends core::Object> extends core::Object implements self::I<self::A::E> {
+abstract class A<E extends core::Object = dynamic> extends core::Object implements self::I<self::A::E> {
   const constructor •() → void
     : super core::Object::•()
     ;
@@ -20,7 +20,7 @@
     : super core::Object::•()
     ;
 }
-class B<E extends core::Object> extends self::A<self::B::E> implements self::M {
+class B<E extends core::Object = dynamic> extends self::A<self::B::E> implements self::M {
   const constructor •() → void
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.direct.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.direct.expect
index 97f9b08..b9c1563 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "./infer_types_on_generic_instantiations_in_library_cycle_a.dart" as inf;
 
-abstract class A<E extends core::Object> extends core::Object implements inf::I<self::A::E> {
+abstract class A<E extends core::Object = dynamic> extends core::Object implements inf::I<self::A::E> {
   final field self::A::E value = null;
   const constructor •() → void
     : super core::Object::•()
@@ -15,7 +15,7 @@
     : super core::Object::•()
     ;
 }
-class B<E extends core::Object> extends self::A<self::B::E> implements self::M {
+class B<E extends core::Object = dynamic> extends self::A<self::B::E> implements self::M {
   const constructor •() → void
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.direct.transformed.expect
index 97f9b08..b9c1563 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.direct.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "./infer_types_on_generic_instantiations_in_library_cycle_a.dart" as inf;
 
-abstract class A<E extends core::Object> extends core::Object implements inf::I<self::A::E> {
+abstract class A<E extends core::Object = dynamic> extends core::Object implements inf::I<self::A::E> {
   final field self::A::E value = null;
   const constructor •() → void
     : super core::Object::•()
@@ -15,7 +15,7 @@
     : super core::Object::•()
     ;
 }
-class B<E extends core::Object> extends self::A<self::B::E> implements self::M {
+class B<E extends core::Object = dynamic> extends self::A<self::B::E> implements self::M {
   const constructor •() → void
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
index 33ef878..a3154f4 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "./infer_types_on_generic_instantiations_in_library_cycle_a.dart" as inf;
 
-abstract class A<E extends core::Object> extends core::Object implements inf::I<self::A::E> {
+abstract class A<E extends core::Object = dynamic> extends core::Object implements inf::I<self::A::E> {
   final field self::A::E value = null;
   const constructor •() → void
     : super core::Object::•()
@@ -15,7 +15,7 @@
     : super core::Object::•()
     ;
 }
-class B<E extends core::Object> extends self::A<self::B::E> implements self::M {
+class B<E extends core::Object = dynamic> extends self::A<self::B::E> implements self::M {
   const constructor •() → void
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.transformed.expect
index e7bb4e0..53741ec 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "./infer_types_on_generic_instantiations_in_library_cycle_a.dart" as inf;
 
-abstract class A<E extends core::Object> extends core::Object implements inf::I<self::A::E> {
+abstract class A<E extends core::Object = dynamic> extends core::Object implements inf::I<self::A::E> {
   final field self::A::E value = null;
   const constructor •() → void
     : super core::Object::•()
@@ -15,7 +15,7 @@
     : super core::Object::•()
     ;
 }
-class B<E extends core::Object> extends self::A<self::B::E> implements self::M {
+class B<E extends core::Object = dynamic> extends self::A<self::B::E> implements self::M {
   const constructor •() → void
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.direct.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.direct.expect
index b26d0cb..83c90ce 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "./infer_types_on_generic_instantiations_in_library_cycle.dart" as test;
 
-abstract class I<E extends core::Object> extends core::Object {
+abstract class I<E extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.direct.transformed.expect
index b26d0cb..83c90ce 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.direct.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "./infer_types_on_generic_instantiations_in_library_cycle.dart" as test;
 
-abstract class I<E extends core::Object> extends core::Object {
+abstract class I<E extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.strong.expect
index b26d0cb..83c90ce 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "./infer_types_on_generic_instantiations_in_library_cycle.dart" as test;
 
-abstract class I<E extends core::Object> extends core::Object {
+abstract class I<E extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.strong.transformed.expect
index b26d0cb..83c90ce 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "./infer_types_on_generic_instantiations_in_library_cycle.dart" as test;
 
-abstract class I<E extends core::Object> extends core::Object {
+abstract class I<E extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.direct.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.direct.expect
index f45b7c8..dafc844 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   final field self::A::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.direct.transformed.expect
index f45b7c8..dafc844 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   final field self::A::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect
index 032d625..615fcf8 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   final field self::A::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.direct.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.direct.expect
index d9c5ceb..4c5fd78 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.direct.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
 }
-class Bar<T extends core::Iterable<core::String>> extends core::Object {
+class Bar<T extends core::Iterable<core::String> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -18,7 +18,7 @@
     }
   }
 }
-class Baz<T extends core::Object, E extends core::Iterable<self::Baz::T>, S extends self::Baz::E> extends core::Object {
+class Baz<T extends core::Object = dynamic, E extends core::Iterable<self::Baz::T> = dynamic, S extends self::Baz::E = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.direct.transformed.expect
index d9c5ceb..4c5fd78 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.direct.transformed.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
 }
-class Bar<T extends core::Iterable<core::String>> extends core::Object {
+class Bar<T extends core::Iterable<core::String> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -18,7 +18,7 @@
     }
   }
 }
-class Baz<T extends core::Object, E extends core::Iterable<self::Baz::T>, S extends self::Baz::E> extends core::Object {
+class Baz<T extends core::Object = dynamic, E extends core::Iterable<self::Baz::T> = dynamic, S extends self::Baz::E = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
index e02a9c4..0b9e781 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
 }
-class Bar<T extends core::Iterable<core::String>> extends core::Object {
+class Bar<T extends core::Iterable<core::String> = core::Iterable<core::String>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -21,7 +21,7 @@
     }
   }
 }
-class Baz<T extends core::Object, E extends core::Iterable<self::Baz::T>, S extends self::Baz::E> extends core::Object {
+class Baz<T extends core::Object = dynamic, E extends core::Iterable<self::Baz::T> = core::Iterable<dynamic>, S extends self::Baz::E = core::Iterable<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect
index a4e6e95..2f136bc 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
 }
-class Bar<T extends core::Iterable<core::String>> extends core::Object {
+class Bar<T extends core::Iterable<core::String> = core::Iterable<core::String>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -21,7 +21,7 @@
     }
   }
 }
-class Baz<T extends core::Object, E extends core::Iterable<self::Baz::T>, S extends self::Baz::E> extends core::Object {
+class Baz<T extends core::Object = dynamic, E extends core::Iterable<self::Baz::T> = core::Iterable<dynamic>, S extends self::Baz::E = core::Iterable<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.direct.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.direct.expect
index 6421db3..a243798 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.direct.expect
@@ -9,7 +9,7 @@
     : super core::Object::•()
     ;
 }
-class Bar<T extends asy::Stream<core::String>> extends core::Object {
+class Bar<T extends asy::Stream<core::String> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -19,7 +19,7 @@
     }
   }
 }
-class Baz<T extends core::Object, E extends asy::Stream<self::Baz::T>, S extends self::Baz::E> extends core::Object {
+class Baz<T extends core::Object = dynamic, E extends asy::Stream<self::Baz::T> = dynamic, S extends self::Baz::E = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -30,8 +30,8 @@
     }
   }
 }
-abstract class MyStream<T extends core::Object> extends asy::Stream<self::MyStream::T> {
-  static factory •<T extends core::Object>() → self::MyStream<self::MyStream::•::T>
+abstract class MyStream<T extends core::Object = dynamic> extends asy::Stream<self::MyStream::T> {
+  static factory •<T extends core::Object = dynamic>() → self::MyStream<self::MyStream::•::T>
     return null;
 }
 static method test() → dynamic async {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.direct.transformed.expect
index bfda42e..f8f99d3 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.direct.transformed.expect
@@ -9,7 +9,7 @@
     : super core::Object::•()
     ;
 }
-class Bar<T extends asy::Stream<core::String>> extends core::Object {
+class Bar<T extends asy::Stream<core::String> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -64,7 +64,7 @@
     return :completer.{asy::Completer::future};
   }
 }
-class Baz<T extends core::Object, E extends asy::Stream<self::Baz::T>, S extends self::Baz::E> extends core::Object {
+class Baz<T extends core::Object = dynamic, E extends asy::Stream<self::Baz::T> = dynamic, S extends self::Baz::E = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -120,8 +120,8 @@
     return :completer.{asy::Completer::future};
   }
 }
-abstract class MyStream<T extends core::Object> extends asy::Stream<self::MyStream::T> {
-  static factory •<T extends core::Object>() → self::MyStream<self::MyStream::•::T>
+abstract class MyStream<T extends core::Object = dynamic> extends asy::Stream<self::MyStream::T> {
+  static factory •<T extends core::Object = dynamic>() → self::MyStream<self::MyStream::•::T>
     return null;
 }
 static method test() → dynamic /* originally async */ {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect
index 0abefd8..312b175 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect
@@ -8,20 +8,20 @@
   synthetic constructor •() → void
     ;
 }
-class Bar<T extends asy::Stream<core::String>> extends core::Object {
+class Bar<T extends asy::Stream<core::String> = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method foo(self::Bar::T t) → dynamic
     ;
 }
-class Baz<T extends core::Object, E extends asy::Stream<self::Baz::T>, S extends self::Baz::E> extends core::Object {
+class Baz<T extends core::Object = dynamic, E extends asy::Stream<self::Baz::T> = dynamic, S extends self::Baz::E = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method foo(self::Baz::S t) → dynamic
     ;
 }
-abstract class MyStream<T extends core::Object> extends asy::Stream<self::MyStream::T> {
-  static factory •<T extends core::Object>() → self::MyStream<self::MyStream::•::T>
+abstract class MyStream<T extends core::Object = dynamic> extends asy::Stream<self::MyStream::T> {
+  static factory •<T extends core::Object = dynamic>() → self::MyStream<self::MyStream::•::T>
     ;
 }
 static method test() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
index 98d998a..43e0fad 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
@@ -9,7 +9,7 @@
     : super core::Object::•()
     ;
 }
-class Bar<T extends asy::Stream<core::String>> extends core::Object {
+class Bar<T extends asy::Stream<core::String> = asy::Stream<core::String>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -22,7 +22,7 @@
     }
   }
 }
-class Baz<T extends core::Object, E extends asy::Stream<self::Baz::T>, S extends self::Baz::E> extends core::Object {
+class Baz<T extends core::Object = dynamic, E extends asy::Stream<self::Baz::T> = asy::Stream<dynamic>, S extends self::Baz::E = asy::Stream<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -36,8 +36,8 @@
     }
   }
 }
-abstract class MyStream<T extends core::Object> extends asy::Stream<self::MyStream::T> {
-  static factory •<T extends core::Object>() → self::MyStream<self::MyStream::•::T>
+abstract class MyStream<T extends core::Object = dynamic> extends asy::Stream<self::MyStream::T> {
+  static factory •<T extends core::Object = dynamic>() → self::MyStream<self::MyStream::•::T>
     return null;
 }
 static method test() → dynamic async {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect
index cf338e2..bb29f89 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect
@@ -9,7 +9,7 @@
     : super core::Object::•()
     ;
 }
-class Bar<T extends asy::Stream<core::String>> extends core::Object {
+class Bar<T extends asy::Stream<core::String> = asy::Stream<core::String>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -67,7 +67,7 @@
     return :completer.{asy::Completer::future};
   }
 }
-class Baz<T extends core::Object, E extends asy::Stream<self::Baz::T>, S extends self::Baz::E> extends core::Object {
+class Baz<T extends core::Object = dynamic, E extends asy::Stream<self::Baz::T> = asy::Stream<dynamic>, S extends self::Baz::E = asy::Stream<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -126,8 +126,8 @@
     return :completer.{asy::Completer::future};
   }
 }
-abstract class MyStream<T extends core::Object> extends asy::Stream<self::MyStream::T> {
-  static factory •<T extends core::Object>() → self::MyStream<self::MyStream::•::T>
+abstract class MyStream<T extends core::Object = dynamic> extends asy::Stream<self::MyStream::T> {
+  static factory •<T extends core::Object = dynamic>() → self::MyStream<self::MyStream::•::T>
     return null;
 }
 static method test() → dynamic /* originally async */ {
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.direct.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.direct.expect
index ab7a925..b9fa6d2 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.direct.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = () → T;
+typedef F<T extends core::Object = dynamic> = () → T;
 static final field dynamic x = <core::String, () → core::int>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.direct.transformed.expect
index ab7a925..b9fa6d2 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.direct.transformed.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = () → T;
+typedef F<T extends core::Object = dynamic> = () → T;
 static final field dynamic x = <core::String, () → core::int>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.strong.expect
index 017095d..40eb28c 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.strong.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = () → T;
+typedef F<T extends core::Object = dynamic> = () → T;
 static final field core::Map<core::String, () → core::int> x = <core::String, () → core::int>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.strong.transformed.expect
index 017095d..40eb28c 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.strong.transformed.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = () → T;
+typedef F<T extends core::Object = dynamic> = () → T;
 static final field core::Map<core::String, () → core::int> x = <core::String, () → core::int>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.direct.expect b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.direct.expect
index 9a8589f..eb85185 100644
--- a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B<core::List<self::A::T>> b) → void
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.direct.transformed.expect
index 9a8589f..eb85185 100644
--- a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B<core::List<self::A::T>> b) → void
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.outline.expect b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.outline.expect
index 91dce6c..fdd5f51 100644
--- a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.outline.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B<core::List<self::A::T>> b) → void
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.strong.expect
index 65851c3..c5b34ab 100644
--- a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B<core::List<self::A::T>> b) → void
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.strong.transformed.expect
index 65851c3..c5b34ab 100644
--- a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B<core::List<self::A::T>> b) → void
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.direct.expect
index 7464b33..003db25 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.direct.expect
@@ -6,9 +6,9 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(self::C::f::T x) → self::C::f::T
+  method f<T extends core::Object = dynamic>(self::C::f::T x) → self::C::f::T
     return x;
-  static method g<T extends core::Object>(self::C::g::T x) → self::C::g::T
+  static method g<T extends core::Object = dynamic>(self::C::g::T x) → self::C::g::T
     return x;
 }
 class D extends self::C {
@@ -20,10 +20,10 @@
     func = super.{self::C::f};
   }
 }
-static method f<T extends core::Object>(self::f::T x) → self::f::T
+static method f<T extends core::Object = dynamic>(self::f::T x) → self::f::T
   return x;
 static method test() → void {
-  function h<T extends core::Object>(T x) → T
+  function h<T extends core::Object = dynamic>(T x) → T
     return x;
   (core::int) → core::int func;
   func = self::f;
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.direct.transformed.expect
index 7464b33..003db25 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.direct.transformed.expect
@@ -6,9 +6,9 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(self::C::f::T x) → self::C::f::T
+  method f<T extends core::Object = dynamic>(self::C::f::T x) → self::C::f::T
     return x;
-  static method g<T extends core::Object>(self::C::g::T x) → self::C::g::T
+  static method g<T extends core::Object = dynamic>(self::C::g::T x) → self::C::g::T
     return x;
 }
 class D extends self::C {
@@ -20,10 +20,10 @@
     func = super.{self::C::f};
   }
 }
-static method f<T extends core::Object>(self::f::T x) → self::f::T
+static method f<T extends core::Object = dynamic>(self::f::T x) → self::f::T
   return x;
 static method test() → void {
-  function h<T extends core::Object>(T x) → T
+  function h<T extends core::Object = dynamic>(T x) → T
     return x;
   (core::int) → core::int func;
   func = self::f;
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.outline.expect
index cac8ab3..425d634 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.outline.expect
@@ -5,9 +5,9 @@
 class C extends core::Object {
   synthetic constructor •() → void
     ;
-  method f<T extends core::Object>(self::C::f::T x) → self::C::f::T
+  method f<T extends core::Object = dynamic>(self::C::f::T x) → self::C::f::T
     ;
-  static method g<T extends core::Object>(self::C::g::T x) → self::C::g::T
+  static method g<T extends core::Object = dynamic>(self::C::g::T x) → self::C::g::T
     ;
 }
 class D extends self::C {
@@ -16,7 +16,7 @@
   method test() → void
     ;
 }
-static method f<T extends core::Object>(self::f::T x) → self::f::T
+static method f<T extends core::Object = dynamic>(self::f::T x) → self::f::T
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.strong.expect
index 24d056a..5f9428d 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.strong.expect
@@ -6,9 +6,9 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(self::C::f::T x) → self::C::f::T
+  method f<T extends core::Object = dynamic>(self::C::f::T x) → self::C::f::T
     return x;
-  static method g<T extends core::Object>(self::C::g::T x) → self::C::g::T
+  static method g<T extends core::Object = dynamic>(self::C::g::T x) → self::C::g::T
     return x;
 }
 class D extends self::C {
@@ -20,10 +20,10 @@
     func = super.{self::C::f}<core::int>;
   }
 }
-static method f<T extends core::Object>(self::f::T x) → self::f::T
+static method f<T extends core::Object = dynamic>(self::f::T x) → self::f::T
   return x;
 static method test() → void {
-  function h<T extends core::Object>(T x) → T
+  function h<T extends core::Object = dynamic>(T x) → T
     return x;
   (core::int) → core::int func;
   func = self::f<core::int>;
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.strong.transformed.expect
index 24d056a..5f9428d 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.strong.transformed.expect
@@ -6,9 +6,9 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(self::C::f::T x) → self::C::f::T
+  method f<T extends core::Object = dynamic>(self::C::f::T x) → self::C::f::T
     return x;
-  static method g<T extends core::Object>(self::C::g::T x) → self::C::g::T
+  static method g<T extends core::Object = dynamic>(self::C::g::T x) → self::C::g::T
     return x;
 }
 class D extends self::C {
@@ -20,10 +20,10 @@
     func = super.{self::C::f}<core::int>;
   }
 }
-static method f<T extends core::Object>(self::f::T x) → self::f::T
+static method f<T extends core::Object = dynamic>(self::f::T x) → self::f::T
   return x;
 static method test() → void {
-  function h<T extends core::Object>(T x) → T
+  function h<T extends core::Object = dynamic>(T x) → T
     return x;
   (core::int) → core::int func;
   func = self::f<core::int>;
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.direct.expect
index 407abc7..254d3c1 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.direct.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends core::Object>(self::C::f::U x) → (self::C::T) → void
+  method f<U extends core::Object = dynamic>(self::C::f::U x) → (self::C::T) → void
     return (dynamic y) → dynamic {};
 }
 static method test(self::C<core::String> c) → void {
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.direct.transformed.expect
index 407abc7..254d3c1 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.direct.transformed.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends core::Object>(self::C::f::U x) → (self::C::T) → void
+  method f<U extends core::Object = dynamic>(self::C::f::U x) → (self::C::T) → void
     return (dynamic y) → dynamic {};
 }
 static method test(self::C<core::String> c) → void {
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.outline.expect
index 743f43f..2ec6364 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.outline.expect
@@ -2,10 +2,10 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
-  method f<U extends core::Object>(self::C::f::U x) → (self::C::T) → void
+  method f<U extends core::Object = dynamic>(self::C::f::U x) → (self::C::T) → void
     ;
 }
 static method test(self::C<core::String> c) → void
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.expect
index 5dc12db..e3ccda9 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends core::Object>(self::C::f::U x) → (self::C::T) → void
+  method f<U extends core::Object = dynamic>(self::C::f::U x) → (self::C::T) → void
     return (self::C::T y) → core::Null {};
 }
 static method test(self::C<core::String> c) → void {
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.transformed.expect
index 5dc12db..e3ccda9 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.transformed.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends core::Object>(self::C::f::U x) → (self::C::T) → void
+  method f<U extends core::Object = dynamic>(self::C::f::U x) → (self::C::T) → void
     return (self::C::T y) → core::Null {};
 }
 static method test(self::C<core::String> c) → void {
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.direct.expect
index 258ba0e..59e7aab 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method test(<T extends core::Object>(T) → T f) → void {
+static method test(<T extends core::Object = dynamic>(T) → T f) → void {
   (core::int) → core::int func;
   func = f.call;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.direct.transformed.expect
index 258ba0e..59e7aab 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method test(<T extends core::Object>(T) → T f) → void {
+static method test(<T extends core::Object = dynamic>(T) → T f) → void {
   (core::int) → core::int func;
   func = f.call;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.outline.expect
index 65e10ba..30f8885 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method test(<T extends core::Object>(T) → T f) → void
+static method test(<T extends core::Object = dynamic>(T) → T f) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.direct.expect
index ac05240..e7c62a1 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends self::A<dynamic>> extends core::Object {
+class B<T extends self::A<dynamic> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class A<T extends core::int> extends core::Object {
+class A<T extends core::int = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.direct.transformed.expect
index ac05240..e7c62a1 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends self::A<dynamic>> extends core::Object {
+class B<T extends self::A<dynamic> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class A<T extends core::int> extends core::Object {
+class A<T extends core::int = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.strong.expect
index 1675d51..57b9777 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends self::A<core::int>> extends core::Object {
+class B<T extends self::A<core::int> = self::A<core::int>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class A<T extends core::int> extends core::Object {
+class A<T extends core::int = core::int> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.strong.transformed.expect
index 1675d51..57b9777 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends self::A<core::int>> extends core::Object {
+class B<T extends self::A<core::int> = self::A<core::int>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class A<T extends core::int> extends core::Object {
+class A<T extends core::int = core::int> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.direct.expect
index a8450dd..38b7a42 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int> extends core::Object {
+class A<T extends core::int = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends self::A<dynamic>> extends core::Object {
+class B<T extends self::A<dynamic> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.direct.transformed.expect
index a8450dd..38b7a42 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int> extends core::Object {
+class A<T extends core::int = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends self::A<dynamic>> extends core::Object {
+class B<T extends self::A<dynamic> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.strong.expect
index c47d4b1..42ff84b 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int> extends core::Object {
+class A<T extends core::int = core::int> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends self::A<core::int>> extends core::Object {
+class B<T extends self::A<core::int> = self::A<core::int>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.strong.transformed.expect
index c47d4b1..42ff84b 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int> extends core::Object {
+class A<T extends core::int = core::int> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends self::A<core::int>> extends core::Object {
+class B<T extends self::A<core::int> = self::A<core::int>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.direct.expect
index d39e0fe..dfb57c4 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends self::A<dynamic>> extends core::Object {
+class B<T extends self::A<dynamic> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.direct.transformed.expect
index d39e0fe..dfb57c4 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends self::A<dynamic>> extends core::Object {
+class B<T extends self::A<dynamic> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.strong.expect
index 1b49427..ad11219 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends self::A<dynamic>> extends core::Object {
+class B<T extends self::A<dynamic> = self::A<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.strong.transformed.expect
index 1b49427..ad11219 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends self::A<dynamic>> extends core::Object {
+class B<T extends self::A<dynamic> = self::A<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.direct.expect
index c31aed4..d78301f 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int> extends core::Object {
+class A<T extends core::int = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.direct.transformed.expect
index c31aed4..d78301f 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int> extends core::Object {
+class A<T extends core::int = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.strong.expect
index 250e9df..006a1e5 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int> extends core::Object {
+class A<T extends core::int = core::int> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.strong.transformed.expect
index 250e9df..006a1e5 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int> extends core::Object {
+class A<T extends core::int = core::int> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.direct.expect
index c31aed4..d78301f 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int> extends core::Object {
+class A<T extends core::int = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.direct.transformed.expect
index c31aed4..d78301f 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int> extends core::Object {
+class A<T extends core::int = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.strong.expect
index 250e9df..006a1e5 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int> extends core::Object {
+class A<T extends core::int = core::int> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.strong.transformed.expect
index 250e9df..006a1e5 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int> extends core::Object {
+class A<T extends core::int = core::int> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.direct.expect
index ab2d9ba..cbe8ecd 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.direct.transformed.expect
index ab2d9ba..cbe8ecd 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.strong.expect
index 8e3e3d3..ab4b6a5 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.strong.transformed.expect
index 8e3e3d3..ab4b6a5 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.direct.expect
index e062f16..83feed9 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.direct.transformed.expect
index e062f16..83feed9 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.strong.expect
index 75d4b70..9efc5a7 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.strong.transformed.expect
index 75d4b70..9efc5a7 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.direct.expect
index 3a30a80..b4bf7c0 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.direct.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
 }
-class B<T extends self::A> extends core::Object {
+class B<T extends self::A = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.direct.transformed.expect
index 3a30a80..b4bf7c0 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.direct.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
 }
-class B<T extends self::A> extends core::Object {
+class B<T extends self::A = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.strong.expect
index 7ac3b90d..e97dd63 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.strong.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
 }
-class B<T extends self::A> extends core::Object {
+class B<T extends self::A = self::A> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.strong.transformed.expect
index 7ac3b90d..e97dd63 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
 }
-class B<T extends self::A> extends core::Object {
+class B<T extends self::A = self::A> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.direct.expect b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.direct.expect
index d80777c..5513c11 100644
--- a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T t;
   constructor •(self::C::T t) → void
     : self::C::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.direct.transformed.expect
index d80777c..5513c11 100644
--- a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T t;
   constructor •(self::C::T t) → void
     : self::C::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.outline.expect b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.outline.expect
index 55cf657..883eda4 100644
--- a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T t;
   constructor •(self::C::T t) → void
     ;
diff --git a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.strong.expect b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.strong.expect
index 55e11e2..68853a4 100644
--- a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T t;
   constructor •(self::C::T t) → void
     : self::C::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.strong.transformed.expect
index 55e11e2..68853a4 100644
--- a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T t;
   constructor •(self::C::T t) → void
     : self::C::t = t, super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.direct.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.direct.expect
index 0d4c4d9..faa9af9 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.direct.expect
@@ -6,10 +6,10 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>() → self::D<self::C::f::T>
+  method f<T extends core::Object = dynamic>() → self::D<self::C::f::T>
     return null;
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.direct.transformed.expect
index 0d4c4d9..faa9af9 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.direct.transformed.expect
@@ -6,10 +6,10 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>() → self::D<self::C::f::T>
+  method f<T extends core::Object = dynamic>() → self::D<self::C::f::T>
     return null;
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.strong.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.strong.expect
index 28b0bd9..100098d 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.strong.expect
@@ -6,10 +6,10 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>() → self::D<self::C::f::T>
+  method f<T extends core::Object = dynamic>() → self::D<self::C::f::T>
     return null;
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.strong.transformed.expect
index 28b0bd9..100098d 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.strong.transformed.expect
@@ -6,10 +6,10 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>() → self::D<self::C::f::T>
+  method f<T extends core::Object = dynamic>() → self::D<self::C::f::T>
     return null;
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.direct.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.direct.expect
index 2409e0e2..9812401 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.direct.expect
@@ -6,10 +6,10 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>() → self::D<self::C::f::T>
+  method f<T extends core::Object = dynamic>() → self::D<self::C::f::T>
     return null;
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.direct.transformed.expect
index 2409e0e2..9812401 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.direct.transformed.expect
@@ -6,10 +6,10 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>() → self::D<self::C::f::T>
+  method f<T extends core::Object = dynamic>() → self::D<self::C::f::T>
     return null;
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.strong.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.strong.expect
index e7701fd..03106b1 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.strong.expect
@@ -6,10 +6,10 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>() → self::D<self::C::f::T>
+  method f<T extends core::Object = dynamic>() → self::D<self::C::f::T>
     return null;
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.strong.transformed.expect
index e7701fd..03106b1 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.strong.transformed.expect
@@ -6,10 +6,10 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>() → self::D<self::C::f::T>
+  method f<T extends core::Object = dynamic>() → self::D<self::C::f::T>
     return null;
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.direct.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.direct.expect
index f986cdf..ed2b11c 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.direct.expect
@@ -6,10 +6,10 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  static method f<T extends core::Object>() → self::D<self::C::f::T>
+  static method f<T extends core::Object = dynamic>() → self::D<self::C::f::T>
     return null;
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.direct.transformed.expect
index f986cdf..ed2b11c 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.direct.transformed.expect
@@ -6,10 +6,10 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  static method f<T extends core::Object>() → self::D<self::C::f::T>
+  static method f<T extends core::Object = dynamic>() → self::D<self::C::f::T>
     return null;
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.strong.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.strong.expect
index 5a6e1b5..62f476b 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.strong.expect
@@ -6,10 +6,10 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  static method f<T extends core::Object>() → self::D<self::C::f::T>
+  static method f<T extends core::Object = dynamic>() → self::D<self::C::f::T>
     return null;
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.strong.transformed.expect
index 5a6e1b5..62f476b 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.strong.transformed.expect
@@ -6,10 +6,10 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  static method f<T extends core::Object>() → self::D<self::C::f::T>
+  static method f<T extends core::Object = dynamic>() → self::D<self::C::f::T>
     return null;
 }
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.direct.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.direct.expect
index 9b0f603..eb7c958 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.direct.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 static field dynamic g = self::f<core::int>();
-static method f<T extends core::Object>() → self::D<self::f::T>
+static method f<T extends core::Object = dynamic>() → self::D<self::f::T>
   return null;
 static method main() → dynamic {
   self::g;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.direct.transformed.expect
index 9b0f603..eb7c958 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.direct.transformed.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 static field dynamic g = self::f<core::int>();
-static method f<T extends core::Object>() → self::D<self::f::T>
+static method f<T extends core::Object = dynamic>() → self::D<self::f::T>
   return null;
 static method main() → dynamic {
   self::g;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.strong.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.strong.expect
index 711c11f..ede5169 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.strong.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 static field self::D<core::int> g = self::f<core::int>();
-static method f<T extends core::Object>() → self::D<self::f::T>
+static method f<T extends core::Object = dynamic>() → self::D<self::f::T>
   return null;
 static method main() → dynamic {
   self::g;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.strong.transformed.expect
index 711c11f..ede5169 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.strong.transformed.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 static field self::D<core::int> g = self::f<core::int>();
-static method f<T extends core::Object>() → self::D<self::f::T>
+static method f<T extends core::Object = dynamic>() → self::D<self::f::T>
   return null;
 static method main() → dynamic {
   self::g;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.direct.expect
index 5bb0107b..b56f103 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<X extends core::Object, Y extends core::String> extends self::I<self::M0::X> {
+class M0<X extends core::Object = dynamic, Y extends core::String = dynamic> extends self::I<self::M0::X> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.direct.transformed.expect
index babd076..985fb07 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<X extends core::Object, Y extends core::String> extends self::I<self::M0::X> {
+class M0<X extends core::Object = dynamic, Y extends core::String = dynamic> extends self::I<self::M0::X> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.outline.expect
index d2d243e..43c1de6 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.outline.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class M0<X extends core::Object, Y extends core::String> extends self::I<self::M0::X> {
+class M0<X extends core::Object = dynamic, Y extends core::String = dynamic> extends self::I<self::M0::X> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.strong.expect
index c88b202..46148e92 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<X extends core::Object, Y extends core::String> extends self::I<self::M0::X> {
+class M0<X extends core::Object = dynamic, Y extends core::String = core::String> extends self::I<self::M0::X> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.strong.transformed.expect
index 3dfcef8..149f1f7 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<X extends core::Object, Y extends core::String> extends self::I<self::M0::X> {
+class M0<X extends core::Object = dynamic, Y extends core::String = core::String> extends self::I<self::M0::X> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.direct.expect
index 99c0ac1..afaa901 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<X extends core::Object, Y extends self::M0::X> extends self::I<self::M0::X> {
+class M0<X extends core::Object = dynamic, Y extends self::M0::X = dynamic> extends self::I<self::M0::X> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.direct.transformed.expect
index 88b88c5..76f85c6 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<X extends core::Object, Y extends self::M0::X> extends self::I<self::M0::X> {
+class M0<X extends core::Object = dynamic, Y extends self::M0::X = dynamic> extends self::I<self::M0::X> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.outline.expect
index b32af06..715d575 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.outline.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class M0<X extends core::Object, Y extends self::M0::X> extends self::I<self::M0::X> {
+class M0<X extends core::Object = dynamic, Y extends self::M0::X = dynamic> extends self::I<self::M0::X> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.strong.expect
index fc43a81..4df303d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<X extends core::Object, Y extends self::M0::X> extends self::I<self::M0::X> {
+class M0<X extends core::Object = dynamic, Y extends self::M0::X = dynamic> extends self::I<self::M0::X> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.strong.transformed.expect
index db58674..49745bb 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<X extends core::Object, Y extends self::M0::X> extends self::I<self::M0::X> {
+class M0<X extends core::Object = dynamic, Y extends self::M0::X = dynamic> extends self::I<self::M0::X> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.direct.expect
index 1bf2b7f..8d308b9 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<X extends core::Object, Y extends core::Comparable<self::M0::Y>> extends self::I<self::M0::X> {
+class M0<X extends core::Object = dynamic, Y extends core::Comparable<self::M0::Y> = dynamic> extends self::I<self::M0::X> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.direct.transformed.expect
index af781d1..4b68fa6 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<X extends core::Object, Y extends core::Comparable<self::M0::Y>> extends self::I<self::M0::X> {
+class M0<X extends core::Object = dynamic, Y extends core::Comparable<self::M0::Y> = dynamic> extends self::I<self::M0::X> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.outline.expect
index 5a8614d..df1859b 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.outline.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class M0<X extends core::Object, Y extends core::Comparable<self::M0::Y>> extends self::I<self::M0::X> {
+class M0<X extends core::Object = dynamic, Y extends core::Comparable<self::M0::Y> = dynamic> extends self::I<self::M0::X> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.expect
index 261aee6..661c0f5 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<X extends core::Object, Y extends core::Comparable<self::M0::Y>> extends self::I<self::M0::X> {
+class M0<X extends core::Object = dynamic, Y extends core::Comparable<self::M0::Y> = core::Comparable<dynamic>> extends self::I<self::M0::X> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.transformed.expect
index c7f6535..b13c5c1 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<X extends core::Object, Y extends core::Comparable<self::M0::Y>> extends self::I<self::M0::X> {
+class M0<X extends core::Object = dynamic, Y extends core::Comparable<self::M0::Y> = core::Comparable<dynamic>> extends self::I<self::M0::X> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.direct.expect
index 732cded..b84a7e5e 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.direct.expect
@@ -2,19 +2,19 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class J<X extends core::Object> extends core::Object {
+class J<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-abstract class _M0&I&J<X extends core::Object, Y extends core::Object> = self::I<self::_M0&I&J::X> with self::J<self::_M0&I&J::Y> {
+abstract class _M0&I&J<X extends core::Object = dynamic, Y extends core::Object = dynamic> = self::I<self::_M0&I&J::X> with self::J<self::_M0&I&J::Y> {
 }
-class M0<X extends core::Object, Y extends core::Object> extends self::_M0&I&J<self::M0::X, self::M0::Y> {
+class M0<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends self::_M0&I&J<self::M0::X, self::M0::Y> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.direct.transformed.expect
index 6bd4312..2feb2bd 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.direct.transformed.expect
@@ -2,22 +2,22 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class J<X extends core::Object> extends core::Object {
+class J<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-abstract class _M0&I&J<X extends core::Object, Y extends core::Object> extends self::I<self::_M0&I&J::X> implements self::J<self::_M0&I&J::Y> {
+abstract class _M0&I&J<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends self::I<self::_M0&I&J::X> implements self::J<self::_M0&I&J::Y> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M0<X extends core::Object, Y extends core::Object> extends self::_M0&I&J<self::M0::X, self::M0::Y> {
+class M0<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends self::_M0&I&J<self::M0::X, self::M0::Y> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.outline.expect
index 5d417f7..6ea16975 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.outline.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class J<X extends core::Object> extends core::Object {
+class J<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-abstract class _M0&I&J<X extends core::Object, Y extends core::Object> = self::I<self::_M0&I&J::X> with self::J<self::_M0&I&J::Y> {
+abstract class _M0&I&J<X extends core::Object = dynamic, Y extends core::Object = dynamic> = self::I<self::_M0&I&J::X> with self::J<self::_M0&I&J::Y> {
 }
-class M0<X extends core::Object, Y extends core::Object> extends self::_M0&I&J<self::M0::X, self::M0::Y> {
+class M0<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends self::_M0&I&J<self::M0::X, self::M0::Y> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.strong.expect
index 92d614a..d395781 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.strong.expect
@@ -2,19 +2,19 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class J<X extends core::Object> extends core::Object {
+class J<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-abstract class _M0&I&J<X extends core::Object, Y extends core::Object> = self::I<self::_M0&I&J::X> with self::J<self::_M0&I&J::Y> {
+abstract class _M0&I&J<X extends core::Object = dynamic, Y extends core::Object = dynamic> = self::I<self::_M0&I&J::X> with self::J<self::_M0&I&J::Y> {
 }
-class M0<X extends core::Object, Y extends core::Object> extends self::_M0&I&J<self::M0::X, self::M0::Y> {
+class M0<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends self::_M0&I&J<self::M0::X, self::M0::Y> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.strong.transformed.expect
index b0a644f..9173943 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.strong.transformed.expect
@@ -2,22 +2,22 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class J<X extends core::Object> extends core::Object {
+class J<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-abstract class _M0&I&J<X extends core::Object, Y extends core::Object> extends self::I<self::_M0&I&J::X> implements self::J<self::_M0&I&J::Y> {
+abstract class _M0&I&J<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends self::I<self::_M0&I&J::X> implements self::J<self::_M0&I&J::Y> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M0<X extends core::Object, Y extends core::Object> extends self::_M0&I&J<self::M0::X, self::M0::Y> {
+class M0<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends self::_M0&I&J<self::M0::X, self::M0::Y> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.direct.expect
index ce175b8..5328a92 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.direct.expect
@@ -2,22 +2,22 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends self::I<core::List<self::M0::T>> {
+class M0<T extends core::Object = dynamic> extends self::I<core::List<self::M0::T>> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object> extends self::I<core::List<self::M1::T>> {
+class M1<T extends core::Object = dynamic> extends self::I<core::List<self::M1::T>> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M2<T extends core::Object> extends self::M1<core::Map<self::M2::T, self::M2::T>> {
+class M2<T extends core::Object = dynamic> extends self::M1<core::Map<self::M2::T, self::M2::T>> {
   synthetic constructor •() → void
     : super self::M1::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.direct.transformed.expect
index 47d99df..bcf0add 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.direct.transformed.expect
@@ -2,22 +2,22 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends self::I<core::List<self::M0::T>> {
+class M0<T extends core::Object = dynamic> extends self::I<core::List<self::M0::T>> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object> extends self::I<core::List<self::M1::T>> {
+class M1<T extends core::Object = dynamic> extends self::I<core::List<self::M1::T>> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M2<T extends core::Object> extends self::M1<core::Map<self::M2::T, self::M2::T>> {
+class M2<T extends core::Object = dynamic> extends self::M1<core::Map<self::M2::T, self::M2::T>> {
   synthetic constructor •() → void
     : super self::M1::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.outline.expect
index a626b7e..e08bdb7 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.outline.expect
@@ -2,19 +2,19 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class M0<T extends core::Object> extends self::I<core::List<self::M0::T>> {
+class M0<T extends core::Object = dynamic> extends self::I<core::List<self::M0::T>> {
   synthetic constructor •() → void
     ;
 }
-class M1<T extends core::Object> extends self::I<core::List<self::M1::T>> {
+class M1<T extends core::Object = dynamic> extends self::I<core::List<self::M1::T>> {
   synthetic constructor •() → void
     ;
 }
-class M2<T extends core::Object> extends self::M1<core::Map<self::M2::T, self::M2::T>> {
+class M2<T extends core::Object = dynamic> extends self::M1<core::Map<self::M2::T, self::M2::T>> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.strong.expect
index bc3f07d..83ed933 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.strong.expect
@@ -2,22 +2,22 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends self::I<core::List<self::M0::T>> {
+class M0<T extends core::Object = dynamic> extends self::I<core::List<self::M0::T>> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object> extends self::I<core::List<self::M1::T>> {
+class M1<T extends core::Object = dynamic> extends self::I<core::List<self::M1::T>> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M2<T extends core::Object> extends self::M1<core::Map<self::M2::T, self::M2::T>> {
+class M2<T extends core::Object = dynamic> extends self::M1<core::Map<self::M2::T, self::M2::T>> {
   synthetic constructor •() → void
     : super self::M1::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.strong.transformed.expect
index bab9455..274d765 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.strong.transformed.expect
@@ -2,22 +2,22 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends self::I<core::List<self::M0::T>> {
+class M0<T extends core::Object = dynamic> extends self::I<core::List<self::M0::T>> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object> extends self::I<core::List<self::M1::T>> {
+class M1<T extends core::Object = dynamic> extends self::I<core::List<self::M1::T>> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M2<T extends core::Object> extends self::M1<core::Map<self::M2::T, self::M2::T>> {
+class M2<T extends core::Object = dynamic> extends self::M1<core::Map<self::M2::T, self::M2::T>> {
   synthetic constructor •() → void
     : super self::M1::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.direct.expect
index 58630ac..99b8e77 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.direct.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends self::I<self::M0::T> {
+class M0<T extends core::Object = dynamic> extends self::I<self::M0::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object> extends self::I<self::M1::T> {
+class M1<T extends core::Object = dynamic> extends self::I<self::M1::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.direct.transformed.expect
index 94e9c02..f099c87 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.direct.transformed.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends self::I<self::M0::T> {
+class M0<T extends core::Object = dynamic> extends self::I<self::M0::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object> extends self::I<self::M1::T> {
+class M1<T extends core::Object = dynamic> extends self::I<self::M1::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.outline.expect
index e7482bf..faaabfd 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.outline.expect
@@ -2,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class M0<T extends core::Object> extends self::I<self::M0::T> {
+class M0<T extends core::Object = dynamic> extends self::I<self::M0::T> {
   synthetic constructor •() → void
     ;
 }
-class M1<T extends core::Object> extends self::I<self::M1::T> {
+class M1<T extends core::Object = dynamic> extends self::I<self::M1::T> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.strong.expect
index a21a809..2c2aa5c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.strong.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends self::I<self::M0::T> {
+class M0<T extends core::Object = dynamic> extends self::I<self::M0::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object> extends self::I<self::M1::T> {
+class M1<T extends core::Object = dynamic> extends self::I<self::M1::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.strong.transformed.expect
index f1c52e6..701b84c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.strong.transformed.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends self::I<self::M0::T> {
+class M0<T extends core::Object = dynamic> extends self::I<self::M0::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object> extends self::I<self::M1::T> {
+class M1<T extends core::Object = dynamic> extends self::I<self::M1::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.direct.expect
index 848a79e..708e099 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.direct.expect
@@ -2,22 +2,22 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends self::I<self::M0::T> {
+class M0<T extends core::Object = dynamic> extends self::I<self::M0::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object> extends self::I<self::M1::T> {
+class M1<T extends core::Object = dynamic> extends self::I<self::M1::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M2<T extends core::Object> extends self::I<self::M2::T> {
+class M2<T extends core::Object = dynamic> extends self::I<self::M2::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.direct.transformed.expect
index 3988528..07fd39a 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.direct.transformed.expect
@@ -2,22 +2,22 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends self::I<self::M0::T> {
+class M0<T extends core::Object = dynamic> extends self::I<self::M0::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object> extends self::I<self::M1::T> {
+class M1<T extends core::Object = dynamic> extends self::I<self::M1::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M2<T extends core::Object> extends self::I<self::M2::T> {
+class M2<T extends core::Object = dynamic> extends self::I<self::M2::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.outline.expect
index acc4658..d20ff99 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.outline.expect
@@ -2,19 +2,19 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class M0<T extends core::Object> extends self::I<self::M0::T> {
+class M0<T extends core::Object = dynamic> extends self::I<self::M0::T> {
   synthetic constructor •() → void
     ;
 }
-class M1<T extends core::Object> extends self::I<self::M1::T> {
+class M1<T extends core::Object = dynamic> extends self::I<self::M1::T> {
   synthetic constructor •() → void
     ;
 }
-class M2<T extends core::Object> extends self::I<self::M2::T> {
+class M2<T extends core::Object = dynamic> extends self::I<self::M2::T> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.strong.expect
index 036d56c..cea7021 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.strong.expect
@@ -2,22 +2,22 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends self::I<self::M0::T> {
+class M0<T extends core::Object = dynamic> extends self::I<self::M0::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object> extends self::I<self::M1::T> {
+class M1<T extends core::Object = dynamic> extends self::I<self::M1::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M2<T extends core::Object> extends self::I<self::M2::T> {
+class M2<T extends core::Object = dynamic> extends self::I<self::M2::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.strong.transformed.expect
index 42ec419..d8aadbfc 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.strong.transformed.expect
@@ -2,22 +2,22 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends self::I<self::M0::T> {
+class M0<T extends core::Object = dynamic> extends self::I<self::M0::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object> extends self::I<self::M1::T> {
+class M1<T extends core::Object = dynamic> extends self::I<self::M1::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
 }
-class M2<T extends core::Object> extends self::I<self::M2::T> {
+class M2<T extends core::Object = dynamic> extends self::I<self::M2::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect
index a9749fe..cf9d1f4 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends core::Object implements self::I<self::M0::T> {
+class M0<T extends core::Object = dynamic> extends core::Object implements self::I<self::M0::T> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M1<T extends core::Object> extends self::I<self::M1::T> {
+class M1<T extends core::Object = dynamic> extends self::I<self::M1::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.transformed.expect
index e737000..53f5baf 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.transformed.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends core::Object implements self::I<self::M0::T> {
+class M0<T extends core::Object = dynamic> extends core::Object implements self::I<self::M0::T> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M1<T extends core::Object> extends self::I<self::M1::T> {
+class M1<T extends core::Object = dynamic> extends self::I<self::M1::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.outline.expect
index f83992c..79c34df 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.outline.expect
@@ -2,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class M0<T extends core::Object> extends core::Object implements self::I<self::M0::T> {
+class M0<T extends core::Object = dynamic> extends core::Object implements self::I<self::M0::T> {
   synthetic constructor •() → void
     ;
 }
-class M1<T extends core::Object> extends self::I<self::M1::T> {
+class M1<T extends core::Object = dynamic> extends self::I<self::M1::T> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect
index a9749fe..cf9d1f4 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends core::Object implements self::I<self::M0::T> {
+class M0<T extends core::Object = dynamic> extends core::Object implements self::I<self::M0::T> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M1<T extends core::Object> extends self::I<self::M1::T> {
+class M1<T extends core::Object = dynamic> extends self::I<self::M1::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect
index b341add..8d072fe 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends core::Object implements self::I<self::M0::T> {
+class M0<T extends core::Object = dynamic> extends core::Object implements self::I<self::M0::T> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M1<T extends core::Object> extends self::I<self::M1::T> {
+class M1<T extends core::Object = dynamic> extends self::I<self::M1::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.transformed.expect
index 2b4d638..d6e5c6c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.transformed.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends core::Object implements self::I<self::M0::T> {
+class M0<T extends core::Object = dynamic> extends core::Object implements self::I<self::M0::T> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M1<T extends core::Object> extends self::I<self::M1::T> {
+class M1<T extends core::Object = dynamic> extends self::I<self::M1::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.outline.expect
index 46f1868..9c4a906 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.outline.expect
@@ -2,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class M0<T extends core::Object> extends core::Object implements self::I<self::M0::T> {
+class M0<T extends core::Object = dynamic> extends core::Object implements self::I<self::M0::T> {
   synthetic constructor •() → void
     ;
 }
-class M1<T extends core::Object> extends self::I<self::M1::T> {
+class M1<T extends core::Object = dynamic> extends self::I<self::M1::T> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect
index b341add..8d072fe 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends core::Object implements self::I<self::M0::T> {
+class M0<T extends core::Object = dynamic> extends core::Object implements self::I<self::M0::T> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M1<T extends core::Object> extends self::I<self::M1::T> {
+class M1<T extends core::Object = dynamic> extends self::I<self::M1::T> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect
index f15969d..7268b70 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object, Y extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends core::Object implements self::I<self::M0::T, core::int> {
+class M0<T extends core::Object = dynamic> extends core::Object implements self::I<self::M0::T, core::int> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M1<T extends core::Object> extends core::Object implements self::I<core::String, self::M1::T> {
+class M1<T extends core::Object = dynamic> extends core::Object implements self::I<core::String, self::M1::T> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.transformed.expect
index 1f32528..c6ca47c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.transformed.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object, Y extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends core::Object implements self::I<self::M0::T, core::int> {
+class M0<T extends core::Object = dynamic> extends core::Object implements self::I<self::M0::T, core::int> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M1<T extends core::Object> extends core::Object implements self::I<core::String, self::M1::T> {
+class M1<T extends core::Object = dynamic> extends core::Object implements self::I<core::String, self::M1::T> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.outline.expect
index 4e5c65c..558e05a 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.outline.expect
@@ -2,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object, Y extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class M0<T extends core::Object> extends core::Object implements self::I<self::M0::T, core::int> {
+class M0<T extends core::Object = dynamic> extends core::Object implements self::I<self::M0::T, core::int> {
   synthetic constructor •() → void
     ;
 }
-class M1<T extends core::Object> extends core::Object implements self::I<core::String, self::M1::T> {
+class M1<T extends core::Object = dynamic> extends core::Object implements self::I<core::String, self::M1::T> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect
index f15969d..7268b70 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object, Y extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends core::Object implements self::I<self::M0::T, core::int> {
+class M0<T extends core::Object = dynamic> extends core::Object implements self::I<self::M0::T, core::int> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M1<T extends core::Object> extends core::Object implements self::I<core::String, self::M1::T> {
+class M1<T extends core::Object = dynamic> extends core::Object implements self::I<core::String, self::M1::T> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect
index 1cf79e6..9b8dd77 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object, Y extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends core::Object implements self::I<self::M0::T, core::List<self::M0::T>> {
+class M0<T extends core::Object = dynamic> extends core::Object implements self::I<self::M0::T, core::List<self::M0::T>> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M1<T extends core::Object> extends core::Object implements self::I<core::List<self::M1::T>, self::M1::T> {
+class M1<T extends core::Object = dynamic> extends core::Object implements self::I<core::List<self::M1::T>, self::M1::T> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.transformed.expect
index 3819847..cc0d501 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.transformed.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object, Y extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends core::Object implements self::I<self::M0::T, core::List<self::M0::T>> {
+class M0<T extends core::Object = dynamic> extends core::Object implements self::I<self::M0::T, core::List<self::M0::T>> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M1<T extends core::Object> extends core::Object implements self::I<core::List<self::M1::T>, self::M1::T> {
+class M1<T extends core::Object = dynamic> extends core::Object implements self::I<core::List<self::M1::T>, self::M1::T> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.outline.expect
index 82b7624..0486b4b 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.outline.expect
@@ -2,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object, Y extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class M0<T extends core::Object> extends core::Object implements self::I<self::M0::T, core::List<self::M0::T>> {
+class M0<T extends core::Object = dynamic> extends core::Object implements self::I<self::M0::T, core::List<self::M0::T>> {
   synthetic constructor •() → void
     ;
 }
-class M1<T extends core::Object> extends core::Object implements self::I<core::List<self::M1::T>, self::M1::T> {
+class M1<T extends core::Object = dynamic> extends core::Object implements self::I<core::List<self::M1::T>, self::M1::T> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect
index 1cf79e6..9b8dd77 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object, Y extends core::Object> extends core::Object {
+class I<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M0<T extends core::Object> extends core::Object implements self::I<self::M0::T, core::List<self::M0::T>> {
+class M0<T extends core::Object = dynamic> extends core::Object implements self::I<self::M0::T, core::List<self::M0::T>> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class M1<T extends core::Object> extends core::Object implements self::I<core::List<self::M1::T>, self::M1::T> {
+class M1<T extends core::Object = dynamic> extends core::Object implements self::I<core::List<self::M1::T>, self::M1::T> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/non_const_invocation.dart.direct.expect b/pkg/front_end/testcases/inference/non_const_invocation.dart.direct.expect
index a535f30..3526479 100644
--- a/pkg/front_end/testcases/inference/non_const_invocation.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/non_const_invocation.dart.direct.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<U extends core::Object, V extends core::Object> = (U) → V;
-class Foo<T extends core::Object> extends core::Object {
+typedef F<U extends core::Object = dynamic, V extends core::Object = dynamic> = (U) → V;
+class Foo<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -26,7 +26,7 @@
   get v9() → core::Map<self::Foo::T, (self::Foo::T) → self::Foo::T>
     return <dynamic, dynamic>{};
 }
-class Bar<T extends core::Object> extends core::Object {
+class Bar<T extends core::Object = dynamic> extends core::Object {
   const constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/non_const_invocation.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/non_const_invocation.dart.direct.transformed.expect
index a535f30..3526479 100644
--- a/pkg/front_end/testcases/inference/non_const_invocation.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/non_const_invocation.dart.direct.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<U extends core::Object, V extends core::Object> = (U) → V;
-class Foo<T extends core::Object> extends core::Object {
+typedef F<U extends core::Object = dynamic, V extends core::Object = dynamic> = (U) → V;
+class Foo<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -26,7 +26,7 @@
   get v9() → core::Map<self::Foo::T, (self::Foo::T) → self::Foo::T>
     return <dynamic, dynamic>{};
 }
-class Bar<T extends core::Object> extends core::Object {
+class Bar<T extends core::Object = dynamic> extends core::Object {
   const constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/non_const_invocation.dart.outline.expect b/pkg/front_end/testcases/inference/non_const_invocation.dart.outline.expect
index 393359f..96fab41 100644
--- a/pkg/front_end/testcases/inference/non_const_invocation.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/non_const_invocation.dart.outline.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<U extends core::Object, V extends core::Object> = (U) → V;
-class Foo<T extends core::Object> extends core::Object {
+typedef F<U extends core::Object = dynamic, V extends core::Object = dynamic> = (U) → V;
+class Foo<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   get v1() → self::Bar<self::Foo::T>
@@ -25,7 +25,7 @@
   get v9() → core::Map<self::Foo::T, (self::Foo::T) → self::Foo::T>
     ;
 }
-class Bar<T extends core::Object> extends core::Object {
+class Bar<T extends core::Object = dynamic> extends core::Object {
   const constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/non_const_invocation.dart.strong.expect b/pkg/front_end/testcases/inference/non_const_invocation.dart.strong.expect
index 2175864..b943f9f 100644
--- a/pkg/front_end/testcases/inference/non_const_invocation.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/non_const_invocation.dart.strong.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<U extends core::Object, V extends core::Object> = (U) → V;
-class Foo<T extends core::Object> extends core::Object {
+typedef F<U extends core::Object = dynamic, V extends core::Object = dynamic> = (U) → V;
+class Foo<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -26,7 +26,7 @@
   get v9() → core::Map<self::Foo::T, (self::Foo::T) → self::Foo::T>
     return <self::Foo::T, (self::Foo::T) → self::Foo::T>{};
 }
-class Bar<T extends core::Object> extends core::Object {
+class Bar<T extends core::Object = dynamic> extends core::Object {
   const constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/non_const_invocation.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/non_const_invocation.dart.strong.transformed.expect
index 2175864..b943f9f 100644
--- a/pkg/front_end/testcases/inference/non_const_invocation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/non_const_invocation.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<U extends core::Object, V extends core::Object> = (U) → V;
-class Foo<T extends core::Object> extends core::Object {
+typedef F<U extends core::Object = dynamic, V extends core::Object = dynamic> = (U) → V;
+class Foo<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -26,7 +26,7 @@
   get v9() → core::Map<self::Foo::T, (self::Foo::T) → self::Foo::T>
     return <self::Foo::T, (self::Foo::T) → self::Foo::T>{};
 }
-class Bar<T extends core::Object> extends core::Object {
+class Bar<T extends core::Object = dynamic> extends core::Object {
   const constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.direct.expect b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.direct.expect
index e517d09..b8a8312 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor optional(([self::C::T]) → void func) → void
     : super core::Object::•() {}
   constructor named(({x: self::C::T}) → void func) → void
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.direct.transformed.expect
index e517d09..b8a8312 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor optional(([self::C::T]) → void func) → void
     : super core::Object::•() {}
   constructor named(({x: self::C::T}) → void func) → void
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.outline.expect b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.outline.expect
index d3b9d37..08422b2 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor optional(([self::C::T]) → void func) → void
     ;
   constructor named(({x: self::C::T}) → void func) → void
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.strong.expect b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.strong.expect
index c8d5b63..8ac8dc0 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor optional(([self::C::T]) → void func) → void
     : super core::Object::•() {}
   constructor named(({x: self::C::T}) → void func) → void
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.strong.transformed.expect
index c8d5b63..8ac8dc0 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor optional(([self::C::T]) → void func) → void
     : super core::Object::•() {}
   constructor named(({x: self::C::T}) → void func) → void
diff --git a/pkg/front_end/testcases/inference/promote_bounds.dart.direct.expect b/pkg/front_end/testcases/inference/promote_bounds.dart.direct.expect
index e939b9e..793b217 100644
--- a/pkg/front_end/testcases/inference/promote_bounds.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/promote_bounds.dart.direct.expect
@@ -14,7 +14,7 @@
     ;
   abstract method bar() → void;
 }
-static method f<T extends self::B>(self::f::T a) → void {
+static method f<T extends self::B = dynamic>(self::f::T a) → void {
   if(a is core::String) {
     a.foo();
   }
diff --git a/pkg/front_end/testcases/inference/promote_bounds.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/promote_bounds.dart.direct.transformed.expect
index e939b9e..793b217 100644
--- a/pkg/front_end/testcases/inference/promote_bounds.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/promote_bounds.dart.direct.transformed.expect
@@ -14,7 +14,7 @@
     ;
   abstract method bar() → void;
 }
-static method f<T extends self::B>(self::f::T a) → void {
+static method f<T extends self::B = dynamic>(self::f::T a) → void {
   if(a is core::String) {
     a.foo();
   }
diff --git a/pkg/front_end/testcases/inference/promote_bounds.dart.outline.expect b/pkg/front_end/testcases/inference/promote_bounds.dart.outline.expect
index 53eed9a..040b762 100644
--- a/pkg/front_end/testcases/inference/promote_bounds.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/promote_bounds.dart.outline.expect
@@ -12,7 +12,7 @@
     ;
   abstract method bar() → void;
 }
-static method f<T extends self::B>(self::f::T a) → void
+static method f<T extends self::B = dynamic>(self::f::T a) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/promote_bounds.dart.strong.expect b/pkg/front_end/testcases/inference/promote_bounds.dart.strong.expect
index 56d7592..a25cdbd 100644
--- a/pkg/front_end/testcases/inference/promote_bounds.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/promote_bounds.dart.strong.expect
@@ -14,7 +14,7 @@
     ;
   abstract method bar() → void;
 }
-static method f<T extends self::B>(self::f::T a) → void {
+static method f<T extends self::B = dynamic>(self::f::T a) → void {
   if(a is core::String) {
     a.{self::B::foo}();
   }
diff --git a/pkg/front_end/testcases/inference/promote_bounds.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/promote_bounds.dart.strong.transformed.expect
index 56d7592..a25cdbd 100644
--- a/pkg/front_end/testcases/inference/promote_bounds.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/promote_bounds.dart.strong.transformed.expect
@@ -14,7 +14,7 @@
     ;
   abstract method bar() → void;
 }
-static method f<T extends self::B>(self::f::T a) → void {
+static method f<T extends self::B = dynamic>(self::f::T a) → void {
   if(a is core::String) {
     a.{self::B::foo}();
   }
diff --git a/pkg/front_end/testcases/inference/property_set.dart.direct.expect b/pkg/front_end/testcases/inference/property_set.dart.direct.expect
index c247031..f50e2b3 100644
--- a/pkg/front_end/testcases/inference/property_set.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/property_set.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   field core::List<self::A::T> x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/property_set.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/property_set.dart.direct.transformed.expect
index c247031..f50e2b3 100644
--- a/pkg/front_end/testcases/inference/property_set.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/property_set.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   field core::List<self::A::T> x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/property_set.dart.outline.expect b/pkg/front_end/testcases/inference/property_set.dart.outline.expect
index e693bd9..c3e10a3 100644
--- a/pkg/front_end/testcases/inference/property_set.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/property_set.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   field core::List<self::A::T> x;
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/inference/property_set.dart.strong.expect b/pkg/front_end/testcases/inference/property_set.dart.strong.expect
index 699d136..97ca7fe 100644
--- a/pkg/front_end/testcases/inference/property_set.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/property_set.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field core::List<self::A::T> x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/property_set.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/property_set.dart.strong.transformed.expect
index 699d136..97ca7fe 100644
--- a/pkg/front_end/testcases/inference/property_set.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/property_set.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field core::List<self::A::T> x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/recursive_generic_function.dart.direct.expect b/pkg/front_end/testcases/inference/recursive_generic_function.dart.direct.expect
index 4af9ac5..df0ef92 100644
--- a/pkg/front_end/testcases/inference/recursive_generic_function.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/recursive_generic_function.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method _mergeSort<T extends core::Object>((self::_mergeSort::T) → self::_mergeSort::T list, (self::_mergeSort::T, self::_mergeSort::T) → core::int compare, (self::_mergeSort::T) → self::_mergeSort::T target) → void {
+static method _mergeSort<T extends core::Object = dynamic>((self::_mergeSort::T) → self::_mergeSort::T list, (self::_mergeSort::T, self::_mergeSort::T) → core::int compare, (self::_mergeSort::T) → self::_mergeSort::T target) → void {
   self::_mergeSort<dynamic>(list, compare, target);
   self::_mergeSort<dynamic>(list, compare, list);
   self::_mergeSort<dynamic>(target, compare, target);
diff --git a/pkg/front_end/testcases/inference/recursive_generic_function.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/recursive_generic_function.dart.direct.transformed.expect
index 4af9ac5..df0ef92 100644
--- a/pkg/front_end/testcases/inference/recursive_generic_function.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/recursive_generic_function.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method _mergeSort<T extends core::Object>((self::_mergeSort::T) → self::_mergeSort::T list, (self::_mergeSort::T, self::_mergeSort::T) → core::int compare, (self::_mergeSort::T) → self::_mergeSort::T target) → void {
+static method _mergeSort<T extends core::Object = dynamic>((self::_mergeSort::T) → self::_mergeSort::T list, (self::_mergeSort::T, self::_mergeSort::T) → core::int compare, (self::_mergeSort::T) → self::_mergeSort::T target) → void {
   self::_mergeSort<dynamic>(list, compare, target);
   self::_mergeSort<dynamic>(list, compare, list);
   self::_mergeSort<dynamic>(target, compare, target);
diff --git a/pkg/front_end/testcases/inference/recursive_generic_function.dart.outline.expect b/pkg/front_end/testcases/inference/recursive_generic_function.dart.outline.expect
index 31cc717..3b14cff 100644
--- a/pkg/front_end/testcases/inference/recursive_generic_function.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/recursive_generic_function.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method _mergeSort<T extends core::Object>((self::_mergeSort::T) → self::_mergeSort::T list, (self::_mergeSort::T, self::_mergeSort::T) → core::int compare, (self::_mergeSort::T) → self::_mergeSort::T target) → void
+static method _mergeSort<T extends core::Object = dynamic>((self::_mergeSort::T) → self::_mergeSort::T list, (self::_mergeSort::T, self::_mergeSort::T) → core::int compare, (self::_mergeSort::T) → self::_mergeSort::T target) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/recursive_generic_function.dart.strong.expect b/pkg/front_end/testcases/inference/recursive_generic_function.dart.strong.expect
index ab23a10..60a3552 100644
--- a/pkg/front_end/testcases/inference/recursive_generic_function.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/recursive_generic_function.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method _mergeSort<T extends core::Object>((self::_mergeSort::T) → self::_mergeSort::T list, (self::_mergeSort::T, self::_mergeSort::T) → core::int compare, (self::_mergeSort::T) → self::_mergeSort::T target) → void {
+static method _mergeSort<T extends core::Object = dynamic>((self::_mergeSort::T) → self::_mergeSort::T list, (self::_mergeSort::T, self::_mergeSort::T) → core::int compare, (self::_mergeSort::T) → self::_mergeSort::T target) → void {
   self::_mergeSort<self::_mergeSort::T>(list, compare, target);
   self::_mergeSort<self::_mergeSort::T>(list, compare, list);
   self::_mergeSort<self::_mergeSort::T>(target, compare, target);
diff --git a/pkg/front_end/testcases/inference/recursive_generic_function.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/recursive_generic_function.dart.strong.transformed.expect
index ab23a10..60a3552 100644
--- a/pkg/front_end/testcases/inference/recursive_generic_function.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/recursive_generic_function.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method _mergeSort<T extends core::Object>((self::_mergeSort::T) → self::_mergeSort::T list, (self::_mergeSort::T, self::_mergeSort::T) → core::int compare, (self::_mergeSort::T) → self::_mergeSort::T target) → void {
+static method _mergeSort<T extends core::Object = dynamic>((self::_mergeSort::T) → self::_mergeSort::T list, (self::_mergeSort::T, self::_mergeSort::T) → core::int compare, (self::_mergeSort::T) → self::_mergeSort::T target) → void {
   self::_mergeSort<self::_mergeSort::T>(list, compare, target);
   self::_mergeSort<self::_mergeSort::T>(list, compare, list);
   self::_mergeSort<self::_mergeSort::T>(target, compare, target);
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.direct.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.direct.expect
index 2dcf59c..06e16af 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = dynamic> extends core::Object {
   field self::C::T a = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.direct.transformed.expect
index 2dcf59c..06e16af 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = dynamic> extends core::Object {
   field self::C::T a = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.strong.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.strong.expect
index 7a020fb..88e493b 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = core::num> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T a = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.strong.transformed.expect
index 7a020fb..88e493b 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = core::num> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T a = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.direct.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.direct.expect
index 33580fd..4b188010 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = dynamic> extends core::Object {
   field self::C::T a = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.direct.transformed.expect
index 33580fd..4b188010 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = dynamic> extends core::Object {
   field self::C::T a = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.strong.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.strong.expect
index 15431c7..97ae897 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = core::num> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T a = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.strong.transformed.expect
index 15431c7..97ae897 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = core::num> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T a = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.direct.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.direct.expect
index a4422e2..fbd611f 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = dynamic> extends core::Object {
   field self::C::T a = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.direct.transformed.expect
index a4422e2..fbd611f 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = dynamic> extends core::Object {
   field self::C::T a = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.strong.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.strong.expect
index 6410fb3..a33fa5e 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = core::num> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T a = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.strong.transformed.expect
index 6410fb3..a33fa5e 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num> extends core::Object {
+class C<T extends core::num = core::num> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T a = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/super_index_set.dart.direct.expect b/pkg/front_end/testcases/inference/super_index_set.dart.direct.expect
index 041e05e..0134a2a 100644
--- a/pkg/front_end/testcases/inference/super_index_set.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/super_index_set.dart.direct.expect
@@ -17,6 +17,6 @@
     super.{self::B::[]=}(self::f<dynamic>(), self::f<dynamic>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_index_set.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/super_index_set.dart.direct.transformed.expect
index 041e05e..0134a2a 100644
--- a/pkg/front_end/testcases/inference/super_index_set.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_index_set.dart.direct.transformed.expect
@@ -17,6 +17,6 @@
     super.{self::B::[]=}(self::f<dynamic>(), self::f<dynamic>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_index_set.dart.outline.expect b/pkg/front_end/testcases/inference/super_index_set.dart.outline.expect
index 9d1472d..95d7070 100644
--- a/pkg/front_end/testcases/inference/super_index_set.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_index_set.dart.outline.expect
@@ -16,7 +16,7 @@
   method h() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/super_index_set.dart.strong.expect b/pkg/front_end/testcases/inference/super_index_set.dart.strong.expect
index 6908392..defc412 100644
--- a/pkg/front_end/testcases/inference/super_index_set.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/super_index_set.dart.strong.expect
@@ -17,6 +17,6 @@
     super.{self::B::[]=}(self::f<dynamic>() as{TypeError} core::int, self::f<core::String>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_index_set.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/super_index_set.dart.strong.transformed.expect
index 6908392..defc412 100644
--- a/pkg/front_end/testcases/inference/super_index_set.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_index_set.dart.strong.transformed.expect
@@ -17,6 +17,6 @@
     super.{self::B::[]=}(self::f<dynamic>() as{TypeError} core::int, self::f<core::String>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.direct.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.direct.expect
index cd3af92..22405f9 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.direct.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator []=(core::Map<core::int, self::B::T> x, core::List<self::B::T> y) → void {}
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
@@ -18,6 +18,6 @@
     super.{self::B::[]=}(self::f<dynamic>(), self::f<dynamic>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.direct.transformed.expect
index cd3af92..22405f9 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.direct.transformed.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator []=(core::Map<core::int, self::B::T> x, core::List<self::B::T> y) → void {}
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
@@ -18,6 +18,6 @@
     super.{self::B::[]=}(self::f<dynamic>(), self::f<dynamic>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.outline.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.outline.expect
index 9ef3f0c..e45d970 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.outline.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   operator []=(core::Map<core::int, self::B::T> x, core::List<self::B::T> y) → void
     ;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     ;
   operator []=(core::Object x, core::Object y) → void
@@ -17,7 +17,7 @@
   method h() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.strong.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.strong.expect
index a5cd75e..3f4ad5b 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator []=(generic-covariant-impl generic-covariant-interface core::Map<core::int, self::B::T> x, generic-covariant-impl generic-covariant-interface core::List<self::B::T> y) → void {}
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
@@ -18,6 +18,6 @@
     super.{self::B::[]=}(self::f<dynamic>() as{TypeError} core::Map<core::int, asy::Future<self::C::U>>, self::f<core::List<asy::Future<self::C::U>>>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.strong.transformed.expect
index a5cd75e..3f4ad5b 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.strong.transformed.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator []=(generic-covariant-impl generic-covariant-interface core::Map<core::int, self::B::T> x, generic-covariant-impl generic-covariant-interface core::List<self::B::T> y) → void {}
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
@@ -18,6 +18,6 @@
     super.{self::B::[]=}(self::f<dynamic>() as{TypeError} core::Map<core::int, asy::Future<self::C::U>>, self::f<core::List<asy::Future<self::C::U>>>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_initializer.dart.direct.expect b/pkg/front_end/testcases/inference/super_initializer.dart.direct.expect
index 1d9a2bf..f973b94 100644
--- a/pkg/front_end/testcases/inference/super_initializer.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/super_initializer.dart.direct.expect
@@ -12,6 +12,6 @@
     : super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_initializer.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/super_initializer.dart.direct.transformed.expect
index 1d9a2bf..f973b94 100644
--- a/pkg/front_end/testcases/inference/super_initializer.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_initializer.dart.direct.transformed.expect
@@ -12,6 +12,6 @@
     : super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_initializer.dart.outline.expect b/pkg/front_end/testcases/inference/super_initializer.dart.outline.expect
index 3ad68e3..e148d16 100644
--- a/pkg/front_end/testcases/inference/super_initializer.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_initializer.dart.outline.expect
@@ -10,7 +10,7 @@
   constructor •(core::int x) → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/super_initializer.dart.strong.expect b/pkg/front_end/testcases/inference/super_initializer.dart.strong.expect
index e36e82d..c0a9963 100644
--- a/pkg/front_end/testcases/inference/super_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/super_initializer.dart.strong.expect
@@ -12,6 +12,6 @@
     : super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/super_initializer.dart.strong.transformed.expect
index e36e82d..c0a9963 100644
--- a/pkg/front_end/testcases/inference/super_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_initializer.dart.strong.transformed.expect
@@ -12,6 +12,6 @@
     : super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.direct.expect b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.direct.expect
index e6ba748..349bb55 100644
--- a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.direct.expect
@@ -2,16 +2,16 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B::T t) → void
     : super core::Object::•()
     ;
 }
-class C<U extends core::Object> extends self::B<core::List<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<core::List<self::C::U>> {
   constructor •() → void
     : super self::B::•(self::f<dynamic>())
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.direct.transformed.expect
index e6ba748..349bb55 100644
--- a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.direct.transformed.expect
@@ -2,16 +2,16 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B::T t) → void
     : super core::Object::•()
     ;
 }
-class C<U extends core::Object> extends self::B<core::List<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<core::List<self::C::U>> {
   constructor •() → void
     : super self::B::•(self::f<dynamic>())
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.outline.expect b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.outline.expect
index 68d8998..c748dab 100644
--- a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.outline.expect
@@ -2,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B::T t) → void
     ;
 }
-class C<U extends core::Object> extends self::B<core::List<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<core::List<self::C::U>> {
   constructor •() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.strong.expect b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.strong.expect
index da5d5a2..f357c51 100644
--- a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.strong.expect
@@ -2,16 +2,16 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B::T t) → void
     : super core::Object::•()
     ;
 }
-class C<U extends core::Object> extends self::B<core::List<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<core::List<self::C::U>> {
   constructor •() → void
     : super self::B::•(self::f<core::List<self::C::U>>())
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.strong.transformed.expect
index da5d5a2..f357c51 100644
--- a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.strong.transformed.expect
@@ -2,16 +2,16 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B::T t) → void
     : super core::Object::•()
     ;
 }
-class C<U extends core::Object> extends self::B<core::List<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<core::List<self::C::U>> {
   constructor •() → void
     : super self::B::•(self::f<core::List<self::C::U>>())
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.direct.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.direct.expect
index bcfab27..31245d1 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.direct.expect
@@ -3,24 +3,24 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method g(self::E<self::B::T> x) → self::D<self::B::T>
     return null;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
@@ -30,6 +30,6 @@
     dynamic x = super.{self::B::g}(self::f<dynamic>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.direct.transformed.expect
index bcfab27..31245d1 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.direct.transformed.expect
@@ -3,24 +3,24 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method g(self::E<self::B::T> x) → self::D<self::B::T>
     return null;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
@@ -30,6 +30,6 @@
     dynamic x = super.{self::B::g}(self::f<dynamic>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.outline.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.outline.expect
index 4d0679c..0186853 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.outline.expect
@@ -3,21 +3,21 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method g(self::E<self::B::T> x) → self::D<self::B::T>
     ;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     ;
   method g(core::Object x) → self::E<asy::Future<self::C::U>>
@@ -25,7 +25,7 @@
   method h() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.strong.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.strong.expect
index 973b188..d492a07 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.strong.expect
@@ -3,24 +3,24 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method g(generic-covariant-impl generic-covariant-interface self::E<self::B::T> x) → self::D<self::B::T>
     return null;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
@@ -30,6 +30,6 @@
     self::D<asy::Future<self::C::U>> x = super.{self::B::g}(self::f<self::E<asy::Future<self::C::U>>>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.strong.transformed.expect
index 973b188..d492a07 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.strong.transformed.expect
@@ -3,24 +3,24 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method g(generic-covariant-impl generic-covariant-interface self::E<self::B::T> x) → self::D<self::B::T>
     return null;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
@@ -30,6 +30,6 @@
     self::D<asy::Future<self::C::U>> x = super.{self::B::g}(self::f<self::E<asy::Future<self::C::U>>>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.direct.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.direct.expect
index 8ee6c1c..a191aad 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.direct.expect
@@ -3,23 +3,23 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   field self::D<self::B::T> x = null;
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.direct.transformed.expect
index 8ee6c1c..a191aad 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.direct.transformed.expect
@@ -3,23 +3,23 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   field self::D<self::B::T> x = null;
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.outline.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.outline.expect
index 04cb684..5c18f14 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.outline.expect
@@ -3,20 +3,20 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   field self::D<self::B::T> x;
   synthetic constructor •() → void
     ;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     ;
   get x() → self::E<asy::Future<self::C::U>>
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.strong.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.strong.expect
index 5841a0d..f8bd96c 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.strong.expect
@@ -3,23 +3,23 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::D<self::B::T> x = null;
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.strong.transformed.expect
index 5841a0d..f8bd96c 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.strong.transformed.expect
@@ -3,23 +3,23 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::D<self::B::T> x = null;
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.direct.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.direct.expect
index f4bec43..df509d6 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.direct.expect
@@ -3,23 +3,23 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   field self::D<self::B::T> x = null;
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
@@ -30,6 +30,6 @@
     super.{self::B::x} = self::f<dynamic>();
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.direct.transformed.expect
index f4bec43..df509d6 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.direct.transformed.expect
@@ -3,23 +3,23 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   field self::D<self::B::T> x = null;
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
@@ -30,6 +30,6 @@
     super.{self::B::x} = self::f<dynamic>();
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.outline.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.outline.expect
index 97fbb9b..aa354a1 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.outline.expect
@@ -3,20 +3,20 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   field self::D<self::B::T> x;
   synthetic constructor •() → void
     ;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     ;
   get x() → self::E<asy::Future<self::C::U>>
@@ -26,7 +26,7 @@
   method g() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.strong.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.strong.expect
index 3103ff0..db2885e 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.strong.expect
@@ -3,23 +3,23 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::D<self::B::T> x = null;
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
@@ -30,6 +30,6 @@
     super.{self::B::x} = self::f<self::D<asy::Future<self::C::U>>>();
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.strong.transformed.expect
index 3103ff0..db2885e 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.strong.transformed.expect
@@ -3,23 +3,23 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::D<self::B::T> x = null;
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
@@ -30,6 +30,6 @@
     super.{self::B::x} = self::f<self::D<asy::Future<self::C::U>>>();
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/this_reference.dart.direct.expect b/pkg/front_end/testcases/inference/this_reference.dart.direct.expect
index b04ed9d..bb11426 100644
--- a/pkg/front_end/testcases/inference/this_reference.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/this_reference.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/this_reference.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/this_reference.dart.direct.transformed.expect
index b04ed9d..bb11426 100644
--- a/pkg/front_end/testcases/inference/this_reference.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/this_reference.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/this_reference.dart.outline.expect b/pkg/front_end/testcases/inference/this_reference.dart.outline.expect
index c506387..26fb9e8 100644
--- a/pkg/front_end/testcases/inference/this_reference.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/this_reference.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method f() → void
diff --git a/pkg/front_end/testcases/inference/this_reference.dart.strong.expect b/pkg/front_end/testcases/inference/this_reference.dart.strong.expect
index 2c721a1..d2a5bd6 100644
--- a/pkg/front_end/testcases/inference/this_reference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/this_reference.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/this_reference.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/this_reference.dart.strong.transformed.expect
index 2c721a1..d2a5bd6 100644
--- a/pkg/front_end/testcases/inference/this_reference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/this_reference.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/type_cast.dart.direct.expect b/pkg/front_end/testcases/inference/type_cast.dart.direct.expect
index 92d88c6..a69bbca 100644
--- a/pkg/front_end/testcases/inference/type_cast.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/type_cast.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends self::A<self::B::T> {
+class B<T extends core::Object = dynamic> extends self::A<self::B::T> {
   synthetic constructor •() → void
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/type_cast.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/type_cast.dart.direct.transformed.expect
index 92d88c6..a69bbca 100644
--- a/pkg/front_end/testcases/inference/type_cast.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/type_cast.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends self::A<self::B::T> {
+class B<T extends core::Object = dynamic> extends self::A<self::B::T> {
   synthetic constructor •() → void
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/type_cast.dart.outline.expect b/pkg/front_end/testcases/inference/type_cast.dart.outline.expect
index 8491585..626f607 100644
--- a/pkg/front_end/testcases/inference/type_cast.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/type_cast.dart.outline.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class B<T extends core::Object> extends self::A<self::B::T> {
+class B<T extends core::Object = dynamic> extends self::A<self::B::T> {
   synthetic constructor •() → void
     ;
   method foo() → dynamic
diff --git a/pkg/front_end/testcases/inference/type_cast.dart.strong.expect b/pkg/front_end/testcases/inference/type_cast.dart.strong.expect
index 2418fa8..cd505b4 100644
--- a/pkg/front_end/testcases/inference/type_cast.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/type_cast.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends self::A<self::B::T> {
+class B<T extends core::Object = dynamic> extends self::A<self::B::T> {
   synthetic constructor •() → void
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/type_cast.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/type_cast.dart.strong.transformed.expect
index 2418fa8..cd505b4 100644
--- a/pkg/front_end/testcases/inference/type_cast.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/type_cast.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends self::A<self::B::T> {
+class B<T extends core::Object = dynamic> extends self::A<self::B::T> {
   synthetic constructor •() → void
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.direct.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.direct.expect
index 42d105e..7b6dfaa 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.direct.expect
@@ -14,6 +14,6 @@
     dynamic v5 = let final dynamic #t1 = 0 in let final dynamic #t2 = self::f<dynamic>() in let final dynamic #t3 = super.[]=(#t1, #t2) in #t2;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.direct.transformed.expect
index 42d105e..7b6dfaa 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.direct.transformed.expect
@@ -14,6 +14,6 @@
     dynamic v5 = let final dynamic #t1 = 0 in let final dynamic #t2 = self::f<dynamic>() in let final dynamic #t3 = super.[]=(#t1, #t2) in #t2;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.outline.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.outline.expect
index ac4a642..5b2f1ca 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.outline.expect
@@ -8,7 +8,7 @@
   method test() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
index f3c83b5..7406276 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
@@ -25,6 +25,6 @@
                                      ^^^", "pkg/front_end/testcases/inference/unresolved_super.dart:16:37: Error: Superclass has no method named '[]='.
     var /*@type=dynamic*/ v5 = super[0] = /*@typeArgs=dynamic*/ f();
                                     ^"]/* from null */;
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.direct.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.direct.expect
index ea9c98e..75af777 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(() → self::C::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.direct.transformed.expect
index ea9c98e..75af777 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(() → self::C::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.strong.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.strong.expect
index e19dd93..89810b9 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(() → self::C::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.strong.transformed.expect
index e19dd93..89810b9 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(() → self::C::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.direct.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.direct.expect
index 2f5725e..7627c24 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(() → self::C::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.direct.transformed.expect
index 2f5725e..7627c24 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(() → self::C::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.strong.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.strong.expect
index cdef38d..bbd32a9 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(() → self::C::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.strong.transformed.expect
index cdef38d..bbd32a9 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(() → self::C::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.direct.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.direct.expect
index ab67a68..33065a8 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(() → self::C::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.direct.transformed.expect
index ab67a68..33065a8 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(() → self::C::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.strong.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.strong.expect
index 9377cb7..93ad8f7 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(() → self::C::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.strong.transformed.expect
index 9377cb7..93ad8f7 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   constructor •(() → self::C::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.direct.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.direct.expect
index 987511d..8fe3a76 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.direct.expect
@@ -5,7 +5,7 @@
 static field dynamic v = self::f<dynamic>(() → dynamic {
   return 1;
 });
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
 static method main() → dynamic {
   self::v;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.direct.transformed.expect
index 987511d..8fe3a76 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.direct.transformed.expect
@@ -5,7 +5,7 @@
 static field dynamic v = self::f<dynamic>(() → dynamic {
   return 1;
 });
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
 static method main() → dynamic {
   self::v;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.strong.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.strong.expect
index 757a833..ef5e6ca 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.strong.expect
@@ -5,7 +5,7 @@
 static field core::List<dynamic> v = self::f<dynamic>(() → core::int {
   return 1;
 });
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
 static method main() → dynamic {
   self::v;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.strong.transformed.expect
index 757a833..ef5e6ca 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.strong.transformed.expect
@@ -5,7 +5,7 @@
 static field core::List<dynamic> v = self::f<dynamic>(() → core::int {
   return 1;
 });
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
 static method main() → dynamic {
   self::v;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.direct.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.direct.expect
index 4965d22..2e73b66 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.direct.expect
@@ -5,7 +5,7 @@
 static field dynamic v = self::f<core::int>(() → dynamic {
   return 1;
 });
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
 static method main() → dynamic {
   self::v;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.direct.transformed.expect
index 4965d22..2e73b66 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.direct.transformed.expect
@@ -5,7 +5,7 @@
 static field dynamic v = self::f<core::int>(() → dynamic {
   return 1;
 });
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
 static method main() → dynamic {
   self::v;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.strong.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.strong.expect
index 4242dc9..16be853 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.strong.expect
@@ -5,7 +5,7 @@
 static field core::List<core::int> v = self::f<core::int>(() → core::int {
   return 1;
 });
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
 static method main() → dynamic {
   self::v;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.strong.transformed.expect
index 4242dc9..16be853 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.strong.transformed.expect
@@ -5,7 +5,7 @@
 static field core::List<core::int> v = self::f<core::int>(() → core::int {
   return 1;
 });
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
 static method main() → dynamic {
   self::v;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.direct.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.direct.expect
index 89fc3e2..e222b86 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.direct.expect
@@ -7,5 +7,5 @@
     return 1;
   });
 }
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.direct.transformed.expect
index 89fc3e2..e222b86 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.direct.transformed.expect
@@ -7,5 +7,5 @@
     return 1;
   });
 }
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.strong.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.strong.expect
index 27f92d8..6e09452 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.strong.expect
@@ -7,5 +7,5 @@
     return 1;
   });
 }
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.strong.transformed.expect
index 27f92d8..6e09452 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.strong.transformed.expect
@@ -7,5 +7,5 @@
     return 1;
   });
 }
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.direct.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.direct.expect
index 5d7db44..614a9eb 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.direct.expect
@@ -7,5 +7,5 @@
     return 1;
   });
 }
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.direct.transformed.expect
index 5d7db44..614a9eb 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.direct.transformed.expect
@@ -7,5 +7,5 @@
     return 1;
   });
 }
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.strong.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.strong.expect
index d78578d..f1a71c2 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.strong.expect
@@ -7,5 +7,5 @@
     return 1;
   });
 }
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.strong.transformed.expect
index d78578d..f1a71c2 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.strong.transformed.expect
@@ -7,5 +7,5 @@
     return 1;
   });
 }
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.direct.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.direct.expect
index 94926cb..acfcd08 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.direct.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(() → self::C::f::T g) → core::List<self::C::f::T>
+  method f<T extends core::Object = dynamic>(() → self::C::f::T g) → core::List<self::C::f::T>
     return <self::C::f::T>[g.call()];
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.direct.transformed.expect
index 94926cb..acfcd08 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.direct.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(() → self::C::f::T g) → core::List<self::C::f::T>
+  method f<T extends core::Object = dynamic>(() → self::C::f::T g) → core::List<self::C::f::T>
     return <self::C::f::T>[g.call()];
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.strong.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.strong.expect
index 453c72f..1541ba0 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.strong.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(() → self::C::f::T g) → core::List<self::C::f::T>
+  method f<T extends core::Object = dynamic>(() → self::C::f::T g) → core::List<self::C::f::T>
     return <self::C::f::T>[g.call()];
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.strong.transformed.expect
index 453c72f..1541ba0 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(() → self::C::f::T g) → core::List<self::C::f::T>
+  method f<T extends core::Object = dynamic>(() → self::C::f::T g) → core::List<self::C::f::T>
     return <self::C::f::T>[g.call()];
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.direct.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.direct.expect
index 601a1ea..6d4f94d 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.direct.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(() → self::C::f::T g) → core::List<self::C::f::T>
+  method f<T extends core::Object = dynamic>(() → self::C::f::T g) → core::List<self::C::f::T>
     return <self::C::f::T>[g.call()];
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.direct.transformed.expect
index 601a1ea..6d4f94d 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.direct.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(() → self::C::f::T g) → core::List<self::C::f::T>
+  method f<T extends core::Object = dynamic>(() → self::C::f::T g) → core::List<self::C::f::T>
     return <self::C::f::T>[g.call()];
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.strong.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.strong.expect
index 2cb1a2a..cb76f4d 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.strong.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(() → self::C::f::T g) → core::List<self::C::f::T>
+  method f<T extends core::Object = dynamic>(() → self::C::f::T g) → core::List<self::C::f::T>
     return <self::C::f::T>[g.call()];
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.strong.transformed.expect
index 2cb1a2a..cb76f4d 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(() → self::C::f::T g) → core::List<self::C::f::T>
+  method f<T extends core::Object = dynamic>(() → self::C::f::T g) → core::List<self::C::f::T>
     return <self::C::f::T>[g.call()];
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.direct.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.direct.expect
index 46c4204..e8f01e3 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.direct.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(() → self::C::f::T g) → core::List<self::C::f::T>
+  method f<T extends core::Object = dynamic>(() → self::C::f::T g) → core::List<self::C::f::T>
     return <self::C::f::T>[g.call()];
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.direct.transformed.expect
index 46c4204..e8f01e3 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.direct.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(() → self::C::f::T g) → core::List<self::C::f::T>
+  method f<T extends core::Object = dynamic>(() → self::C::f::T g) → core::List<self::C::f::T>
     return <self::C::f::T>[g.call()];
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.strong.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.strong.expect
index 2cb1a2a..cb76f4d 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.strong.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(() → self::C::f::T g) → core::List<self::C::f::T>
+  method f<T extends core::Object = dynamic>(() → self::C::f::T g) → core::List<self::C::f::T>
     return <self::C::f::T>[g.call()];
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.strong.transformed.expect
index 2cb1a2a..cb76f4d 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(() → self::C::f::T g) → core::List<self::C::f::T>
+  method f<T extends core::Object = dynamic>(() → self::C::f::T g) → core::List<self::C::f::T>
     return <self::C::f::T>[g.call()];
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.direct.expect b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.direct.expect
index 7aabcb2..e9f8f19 100644
--- a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static field dynamic x = self::run<dynamic>(self::printRunning);
-static method run<T extends core::Object>(() → self::run::T f) → self::run::T {
+static method run<T extends core::Object = dynamic>(() → self::run::T f) → self::run::T {
   core::print("running");
   dynamic t = f.call();
   core::print("done running");
diff --git a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.direct.transformed.expect
index 7aabcb2..e9f8f19 100644
--- a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.direct.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static field dynamic x = self::run<dynamic>(self::printRunning);
-static method run<T extends core::Object>(() → self::run::T f) → self::run::T {
+static method run<T extends core::Object = dynamic>(() → self::run::T f) → self::run::T {
   core::print("running");
   dynamic t = f.call();
   core::print("done running");
diff --git a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.strong.expect b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.strong.expect
index 0fdc0e3..0d3fd7d 100644
--- a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static field dynamic x = self::run<dynamic>(self::printRunning);
-static method run<T extends core::Object>(() → self::run::T f) → self::run::T {
+static method run<T extends core::Object = dynamic>(() → self::run::T f) → self::run::T {
   core::print("running");
   self::run::T t = f.call();
   core::print("done running");
diff --git a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.strong.transformed.expect
index 0fdc0e3..0d3fd7d 100644
--- a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static field dynamic x = self::run<dynamic>(self::printRunning);
-static method run<T extends core::Object>(() → self::run::T f) → self::run::T {
+static method run<T extends core::Object = dynamic>(() → self::run::T f) → self::run::T {
   core::print("running");
   self::run::T t = f.call();
   core::print("done running");
diff --git a/pkg/front_end/testcases/inference_new/const_invocation.dart.direct.expect b/pkg/front_end/testcases/inference_new/const_invocation.dart.direct.expect
index 16e4209..94629b4 100644
--- a/pkg/front_end/testcases/inference_new/const_invocation.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/const_invocation.dart.direct.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<U extends core::Object, V extends core::Object> = (U) → V;
-class Foo<T extends core::Object> extends core::Object {
+typedef F<U extends core::Object = dynamic, V extends core::Object = dynamic> = (U) → V;
+class Foo<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -26,7 +26,7 @@
   get v9() → core::Map<self::Foo::T, (self::Foo::T) → self::Foo::T>
     return const <dynamic, dynamic>{};
 }
-class Bar<T extends core::Object> extends core::Object {
+class Bar<T extends core::Object = dynamic> extends core::Object {
   const constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/const_invocation.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/const_invocation.dart.direct.transformed.expect
index 16e4209..94629b4 100644
--- a/pkg/front_end/testcases/inference_new/const_invocation.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/const_invocation.dart.direct.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<U extends core::Object, V extends core::Object> = (U) → V;
-class Foo<T extends core::Object> extends core::Object {
+typedef F<U extends core::Object = dynamic, V extends core::Object = dynamic> = (U) → V;
+class Foo<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -26,7 +26,7 @@
   get v9() → core::Map<self::Foo::T, (self::Foo::T) → self::Foo::T>
     return const <dynamic, dynamic>{};
 }
-class Bar<T extends core::Object> extends core::Object {
+class Bar<T extends core::Object = dynamic> extends core::Object {
   const constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/const_invocation.dart.outline.expect b/pkg/front_end/testcases/inference_new/const_invocation.dart.outline.expect
index 393359f..96fab41 100644
--- a/pkg/front_end/testcases/inference_new/const_invocation.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/const_invocation.dart.outline.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<U extends core::Object, V extends core::Object> = (U) → V;
-class Foo<T extends core::Object> extends core::Object {
+typedef F<U extends core::Object = dynamic, V extends core::Object = dynamic> = (U) → V;
+class Foo<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   get v1() → self::Bar<self::Foo::T>
@@ -25,7 +25,7 @@
   get v9() → core::Map<self::Foo::T, (self::Foo::T) → self::Foo::T>
     ;
 }
-class Bar<T extends core::Object> extends core::Object {
+class Bar<T extends core::Object = dynamic> extends core::Object {
   const constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/const_invocation.dart.strong.expect b/pkg/front_end/testcases/inference_new/const_invocation.dart.strong.expect
index 6926e12..29c327c 100644
--- a/pkg/front_end/testcases/inference_new/const_invocation.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/const_invocation.dart.strong.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<U extends core::Object, V extends core::Object> = (U) → V;
-class Foo<T extends core::Object> extends core::Object {
+typedef F<U extends core::Object = dynamic, V extends core::Object = dynamic> = (U) → V;
+class Foo<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -26,7 +26,7 @@
   get v9() → core::Map<self::Foo::T, (self::Foo::T) → self::Foo::T>
     return const <core::Null, (core::Object) → core::Null>{};
 }
-class Bar<T extends core::Object> extends core::Object {
+class Bar<T extends core::Object = dynamic> extends core::Object {
   const constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/const_invocation.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/const_invocation.dart.strong.transformed.expect
index 6926e12..29c327c 100644
--- a/pkg/front_end/testcases/inference_new/const_invocation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/const_invocation.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<U extends core::Object, V extends core::Object> = (U) → V;
-class Foo<T extends core::Object> extends core::Object {
+typedef F<U extends core::Object = dynamic, V extends core::Object = dynamic> = (U) → V;
+class Foo<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -26,7 +26,7 @@
   get v9() → core::Map<self::Foo::T, (self::Foo::T) → self::Foo::T>
     return const <core::Null, (core::Object) → core::Null>{};
 }
-class Bar<T extends core::Object> extends core::Object {
+class Bar<T extends core::Object = dynamic> extends core::Object {
   const constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.direct.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.direct.expect
index 2e54afa..8488c70 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.direct.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(self::A::f::T t) → self::A::f::T
+  method f<T extends core::Object = dynamic>(self::A::f::T t) → self::A::f::T
     return t;
   method g(dynamic i) → core::int
     return 0;
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.direct.transformed.expect
index 2e54afa..8488c70 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.direct.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(self::A::f::T t) → self::A::f::T
+  method f<T extends core::Object = dynamic>(self::A::f::T t) → self::A::f::T
     return t;
   method g(dynamic i) → core::int
     return 0;
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.outline.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.outline.expect
index ad47727..072ea33 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.outline.expect
@@ -5,7 +5,7 @@
 class A extends core::Object {
   synthetic constructor •() → void
     ;
-  method f<T extends core::Object>(self::A::f::T t) → self::A::f::T
+  method f<T extends core::Object = dynamic>(self::A::f::T t) → self::A::f::T
     ;
   method g(dynamic i) → core::int
     ;
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect
index b23bd77..59ee258 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(self::A::f::T t) → self::A::f::T
+  method f<T extends core::Object = dynamic>(self::A::f::T t) → self::A::f::T
     return t;
   method g(dynamic i) → core::int
     return 0;
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.transformed.expect
index b23bd77..59ee258 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<T extends core::Object>(self::A::f::T t) → self::A::f::T
+  method f<T extends core::Object = dynamic>(self::A::f::T t) → self::A::f::T
     return t;
   method g(dynamic i) → core::int
     return 0;
diff --git a/pkg/front_end/testcases/inference_new/do_loop.dart.direct.expect b/pkg/front_end/testcases/inference_new/do_loop.dart.direct.expect
index 8d9986c..edd314e 100644
--- a/pkg/front_end/testcases/inference_new/do_loop.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/do_loop.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   do {
diff --git a/pkg/front_end/testcases/inference_new/do_loop.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/do_loop.dart.direct.transformed.expect
index 8d9986c..edd314e 100644
--- a/pkg/front_end/testcases/inference_new/do_loop.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/do_loop.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   do {
diff --git a/pkg/front_end/testcases/inference_new/do_loop.dart.outline.expect b/pkg/front_end/testcases/inference_new/do_loop.dart.outline.expect
index ac49c9e..e8c03c5 100644
--- a/pkg/front_end/testcases/inference_new/do_loop.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/do_loop.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference_new/do_loop.dart.strong.expect b/pkg/front_end/testcases/inference_new/do_loop.dart.strong.expect
index 9262769..5e323f3 100644
--- a/pkg/front_end/testcases/inference_new/do_loop.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/do_loop.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   do {
diff --git a/pkg/front_end/testcases/inference_new/do_loop.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/do_loop.dart.strong.transformed.expect
index 9262769..5e323f3 100644
--- a/pkg/front_end/testcases/inference_new/do_loop.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/do_loop.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   do {
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.direct.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.direct.expect
index e86775a..06b6924 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.direct.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.direct.transformed.expect
index e86775a..06b6924 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.direct.transformed.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.outline.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.outline.expect
index d0b810a..5f8f019 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.outline.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → void
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B::T x) → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.strong.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.strong.expect
index 019ae1b..c3f1d56 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.strong.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.strong.transformed.expect
index 019ae1b..c3f1d56 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::B::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.direct.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.direct.expect
index ca47657..de7183e 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::A::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.direct.transformed.expect
index ca47657..de7183e 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::A::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.outline.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.outline.expect
index 3497efa..2a7abc7 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::A::T x) → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.strong.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.strong.expect
index 115862f..5f2c35d 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::A::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.strong.transformed.expect
index 115862f..5f2c35d 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   constructor •(self::A::T x) → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.direct.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.direct.expect
index e612ea3..7b9d366 100644
--- a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.direct.expect
@@ -33,7 +33,7 @@
   }
 }
 static field self::A aTopLevel;
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static set aTopLevelSetter(self::A value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.direct.transformed.expect
index e612ea3..7b9d366 100644
--- a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.direct.transformed.expect
@@ -33,7 +33,7 @@
   }
 }
 static field self::A aTopLevel;
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static set aTopLevelSetter(self::A value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.outline.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.outline.expect
index 6bd42ce..19aaf1e 100644
--- a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.outline.expect
@@ -16,7 +16,7 @@
     ;
 }
 static field self::A aTopLevel;
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static set aTopLevelSetter(self::A value) → void
   ;
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.expect
index c5b3997..89f7813 100644
--- a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.expect
@@ -33,7 +33,7 @@
   }
 }
 static field self::A aTopLevel;
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static set aTopLevelSetter(self::A value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.transformed.expect
index c5b3997..89f7813 100644
--- a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.transformed.expect
@@ -33,7 +33,7 @@
   }
 }
 static field self::A aTopLevel;
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static set aTopLevelSetter(self::A value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.direct.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.direct.expect
index f8bb637..8f2e22d 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.direct.expect
@@ -13,7 +13,7 @@
     : super self::A::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → dynamic async {
   core::Iterable<self::A> iterable;
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.direct.transformed.expect
index df5d861..c6044b0 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.direct.transformed.expect
@@ -13,7 +13,7 @@
     : super self::A::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → dynamic /* originally async */ {
   final asy::Completer<dynamic> :completer = asy::Completer::sync<dynamic>();
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.outline.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.outline.expect
index 006a0f5..acae199 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.outline.expect
@@ -10,7 +10,7 @@
   synthetic constructor •() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
index 60f704bb..5800a96 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
@@ -13,7 +13,7 @@
     : super self::A::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → dynamic async {
   core::Iterable<self::A> iterable;
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.transformed.expect
index cd0a0a7..e8c97af 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.transformed.expect
@@ -13,7 +13,7 @@
     : super self::A::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → dynamic /* originally async */ {
   final asy::Completer<dynamic> :completer = asy::Completer::sync<dynamic>();
diff --git a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.direct.expect b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.direct.expect
index 53d59d1..6748909 100644
--- a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.direct.expect
@@ -48,7 +48,7 @@
     return null;
   operator []=(core::int i, self::B value) → void {}
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test1(self::G g) → void {
   let final dynamic #t1 = g in let final dynamic #t2 = 0 in #t1.[]=(#t2, #t1.[](#t2).*(self::f<dynamic>()));
diff --git a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.direct.transformed.expect
index 53d59d1..6748909 100644
--- a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.direct.transformed.expect
@@ -48,7 +48,7 @@
     return null;
   operator []=(core::int i, self::B value) → void {}
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test1(self::G g) → void {
   let final dynamic #t1 = g in let final dynamic #t2 = 0 in #t1.[]=(#t2, #t1.[](#t2).*(self::f<dynamic>()));
diff --git a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.outline.expect b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.outline.expect
index 1116704..f45b9cb 100644
--- a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.outline.expect
@@ -42,7 +42,7 @@
   operator []=(core::int i, self::B value) → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method test1(self::G g) → void
   ;
diff --git a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.strong.expect b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.strong.expect
index 9a5b546..93d3e6a 100644
--- a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.strong.expect
@@ -48,7 +48,7 @@
     return null;
   operator []=(core::int i, self::B value) → void {}
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test1(self::G g) → void {
   let final self::G #t1 = g in let final core::int #t2 = 0 in #t1.{self::G::[]=}(#t2, #t1.{self::G::[]}(#t2).{self::A::*}(self::f<dynamic>() as{TypeError} self::D));
diff --git a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.strong.transformed.expect
index 9a5b546..93d3e6a 100644
--- a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.strong.transformed.expect
@@ -48,7 +48,7 @@
     return null;
   operator []=(core::int i, self::B value) → void {}
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test1(self::G g) → void {
   let final self::G #t1 = g in let final core::int #t2 = 0 in #t1.{self::G::[]=}(#t2, #t1.{self::G::[]}(#t2).{self::A::*}(self::f<dynamic>() as{TypeError} self::D));
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.direct.expect
index 233af9d..a47f9b9 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.direct.expect
@@ -47,6 +47,6 @@
     dynamic v7 = let final dynamic #t2 = this.{self::Test::member} in let final dynamic #t3 = this.{self::Test::member} = #t2.-(1) in #t2;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.direct.transformed.expect
index 233af9d..a47f9b9 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.direct.transformed.expect
@@ -47,6 +47,6 @@
     dynamic v7 = let final dynamic #t2 = this.{self::Test::member} in let final dynamic #t3 = this.{self::Test::member} = #t2.-(1) in #t2;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.outline.expect
index 031084f..ca2db03 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.outline.expect
@@ -29,7 +29,7 @@
   method test() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.strong.expect
index 128a53e..8338d42 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.strong.expect
@@ -47,6 +47,6 @@
     self::B v7 = let final self::B #t2 = this.{self::Test::member} in let final self::B #t3 = this.{self::Test::member} = #t2.{self::B::-}(1) in #t2;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.strong.transformed.expect
index 128a53e..8338d42 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.strong.transformed.expect
@@ -47,6 +47,6 @@
     self::B v7 = let final self::B #t2 = this.{self::Test::member} in let final self::B #t3 = this.{self::Test::member} = #t2.{self::B::-}(1) in #t2;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.direct.expect
index c460798..6fd428b 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.direct.expect
@@ -55,6 +55,6 @@
     dynamic v7 = let final dynamic #t42 = t in let final dynamic #t43 = self::f<dynamic>() in let final dynamic #t44 = #t42.[](#t43) in let final dynamic #t45 = #t42.[]=(#t43, #t44.-(1)) in #t44;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.direct.transformed.expect
index c460798..6fd428b 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.direct.transformed.expect
@@ -55,6 +55,6 @@
     dynamic v7 = let final dynamic #t42 = t in let final dynamic #t43 = self::f<dynamic>() in let final dynamic #t44 = #t42.[](#t43) in let final dynamic #t45 = #t42.[]=(#t43, #t44.-(1)) in #t44;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.outline.expect
index ff1db0b..8286554 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.outline.expect
@@ -36,7 +36,7 @@
   method test() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.strong.expect
index 211cbb9..1bc265f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.strong.expect
@@ -55,6 +55,6 @@
     self::B v7 = let final self::Test #t42 = t in let final dynamic #t43 = self::f<dynamic>() in let final self::B #t44 = #t42.{self::Test::[]}(#t43 as{TypeError} self::Index) in let final void #t45 = #t42.{self::Test::[]=}(#t43 as{TypeError} self::Index, #t44.{self::B::-}(1)) in #t44;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.strong.transformed.expect
index 211cbb9..1bc265f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.strong.transformed.expect
@@ -55,6 +55,6 @@
     self::B v7 = let final self::Test #t42 = t in let final dynamic #t43 = self::f<dynamic>() in let final self::B #t44 = #t42.{self::Test::[]}(#t43 as{TypeError} self::Index) in let final void #t45 = #t42.{self::Test::[]=}(#t43 as{TypeError} self::Index, #t44.{self::B::-}(1)) in #t44;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.direct.expect
index 515c5dd..5b671bb 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.direct.expect
@@ -66,6 +66,6 @@
     dynamic v5 = let final dynamic #t30 = t in let final dynamic #t31 = self::f<dynamic>() in let final dynamic #t32 = #t30.[](#t31) in let final dynamic #t33 = #t30.[]=(#t31, #t32.-(1)) in #t32;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.direct.transformed.expect
index 515c5dd..5b671bb 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.direct.transformed.expect
@@ -66,6 +66,6 @@
     dynamic v5 = let final dynamic #t30 = t in let final dynamic #t31 = self::f<dynamic>() in let final dynamic #t32 = #t30.[](#t31) in let final dynamic #t33 = #t30.[]=(#t31, #t32.-(1)) in #t32;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.outline.expect
index 0b77cdc..0a5efaa 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.outline.expect
@@ -48,7 +48,7 @@
   method test() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.strong.expect
index 8c2dd0c..874ad18 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.strong.expect
@@ -66,6 +66,6 @@
     self::B v5 = let final self::Test #t30 = t in let final dynamic #t31 = self::f<dynamic>() in let final self::B #t32 = #t30.{self::Test::[]}(#t31 as{TypeError} self::Index) in let final void #t33 = #t30.{self::Test::[]=}(#t31 as{TypeError} self::Index, #t32.{self::B::-}(1)) in #t32;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.strong.transformed.expect
index 8c2dd0c..874ad18 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.strong.transformed.expect
@@ -66,6 +66,6 @@
     self::B v5 = let final self::Test #t30 = t in let final dynamic #t31 = self::f<dynamic>() in let final self::B #t32 = #t30.{self::Test::[]}(#t31 as{TypeError} self::Index) in let final void #t33 = #t30.{self::Test::[]=}(#t31 as{TypeError} self::Index, #t32.{self::B::-}(1)) in #t32;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.direct.expect
index 02ff3dc..d613228 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.direct.expect
@@ -59,6 +59,6 @@
     dynamic v7 = let final dynamic #t30 = self::f<dynamic>() in let final dynamic #t31 = super.{self::Base::[]}(#t30) in let final dynamic #t32 = super.{self::Base::[]=}(#t30, #t31.-(1)) in #t31;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.direct.transformed.expect
index 02ff3dc..d613228 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.direct.transformed.expect
@@ -59,6 +59,6 @@
     dynamic v7 = let final dynamic #t30 = self::f<dynamic>() in let final dynamic #t31 = super.{self::Base::[]}(#t30) in let final dynamic #t32 = super.{self::Base::[]=}(#t30, #t31.-(1)) in #t31;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.outline.expect
index 421df3f..1d2a695 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.outline.expect
@@ -40,7 +40,7 @@
   method test() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.strong.expect
index ac4968c..d77ddb9 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.strong.expect
@@ -59,6 +59,6 @@
     self::B v7 = let final dynamic #t30 = self::f<dynamic>() in let final self::B #t31 = super.{self::Base::[]}(#t30 as{TypeError} self::Index) in let final void #t32 = super.{self::Base::[]=}(#t30 as{TypeError} self::Index, #t31.{self::B::-}(1)) in #t31;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.strong.transformed.expect
index ac4968c..d77ddb9 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.strong.transformed.expect
@@ -59,6 +59,6 @@
     self::B v7 = let final dynamic #t30 = self::f<dynamic>() in let final self::B #t31 = super.{self::Base::[]}(#t30 as{TypeError} self::Index) in let final void #t32 = super.{self::Base::[]=}(#t30 as{TypeError} self::Index, #t31.{self::B::-}(1)) in #t31;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.direct.expect
index 7ad93e72..1610dd9 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class Base<T extends core::Object, U extends core::Object> extends core::Object {
+abstract class Base<T extends core::Object = dynamic, U extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.direct.transformed.expect
index 7ad93e72..1610dd9 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class Base<T extends core::Object, U extends core::Object> extends core::Object {
+abstract class Base<T extends core::Object = dynamic, U extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.outline.expect
index e678ac3..24d45db 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class Base<T extends core::Object, U extends core::Object> extends core::Object {
+abstract class Base<T extends core::Object = dynamic, U extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   operator [](core::String s) → self::Base::T
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
index 7d69433..a9953b5 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class Base<T extends core::Object, U extends core::Object> extends core::Object {
+abstract class Base<T extends core::Object = dynamic, U extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.direct.expect
index 2c0f5d8..f031580 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.direct.expect
@@ -54,6 +54,6 @@
     dynamic v7 = let final dynamic #t30 = self::f<dynamic>() in let final dynamic #t31 = this.[](#t30) in let final dynamic #t32 = this.[]=(#t30, #t31.-(1)) in #t31;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.direct.transformed.expect
index 2c0f5d8..f031580 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.direct.transformed.expect
@@ -54,6 +54,6 @@
     dynamic v7 = let final dynamic #t30 = self::f<dynamic>() in let final dynamic #t31 = this.[](#t30) in let final dynamic #t32 = this.[]=(#t30, #t31.-(1)) in #t31;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.outline.expect
index ff1db0b..8286554 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.outline.expect
@@ -36,7 +36,7 @@
   method test() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.strong.expect
index 754dfc6..494fe12 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.strong.expect
@@ -54,6 +54,6 @@
     self::B v7 = let final dynamic #t30 = self::f<dynamic>() in let final self::B #t31 = this.{self::Test::[]}(#t30 as{TypeError} self::Index) in let final void #t32 = this.{self::Test::[]=}(#t30 as{TypeError} self::Index, #t31.{self::B::-}(1)) in #t31;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.strong.transformed.expect
index 754dfc6..494fe12 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.strong.transformed.expect
@@ -54,6 +54,6 @@
     self::B v7 = let final dynamic #t30 = self::f<dynamic>() in let final self::B #t31 = this.{self::Test::[]}(#t30 as{TypeError} self::Index) in let final void #t32 = this.{self::Test::[]=}(#t30 as{TypeError} self::Index, #t31.{self::B::-}(1)) in #t31;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.direct.expect
index 7455ebf..552f176 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class Test<T extends core::Object, U extends core::Object> extends core::Object {
+abstract class Test<T extends core::Object = dynamic, U extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.direct.transformed.expect
index 7455ebf..552f176 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class Test<T extends core::Object, U extends core::Object> extends core::Object {
+abstract class Test<T extends core::Object = dynamic, U extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.outline.expect
index 68b8c6d..49a438a 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class Test<T extends core::Object, U extends core::Object> extends core::Object {
+abstract class Test<T extends core::Object = dynamic, U extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   abstract operator [](core::String s) → self::Test::T;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
index 8a8c568..6b1a389 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class Test<T extends core::Object, U extends core::Object> extends core::Object {
+abstract class Test<T extends core::Object = dynamic, U extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.direct.expect
index eec4890..c564570 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.direct.expect
@@ -25,7 +25,7 @@
     : super self::B::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   self::B local;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.direct.transformed.expect
index eec4890..c564570 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.direct.transformed.expect
@@ -25,7 +25,7 @@
     : super self::B::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   self::B local;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.outline.expect
index e4b381c..7db001d 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.outline.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.strong.expect
index 1758b80..a6a2ebc 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.strong.expect
@@ -25,7 +25,7 @@
     : super self::B::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   self::B local;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.strong.transformed.expect
index 1758b80..a6a2ebc 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.strong.transformed.expect
@@ -25,7 +25,7 @@
     : super self::B::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   self::B local;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.direct.expect
index cf78a86..a15f403 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.direct.expect
@@ -47,6 +47,6 @@
     dynamic v7 = let final dynamic #t13 = t in let final dynamic #t14 = #t13.member in let final dynamic #t15 = #t13.member = #t14.-(1) in #t14;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.direct.transformed.expect
index cf78a86..a15f403 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.direct.transformed.expect
@@ -47,6 +47,6 @@
     dynamic v7 = let final dynamic #t13 = t in let final dynamic #t14 = #t13.member in let final dynamic #t15 = #t13.member = #t14.-(1) in #t14;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.outline.expect
index de60c09..c483408 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.outline.expect
@@ -29,7 +29,7 @@
   static method test(self::Test t) → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.strong.expect
index 0009111..a310675 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.strong.expect
@@ -47,6 +47,6 @@
     self::B v7 = let final self::Test #t13 = t in let final self::B #t14 = #t13.{self::Test::member} in let final self::B #t15 = #t13.{self::Test::member} = #t14.{self::B::-}(1) in #t14;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.strong.transformed.expect
index 0009111..a310675 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.strong.transformed.expect
@@ -47,6 +47,6 @@
     self::B v7 = let final self::Test #t13 = t in let final self::B #t14 = #t13.{self::Test::member} in let final self::B #t15 = #t13.{self::Test::member} = #t14.{self::B::-}(1) in #t14;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.direct.expect
index 9e6a640..d006bf2 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.direct.expect
@@ -47,6 +47,6 @@
     dynamic v7 = let final dynamic #t15 = t in #t15.==(null) ? null : let final dynamic #t16 = #t15.member in let final dynamic #t17 = #t15.member = #t16.-(1) in #t16;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.direct.transformed.expect
index 9e6a640..d006bf2 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.direct.transformed.expect
@@ -47,6 +47,6 @@
     dynamic v7 = let final dynamic #t15 = t in #t15.==(null) ? null : let final dynamic #t16 = #t15.member in let final dynamic #t17 = #t15.member = #t16.-(1) in #t16;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.outline.expect
index de60c09..c483408 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.outline.expect
@@ -29,7 +29,7 @@
   static method test(self::Test t) → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.strong.expect
index d13eac7..1fb2336 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.strong.expect
@@ -47,6 +47,6 @@
     self::B v7 = let final self::Test #t15 = t in #t15.==(null) ?{self::B} null : let final self::B #t16 = #t15.{self::Test::member} in let final self::B #t17 = #t15.{self::Test::member} = #t16.{self::B::-}(1) in #t16;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.strong.transformed.expect
index d13eac7..1fb2336 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.strong.transformed.expect
@@ -47,6 +47,6 @@
     self::B v7 = let final self::Test #t15 = t in #t15.==(null) ?{self::B} null : let final self::B #t16 = #t15.{self::Test::member} in let final self::B #t17 = #t15.{self::Test::member} = #t16.{self::B::-}(1) in #t16;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.direct.expect
index ccc4134..ee3089f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.direct.expect
@@ -52,6 +52,6 @@
     dynamic v7 = let final dynamic #t2 = super.{self::Base::member} in let final dynamic #t3 = super.{self::Base::member} = #t2.-(1) in #t2;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.direct.transformed.expect
index ccc4134..ee3089f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.direct.transformed.expect
@@ -52,6 +52,6 @@
     dynamic v7 = let final dynamic #t2 = super.{self::Base::member} in let final dynamic #t3 = super.{self::Base::member} = #t2.-(1) in #t2;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.outline.expect
index 077e4d6..8aa62bc 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.outline.expect
@@ -33,7 +33,7 @@
   method test() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.strong.expect
index 5963336..bb277ea 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.strong.expect
@@ -52,6 +52,6 @@
     self::B v7 = let final self::B #t2 = super.{self::Base::member} in let final self::B #t3 = super.{self::Base::member} = #t2.{self::B::-}(1) in #t2;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.strong.transformed.expect
index 5963336..bb277ea 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.strong.transformed.expect
@@ -52,6 +52,6 @@
     self::B v7 = let final self::B #t2 = super.{self::Base::member} in let final self::B #t3 = super.{self::Base::member} = #t2.{self::B::-}(1) in #t2;
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.direct.expect
index fa2ea61..7aa35c1 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.direct.expect
@@ -27,7 +27,7 @@
     ;
 }
 static field self::B topLevelVariable;
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test_topLevelVariable() → void {
   self::topLevelVariable = self::f<dynamic>();
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.direct.transformed.expect
index fa2ea61..7aa35c1 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.direct.transformed.expect
@@ -27,7 +27,7 @@
     ;
 }
 static field self::B topLevelVariable;
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test_topLevelVariable() → void {
   self::topLevelVariable = self::f<dynamic>();
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.outline.expect
index e348b03..dca7f38 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.outline.expect
@@ -24,7 +24,7 @@
     ;
 }
 static field self::B topLevelVariable;
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method test_topLevelVariable() → void
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.strong.expect
index 84c4d62..153a008 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.strong.expect
@@ -27,7 +27,7 @@
     ;
 }
 static field self::B topLevelVariable;
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test_topLevelVariable() → void {
   self::topLevelVariable = self::f<self::B>();
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.strong.transformed.expect
index 84c4d62..153a008 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.strong.transformed.expect
@@ -27,7 +27,7 @@
     ;
 }
 static field self::B topLevelVariable;
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test_topLevelVariable() → void {
   self::topLevelVariable = self::f<self::B>();
diff --git a/pkg/front_end/testcases/inference_new/infer_logical.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_logical.dart.direct.expect
index 02c47e9..4656afd 100644
--- a/pkg/front_end/testcases/inference_new/infer_logical.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_logical.dart.direct.expect
@@ -4,7 +4,7 @@
 
 static field dynamic x = self::f<dynamic>() || self::f<dynamic>();
 static field dynamic y = self::f<dynamic>() && self::f<dynamic>();
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   dynamic x = self::f<dynamic>() || self::f<dynamic>();
diff --git a/pkg/front_end/testcases/inference_new/infer_logical.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/infer_logical.dart.direct.transformed.expect
index 02c47e9..4656afd 100644
--- a/pkg/front_end/testcases/inference_new/infer_logical.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_logical.dart.direct.transformed.expect
@@ -4,7 +4,7 @@
 
 static field dynamic x = self::f<dynamic>() || self::f<dynamic>();
 static field dynamic y = self::f<dynamic>() && self::f<dynamic>();
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   dynamic x = self::f<dynamic>() || self::f<dynamic>();
diff --git a/pkg/front_end/testcases/inference_new/infer_logical.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_logical.dart.outline.expect
index b13c369..a718af3 100644
--- a/pkg/front_end/testcases/inference_new/infer_logical.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_logical.dart.outline.expect
@@ -4,7 +4,7 @@
 
 static field dynamic x;
 static field dynamic y;
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_logical.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_logical.dart.strong.expect
index b5ead6e..1791f79 100644
--- a/pkg/front_end/testcases/inference_new/infer_logical.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_logical.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static field core::bool x = self::f<core::bool>() || self::f<core::bool>();
 static field core::bool y = self::f<core::bool>() && self::f<core::bool>();
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   core::bool x = self::f<core::bool>() || self::f<core::bool>();
diff --git a/pkg/front_end/testcases/inference_new/infer_logical.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_logical.dart.strong.transformed.expect
index b5ead6e..1791f79 100644
--- a/pkg/front_end/testcases/inference_new/infer_logical.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_logical.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 static field core::bool x = self::f<core::bool>() || self::f<core::bool>();
 static field core::bool y = self::f<core::bool>() && self::f<core::bool>();
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   core::bool x = self::f<core::bool>() || self::f<core::bool>();
diff --git a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.direct.expect b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.direct.expect
index 1bb7b06..2599105 100644
--- a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.direct.expect
@@ -48,7 +48,7 @@
     return null;
   set target(self::B value) → void {}
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test1(self::G g) → void {
   let final dynamic #t1 = g in #t1.target = #t1.target.*(self::f<dynamic>());
diff --git a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.direct.transformed.expect
index 1bb7b06..2599105 100644
--- a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.direct.transformed.expect
@@ -48,7 +48,7 @@
     return null;
   set target(self::B value) → void {}
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test1(self::G g) → void {
   let final dynamic #t1 = g in #t1.target = #t1.target.*(self::f<dynamic>());
diff --git a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.outline.expect b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.outline.expect
index b4b96d8..33e3444 100644
--- a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.outline.expect
@@ -42,7 +42,7 @@
   set target(self::B value) → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method test1(self::G g) → void
   ;
diff --git a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.strong.expect b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.strong.expect
index 1bb49c8..c050b0a 100644
--- a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.strong.expect
@@ -48,7 +48,7 @@
     return null;
   set target(self::B value) → void {}
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test1(self::G g) → void {
   let final self::G #t1 = g in #t1.{self::G::target} = #t1.{self::G::target}.{self::A::*}(self::f<dynamic>() as{TypeError} self::D);
diff --git a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.strong.transformed.expect
index 1bb49c8..c050b0a 100644
--- a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.strong.transformed.expect
@@ -48,7 +48,7 @@
     return null;
   set target(self::B value) → void {}
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test1(self::G g) → void {
   let final self::G #t1 = g in #t1.{self::G::target} = #t1.{self::G::target}.{self::A::*}(self::f<dynamic>() as{TypeError} self::D);
diff --git a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.direct.expect b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.direct.expect
index 3b7b792..6513a99 100644
--- a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.direct.expect
@@ -40,7 +40,7 @@
     : super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static get target() → self::A
   return null;
diff --git a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.direct.transformed.expect
index 3b7b792..6513a99 100644
--- a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.direct.transformed.expect
@@ -40,7 +40,7 @@
     : super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static get target() → self::A
   return null;
diff --git a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.outline.expect b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.outline.expect
index 1e63c29..2642de0 100644
--- a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.outline.expect
@@ -34,7 +34,7 @@
   synthetic constructor •() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static get target() → self::A
   ;
diff --git a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.strong.expect b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.strong.expect
index e2277e6..77baa37 100644
--- a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.strong.expect
@@ -40,7 +40,7 @@
     : super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static get target() → self::A
   return null;
diff --git a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.strong.transformed.expect
index e2277e6..77baa37 100644
--- a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.strong.transformed.expect
@@ -40,7 +40,7 @@
     : super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static get target() → self::A
   return null;
diff --git a/pkg/front_end/testcases/inference_new/super_index_get.dart.direct.expect b/pkg/front_end/testcases/inference_new/super_index_get.dart.direct.expect
index d30ced1..65b823a 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get.dart.direct.expect
@@ -19,6 +19,6 @@
     dynamic x = super.{self::B::[]}(self::f<dynamic>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/super_index_get.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/super_index_get.dart.direct.transformed.expect
index d30ced1..65b823a 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get.dart.direct.transformed.expect
@@ -19,6 +19,6 @@
     dynamic x = super.{self::B::[]}(self::f<dynamic>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/super_index_get.dart.outline.expect b/pkg/front_end/testcases/inference_new/super_index_get.dart.outline.expect
index 662ebfe..ee2a715 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get.dart.outline.expect
@@ -16,7 +16,7 @@
   method h() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/super_index_get.dart.strong.expect b/pkg/front_end/testcases/inference_new/super_index_get.dart.strong.expect
index 78e7bfb..4f219d0 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get.dart.strong.expect
@@ -19,6 +19,6 @@
     core::num x = super.{self::B::[]}(self::f<core::int>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/super_index_get.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/super_index_get.dart.strong.transformed.expect
index 78e7bfb..4f219d0 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get.dart.strong.transformed.expect
@@ -19,6 +19,6 @@
     core::num x = super.{self::B::[]}(self::f<core::int>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.direct.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.direct.expect
index ee237ad..dd25816 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.direct.expect
@@ -3,24 +3,24 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](self::E<self::B::T> x) → self::D<self::B::T>
     return null;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
@@ -30,6 +30,6 @@
     dynamic x = super.{self::B::[]}(self::f<dynamic>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.direct.transformed.expect
index ee237ad..dd25816 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.direct.transformed.expect
@@ -3,24 +3,24 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](self::E<self::B::T> x) → self::D<self::B::T>
     return null;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
@@ -30,6 +30,6 @@
     dynamic x = super.{self::B::[]}(self::f<dynamic>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.outline.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.outline.expect
index 469ee7f..89cded9 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.outline.expect
@@ -3,21 +3,21 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   operator [](self::E<self::B::T> x) → self::D<self::B::T>
     ;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     ;
   operator [](core::Object x) → self::E<asy::Future<self::C::U>>
@@ -25,7 +25,7 @@
   method h() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.strong.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.strong.expect
index b061ba0..b94dffa 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.strong.expect
@@ -3,24 +3,24 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](generic-covariant-impl generic-covariant-interface self::E<self::B::T> x) → self::D<self::B::T>
     return null;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
@@ -30,6 +30,6 @@
     self::D<asy::Future<self::C::U>> x = super.{self::B::[]}(self::f<self::E<asy::Future<self::C::U>>>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.strong.transformed.expect
index b061ba0..b94dffa 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.strong.transformed.expect
@@ -3,24 +3,24 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class D<T extends core::Object> extends core::Object {
+class D<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<T extends core::Object> extends self::D<self::E::T> {
+class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
   synthetic constructor •() → void
     : super self::D::•()
     ;
 }
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](generic-covariant-impl generic-covariant-interface self::E<self::B::T> x) → self::D<self::B::T>
     return null;
 }
-class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
+class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
@@ -30,6 +30,6 @@
     self::D<asy::Future<self::C::U>> x = super.{self::B::[]}(self::f<self::E<asy::Future<self::C::U>>>());
   }
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/switch.dart.direct.expect b/pkg/front_end/testcases/inference_new/switch.dart.direct.expect
index 2cafaef..e90c140 100644
--- a/pkg/front_end/testcases/inference_new/switch.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/switch.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   const constructor •() → void
     : super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test(self::C<core::int> x) → void {
   #L1:
diff --git a/pkg/front_end/testcases/inference_new/switch.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/switch.dart.direct.transformed.expect
index 2cafaef..e90c140 100644
--- a/pkg/front_end/testcases/inference_new/switch.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/switch.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   const constructor •() → void
     : super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test(self::C<core::int> x) → void {
   #L1:
diff --git a/pkg/front_end/testcases/inference_new/switch.dart.outline.expect b/pkg/front_end/testcases/inference_new/switch.dart.outline.expect
index 052db93..9cbe2f4 100644
--- a/pkg/front_end/testcases/inference_new/switch.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/switch.dart.outline.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   const constructor •() → void
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method test(self::C<core::int> x) → void
   ;
diff --git a/pkg/front_end/testcases/inference_new/switch.dart.strong.expect b/pkg/front_end/testcases/inference_new/switch.dart.strong.expect
index 1c6f5e5..5bb4779 100644
--- a/pkg/front_end/testcases/inference_new/switch.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/switch.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   const constructor •() → void
     : super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test(self::C<core::int> x) → void {
   #L1:
diff --git a/pkg/front_end/testcases/inference_new/switch.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/switch.dart.strong.transformed.expect
index 1c6f5e5..5bb4779 100644
--- a/pkg/front_end/testcases/inference_new/switch.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/switch.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   const constructor •() → void
     : super core::Object::•()
     ;
 }
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test(self::C<core::int> x) → void {
   #L1:
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.direct.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.direct.expect
index db7a7bd..9c67644 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.direct.expect
@@ -5,7 +5,7 @@
 static field dynamic v = self::f.call(() → dynamic {
   return 1;
 });
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
 static method main() → dynamic {
   self::v;
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.direct.transformed.expect
index db7a7bd..9c67644 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.direct.transformed.expect
@@ -5,7 +5,7 @@
 static field dynamic v = self::f.call(() → dynamic {
   return 1;
 });
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
 static method main() → dynamic {
   self::v;
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.outline.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.outline.expect
index 6b93fcc..49b1ecf 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static field dynamic v;
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.strong.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.strong.expect
index 5c16415..cd480b4 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.strong.expect
@@ -5,7 +5,7 @@
 static field core::List<core::int> v = self::f.call<core::int>(() → core::int {
   return 1;
 });
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
 static method main() → dynamic {
   self::v;
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.strong.transformed.expect
index 5c16415..cd480b4 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.strong.transformed.expect
@@ -5,7 +5,7 @@
 static field core::List<core::int> v = self::f.call<core::int>(() → core::int {
   return 1;
 });
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
 static method main() → dynamic {
   self::v;
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.direct.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.direct.expect
index db7a7bd..9c67644 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.direct.expect
@@ -5,7 +5,7 @@
 static field dynamic v = self::f.call(() → dynamic {
   return 1;
 });
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
 static method main() → dynamic {
   self::v;
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.direct.transformed.expect
index db7a7bd..9c67644 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.direct.transformed.expect
@@ -5,7 +5,7 @@
 static field dynamic v = self::f.call(() → dynamic {
   return 1;
 });
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
 static method main() → dynamic {
   self::v;
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.outline.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.outline.expect
index 6b93fcc..49b1ecf 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static field dynamic v;
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.strong.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.strong.expect
index 5c16415..cd480b4 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.strong.expect
@@ -5,7 +5,7 @@
 static field core::List<core::int> v = self::f.call<core::int>(() → core::int {
   return 1;
 });
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
 static method main() → dynamic {
   self::v;
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.strong.transformed.expect
index 5c16415..cd480b4 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.strong.transformed.expect
@@ -5,7 +5,7 @@
 static field core::List<core::int> v = self::f.call<core::int>(() → core::int {
   return 1;
 });
-static method f<T extends core::Object>(() → self::f::T g) → core::List<self::f::T>
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
   return <self::f::T>[g.call()];
 static method main() → dynamic {
   self::v;
diff --git a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.direct.expect b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.direct.expect
index 9a95c8a..f799565 100644
--- a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static field dynamic y = self::run<dynamic>(self::printRunning);
-static method run<T extends core::Object>(() → self::run::T f) → self::run::T {
+static method run<T extends core::Object = dynamic>(() → self::run::T f) → self::run::T {
   core::print("running");
   dynamic t = f.call();
   core::print("done running");
diff --git a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.direct.transformed.expect
index 9a95c8a..f799565 100644
--- a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.direct.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static field dynamic y = self::run<dynamic>(self::printRunning);
-static method run<T extends core::Object>(() → self::run::T f) → self::run::T {
+static method run<T extends core::Object = dynamic>(() → self::run::T f) → self::run::T {
   core::print("running");
   dynamic t = f.call();
   core::print("done running");
diff --git a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.outline.expect b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.outline.expect
index c3364c8..4834b17 100644
--- a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static field dynamic y;
-static method run<T extends core::Object>(() → self::run::T f) → self::run::T
+static method run<T extends core::Object = dynamic>(() → self::run::T f) → self::run::T
   ;
 static method printRunning() → void
   ;
diff --git a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.strong.expect b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.strong.expect
index fc015dc..5417786 100644
--- a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static field void y = self::run<void>(self::printRunning);
-static method run<T extends core::Object>(() → self::run::T f) → self::run::T {
+static method run<T extends core::Object = dynamic>(() → self::run::T f) → self::run::T {
   core::print("running");
   self::run::T t = f.call();
   core::print("done running");
diff --git a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.strong.transformed.expect
index fc015dc..5417786 100644
--- a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static field void y = self::run<void>(self::printRunning);
-static method run<T extends core::Object>(() → self::run::T f) → self::run::T {
+static method run<T extends core::Object = dynamic>(() → self::run::T f) → self::run::T {
   core::print("running");
   self::run::T t = f.call();
   core::print("done running");
diff --git a/pkg/front_end/testcases/inference_new/while_loop.dart.direct.expect b/pkg/front_end/testcases/inference_new/while_loop.dart.direct.expect
index 93db6ac0..5f1da21 100644
--- a/pkg/front_end/testcases/inference_new/while_loop.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/while_loop.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   while (self::f<dynamic>()) {
diff --git a/pkg/front_end/testcases/inference_new/while_loop.dart.direct.transformed.expect b/pkg/front_end/testcases/inference_new/while_loop.dart.direct.transformed.expect
index 93db6ac0..5f1da21 100644
--- a/pkg/front_end/testcases/inference_new/while_loop.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/while_loop.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   while (self::f<dynamic>()) {
diff --git a/pkg/front_end/testcases/inference_new/while_loop.dart.outline.expect b/pkg/front_end/testcases/inference_new/while_loop.dart.outline.expect
index ac49c9e..e8c03c5 100644
--- a/pkg/front_end/testcases/inference_new/while_loop.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/while_loop.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference_new/while_loop.dart.strong.expect b/pkg/front_end/testcases/inference_new/while_loop.dart.strong.expect
index 411b444..a2d0208 100644
--- a/pkg/front_end/testcases/inference_new/while_loop.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/while_loop.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   while (self::f<core::bool>()) {
diff --git a/pkg/front_end/testcases/inference_new/while_loop.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/while_loop.dart.strong.transformed.expect
index 411b444..a2d0208 100644
--- a/pkg/front_end/testcases/inference_new/while_loop.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/while_loop.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object>() → self::f::T
+static method f<T extends core::Object = dynamic>() → self::f::T
   return null;
 static method test() → void {
   while (self::f<core::bool>()) {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.direct.expect
index 90d33dd..f767cb7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.direct.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends self::B<self::D::X, self::D::Y>, Y extends self::C<self::D::X, self::D::Y>, Z extends (self::D::Y) → self::D::X, W extends core::num> extends core::Object {
+class D<X extends self::B<self::D::X, self::D::Y> = dynamic, Y extends self::C<self::D::X, self::D::Y> = dynamic, Z extends (self::D::Y) → self::D::X = dynamic, W extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.direct.transformed.expect
index 90d33dd..f767cb7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.direct.transformed.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends self::B<self::D::X, self::D::Y>, Y extends self::C<self::D::X, self::D::Y>, Z extends (self::D::Y) → self::D::X, W extends core::num> extends core::Object {
+class D<X extends self::B<self::D::X, self::D::Y> = dynamic, Y extends self::C<self::D::X, self::D::Y> = dynamic, Z extends (self::D::Y) → self::D::X = dynamic, W extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.outline.expect
index 8f375f5..57cce0b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.outline.expect
@@ -2,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class D<X extends self::B<self::D::X, self::D::Y>, Y extends self::C<self::D::X, self::D::Y>, Z extends (self::D::Y) → self::D::X, W extends core::num> extends core::Object {
+class D<X extends self::B<self::D::X, self::D::Y> = dynamic, Y extends self::C<self::D::X, self::D::Y> = dynamic, Z extends (self::D::Y) → self::D::X = dynamic, W extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.strong.expect
index e209715..0d386e5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.strong.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends self::B<self::D::X, self::D::Y>, Y extends self::C<self::D::X, self::D::Y>, Z extends (self::D::Y) → self::D::X, W extends core::num> extends core::Object {
+class D<X extends self::B<self::D::X, self::D::Y> = self::B<dynamic, dynamic>, Y extends self::C<self::D::X, self::D::Y> = self::C<dynamic, dynamic>, Z extends (self::D::Y) → self::D::X = (core::Null) → self::B<dynamic, dynamic>, W extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.strong.transformed.expect
index e209715..0d386e5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.strong.transformed.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends self::B<self::D::X, self::D::Y>, Y extends self::C<self::D::X, self::D::Y>, Z extends (self::D::Y) → self::D::X, W extends core::num> extends core::Object {
+class D<X extends self::B<self::D::X, self::D::Y> = self::B<dynamic, dynamic>, Y extends self::C<self::D::X, self::D::Y> = self::C<dynamic, dynamic>, Z extends (self::D::Y) → self::D::X = (core::Null) → self::B<dynamic, dynamic>, W extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.direct.expect
index 473030f..39c01de 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.direct.transformed.expect
index 473030f..39c01de 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.outline.expect
index e894545..265f85f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.strong.expect
index 7f1bc8a..0d74fd8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.strong.transformed.expect
index 7f1bc8a..0d74fd8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.direct.expect
index b96b592..ee479f2 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<U extends core::Object> extends core::Object {
+class B<U extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.direct.transformed.expect
index b96b592..ee479f2 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<U extends core::Object> extends core::Object {
+class B<U extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.outline.expect
index 73d2f33..4de7478 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.outline.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class B<U extends core::Object> extends core::Object {
+class B<U extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method fun() → dynamic
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.strong.expect
index b96b592..ee479f2 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<U extends core::Object> extends core::Object {
+class B<U extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.strong.transformed.expect
index b96b592..ee479f2 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<U extends core::Object> extends core::Object {
+class B<U extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.direct.expect
index 571bb1b..fa8a1cd 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.direct.transformed.expect
index 571bb1b..fa8a1cd 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.outline.expect
index e894545..265f85f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.strong.expect
index 7a9a472..9da4319 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.strong.transformed.expect
index 7a9a472..9da4319 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.direct.expect
index b7936f1..d8c6ef0 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "dart:collection" as col;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.direct.transformed.expect
index b7936f1..d8c6ef0 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.direct.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "dart:collection" as col;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.outline.expect
index 09674b8..5eaaf89 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.strong.expect
index b7936f1..d8c6ef0 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "dart:collection" as col;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.strong.transformed.expect
index b7936f1..d8c6ef0 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "dart:collection" as col;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.direct.expect
index 174756c..45a4ce3 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T>> extends core::Object {
+class A<T extends self::A<self::A::T> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.direct.transformed.expect
index 174756c..45a4ce3 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T>> extends core::Object {
+class A<T extends self::A<self::A::T> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.outline.expect
index 4d3d1cf..4c18033 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T>> extends core::Object {
+class A<T extends self::A<self::A::T> = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.strong.expect
index 3657fb3..dca475f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T>> extends core::Object {
+class A<T extends self::A<self::A::T> = self::A<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.strong.transformed.expect
index 3657fb3..dca475f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T>> extends core::Object {
+class A<T extends self::A<self::A::T> = self::A<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.direct.expect
index 7d3b891..a1a10da 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = dynamic> = (T) → dynamic;
 class B extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.direct.transformed.expect
index 7d3b891..a1a10da 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = dynamic> = (T) → dynamic;
 class B extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.outline.expect
index 145b481..ad8fcd8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = dynamic> = (T) → dynamic;
 class B extends core::Object {
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.strong.expect
index 00162ec..a2b129b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = core::num> = (T) → dynamic;
 class B extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.strong.transformed.expect
index 00162ec..a2b129b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = core::num> = (T) → dynamic;
 class B extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.direct.expect
index 52cb506..02da85f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.direct.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
-class B<U extends core::Object> extends core::Object {
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
+class B<U extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.direct.transformed.expect
index 52cb506..02da85f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.direct.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
-class B<U extends core::Object> extends core::Object {
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
+class B<U extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.outline.expect
index 540d4a9..73418c3 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.outline.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
-class B<U extends core::Object> extends core::Object {
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
+class B<U extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method fun() → dynamic
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.strong.expect
index 52cb506..02da85f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.strong.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
-class B<U extends core::Object> extends core::Object {
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
+class B<U extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.strong.transformed.expect
index 52cb506..02da85f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
-class B<U extends core::Object> extends core::Object {
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
+class B<U extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.direct.expect
index fd38c09..939111c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = dynamic> = (T) → dynamic;
 class B extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.direct.transformed.expect
index fd38c09..939111c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = dynamic> = (T) → dynamic;
 class B extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.outline.expect
index 145b481..ad8fcd8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = dynamic> = (T) → dynamic;
 class B extends core::Object {
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.strong.expect
index f63ba9a..d8117ee 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = core::num> = (T) → dynamic;
 class B extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.strong.transformed.expect
index f63ba9a..d8117ee 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = core::num> = (T) → dynamic;
 class B extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.direct.expect
index ff7a612..e707e98 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
 class C extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.direct.transformed.expect
index ff7a612..e707e98 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
 class C extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.outline.expect
index 3c49af3..1796d4d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
 class C extends core::Object {
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.strong.expect
index ff7a612..e707e98 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
 class C extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.strong.transformed.expect
index ff7a612..e707e98 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
 class C extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
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
index 1712b9b..9471d94 100644
--- 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
@@ -2,8 +2,8 @@
 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;
+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::•()
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
index 1712b9b..9471d94 100644
--- 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
@@ -2,8 +2,8 @@
 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;
+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::•()
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
index 78f47f1..f49fc49 100644
--- 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
@@ -2,8 +2,8 @@
 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;
+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
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.direct.expect
index b2e548c..64da62b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num, Y extends (self::C::X) → void> extends core::Object {
+class C<X extends core::num = dynamic, Y extends (self::C::X) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.direct.transformed.expect
index b2e548c..64da62b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num, Y extends (self::C::X) → void> extends core::Object {
+class C<X extends core::num = dynamic, Y extends (self::C::X) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.outline.expect
index 79ffb56..3eb7ec4 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num, Y extends (self::C::X) → void> extends core::Object {
+class C<X extends core::num = dynamic, Y extends (self::C::X) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.strong.expect
index 7752f4e..db904c5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num, Y extends (self::C::X) → void> extends core::Object {
+class C<X extends core::num = core::num, Y extends (self::C::X) → void = (core::Null) → void> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.strong.transformed.expect
index 7752f4e..db904c5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num, Y extends (self::C::X) → void> extends core::Object {
+class C<X extends core::num = core::num, Y extends (self::C::X) → void = (core::Null) → void> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.direct.expect
index 88dc108..769b44d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num, Y extends (self::C::X) → void> extends core::Object {
+class C<X extends core::num = dynamic, Y extends (self::C::X) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.direct.transformed.expect
index 88dc108..769b44d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num, Y extends (self::C::X) → void> extends core::Object {
+class C<X extends core::num = dynamic, Y extends (self::C::X) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.outline.expect
index 4c67675..17ae19a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num, Y extends (self::C::X) → void> extends core::Object {
+class C<X extends core::num = dynamic, Y extends (self::C::X) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.strong.expect
index a18fd3d..df12d4d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num, Y extends (self::C::X) → void> extends core::Object {
+class C<X extends core::num = core::num, Y extends (self::C::X) → void = (core::Null) → void> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.strong.transformed.expect
index a18fd3d..df12d4d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num, Y extends (self::C::X) → void> extends core::Object {
+class C<X extends core::num = core::num, Y extends (self::C::X) → void = (core::Null) → void> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.direct.expect
index 17cca3b..3f02fe8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class D<X extends (self::D::X, self::D::Y) → void, Y extends (self::D::X, self::D::Y) → void> extends core::Object {
+class D<X extends (self::D::X, self::D::Y) → void = dynamic, Y extends (self::D::X, self::D::Y) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends (self::E::X) → void> extends core::Object {
+class E<X extends (self::E::X) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.direct.transformed.expect
index 17cca3b..3f02fe8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class D<X extends (self::D::X, self::D::Y) → void, Y extends (self::D::X, self::D::Y) → void> extends core::Object {
+class D<X extends (self::D::X, self::D::Y) → void = dynamic, Y extends (self::D::X, self::D::Y) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends (self::E::X) → void> extends core::Object {
+class E<X extends (self::E::X) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.outline.expect
index fe0a77b..d10f5b4 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.outline.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class D<X extends (self::D::X, self::D::Y) → void, Y extends (self::D::X, self::D::Y) → void> extends core::Object {
+class D<X extends (self::D::X, self::D::Y) → void = dynamic, Y extends (self::D::X, self::D::Y) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class E<X extends (self::E::X) → void> extends core::Object {
+class E<X extends (self::E::X) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.strong.expect
index b3fcc39..484914d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class D<X extends (self::D::X, self::D::Y) → void, Y extends (self::D::X, self::D::Y) → void> extends core::Object {
+class D<X extends (self::D::X, self::D::Y) → void = (core::Null, core::Null) → void, Y extends (self::D::X, self::D::Y) → void = (core::Null, core::Null) → void> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends (self::E::X) → void> extends core::Object {
+class E<X extends (self::E::X) → void = (core::Null) → void> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.strong.transformed.expect
index b3fcc39..484914d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class D<X extends (self::D::X, self::D::Y) → void, Y extends (self::D::X, self::D::Y) → void> extends core::Object {
+class D<X extends (self::D::X, self::D::Y) → void = (core::Null, core::Null) → void, Y extends (self::D::X, self::D::Y) → void = (core::Null, core::Null) → void> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends (self::E::X) → void> extends core::Object {
+class E<X extends (self::E::X) → void = (core::Null) → void> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.direct.expect
index 803b7ee..d1dd2cb 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class D<X extends (self::D::X, self::D::Y) → void, Y extends (self::D::X, self::D::Y) → void> extends core::Object {
+class D<X extends (self::D::X, self::D::Y) → void = dynamic, Y extends (self::D::X, self::D::Y) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends (self::E::X) → void> extends core::Object {
+class E<X extends (self::E::X) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.direct.transformed.expect
index 803b7ee..d1dd2cb 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class D<X extends (self::D::X, self::D::Y) → void, Y extends (self::D::X, self::D::Y) → void> extends core::Object {
+class D<X extends (self::D::X, self::D::Y) → void = dynamic, Y extends (self::D::X, self::D::Y) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends (self::E::X) → void> extends core::Object {
+class E<X extends (self::E::X) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.outline.expect
index 4006f50..638b8fc 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.outline.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class D<X extends (self::D::X, self::D::Y) → void, Y extends (self::D::X, self::D::Y) → void> extends core::Object {
+class D<X extends (self::D::X, self::D::Y) → void = dynamic, Y extends (self::D::X, self::D::Y) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class E<X extends (self::E::X) → void> extends core::Object {
+class E<X extends (self::E::X) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.strong.expect
index 1797ecd..4a12d44 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class D<X extends (self::D::X, self::D::Y) → void, Y extends (self::D::X, self::D::Y) → void> extends core::Object {
+class D<X extends (self::D::X, self::D::Y) → void = (core::Null, core::Null) → void, Y extends (self::D::X, self::D::Y) → void = (core::Null, core::Null) → void> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends (self::E::X) → void> extends core::Object {
+class E<X extends (self::E::X) → void = (core::Null) → void> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.strong.transformed.expect
index 1797ecd..4a12d44 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class D<X extends (self::D::X, self::D::Y) → void, Y extends (self::D::X, self::D::Y) → void> extends core::Object {
+class D<X extends (self::D::X, self::D::Y) → void = (core::Null, core::Null) → void, Y extends (self::D::X, self::D::Y) → void = (core::Null, core::Null) → void> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends (self::E::X) → void> extends core::Object {
+class E<X extends (self::E::X) → void = (core::Null) → void> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.direct.expect
index 2d50f0b..6c05a05 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.direct.expect
@@ -2,27 +2,27 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends self::A<self::C::X>> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends self::A<self::C::X> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends core::num, Y extends self::A<self::D::X>> extends core::Object {
+class D<X extends core::num = dynamic, Y extends self::A<self::D::X> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends core::Object, Y extends () → self::E::X> extends core::Object {
+class E<X extends core::Object = dynamic, Y extends () → self::E::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<X extends core::num, Y extends () → self::F::X> extends core::Object {
+class F<X extends core::num = dynamic, Y extends () → self::F::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.direct.transformed.expect
index 2d50f0b..6c05a05 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.direct.transformed.expect
@@ -2,27 +2,27 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends self::A<self::C::X>> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends self::A<self::C::X> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends core::num, Y extends self::A<self::D::X>> extends core::Object {
+class D<X extends core::num = dynamic, Y extends self::A<self::D::X> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends core::Object, Y extends () → self::E::X> extends core::Object {
+class E<X extends core::Object = dynamic, Y extends () → self::E::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<X extends core::num, Y extends () → self::F::X> extends core::Object {
+class F<X extends core::num = dynamic, Y extends () → self::F::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.outline.expect
index cca8bfd..5056d3f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.outline.expect
@@ -2,23 +2,23 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class C<X extends core::Object, Y extends self::A<self::C::X>> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends self::A<self::C::X> = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class D<X extends core::num, Y extends self::A<self::D::X>> extends core::Object {
+class D<X extends core::num = dynamic, Y extends self::A<self::D::X> = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class E<X extends core::Object, Y extends () → self::E::X> extends core::Object {
+class E<X extends core::Object = dynamic, Y extends () → self::E::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class F<X extends core::num, Y extends () → self::F::X> extends core::Object {
+class F<X extends core::num = dynamic, Y extends () → self::F::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.strong.expect
index dfad499..9f14994 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.strong.expect
@@ -2,27 +2,27 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends self::A<self::C::X>> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends self::A<self::C::X> = self::A<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends core::num, Y extends self::A<self::D::X>> extends core::Object {
+class D<X extends core::num = core::num, Y extends self::A<self::D::X> = self::A<core::num>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends core::Object, Y extends () → self::E::X> extends core::Object {
+class E<X extends core::Object = dynamic, Y extends () → self::E::X = () → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<X extends core::num, Y extends () → self::F::X> extends core::Object {
+class F<X extends core::num = core::num, Y extends () → self::F::X = () → core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.strong.transformed.expect
index dfad499..9f14994 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.strong.transformed.expect
@@ -2,27 +2,27 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends self::A<self::C::X>> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends self::A<self::C::X> = self::A<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends core::num, Y extends self::A<self::D::X>> extends core::Object {
+class D<X extends core::num = core::num, Y extends self::A<self::D::X> = self::A<core::num>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends core::Object, Y extends () → self::E::X> extends core::Object {
+class E<X extends core::Object = dynamic, Y extends () → self::E::X = () → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<X extends core::num, Y extends () → self::F::X> extends core::Object {
+class F<X extends core::num = core::num, Y extends () → self::F::X = () → core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.direct.expect
index f3f4e88..f3ff161 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.direct.expect
@@ -2,27 +2,27 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends self::A<self::C::X>> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends self::A<self::C::X> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends core::num, Y extends self::A<self::D::X>> extends core::Object {
+class D<X extends core::num = dynamic, Y extends self::A<self::D::X> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends core::Object, Y extends () → self::E::X> extends core::Object {
+class E<X extends core::Object = dynamic, Y extends () → self::E::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<X extends core::num, Y extends () → self::F::X> extends core::Object {
+class F<X extends core::num = dynamic, Y extends () → self::F::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.direct.transformed.expect
index f3f4e88..f3ff161 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.direct.transformed.expect
@@ -2,27 +2,27 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends self::A<self::C::X>> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends self::A<self::C::X> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends core::num, Y extends self::A<self::D::X>> extends core::Object {
+class D<X extends core::num = dynamic, Y extends self::A<self::D::X> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends core::Object, Y extends () → self::E::X> extends core::Object {
+class E<X extends core::Object = dynamic, Y extends () → self::E::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<X extends core::num, Y extends () → self::F::X> extends core::Object {
+class F<X extends core::num = dynamic, Y extends () → self::F::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.outline.expect
index 004ef30..59670f0 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.outline.expect
@@ -2,23 +2,23 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class C<X extends core::Object, Y extends self::A<self::C::X>> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends self::A<self::C::X> = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class D<X extends core::num, Y extends self::A<self::D::X>> extends core::Object {
+class D<X extends core::num = dynamic, Y extends self::A<self::D::X> = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class E<X extends core::Object, Y extends () → self::E::X> extends core::Object {
+class E<X extends core::Object = dynamic, Y extends () → self::E::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class F<X extends core::num, Y extends () → self::F::X> extends core::Object {
+class F<X extends core::num = dynamic, Y extends () → self::F::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.strong.expect
index e2ae82b..c158c43 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.strong.expect
@@ -2,27 +2,27 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends self::A<self::C::X>> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends self::A<self::C::X> = self::A<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends core::num, Y extends self::A<self::D::X>> extends core::Object {
+class D<X extends core::num = core::num, Y extends self::A<self::D::X> = self::A<core::num>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends core::Object, Y extends () → self::E::X> extends core::Object {
+class E<X extends core::Object = dynamic, Y extends () → self::E::X = () → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<X extends core::num, Y extends () → self::F::X> extends core::Object {
+class F<X extends core::num = core::num, Y extends () → self::F::X = () → core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.strong.transformed.expect
index e2ae82b..c158c43 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.strong.transformed.expect
@@ -2,27 +2,27 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends self::A<self::C::X>> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends self::A<self::C::X> = self::A<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends core::num, Y extends self::A<self::D::X>> extends core::Object {
+class D<X extends core::num = core::num, Y extends self::A<self::D::X> = self::A<core::num>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends core::Object, Y extends () → self::E::X> extends core::Object {
+class E<X extends core::Object = dynamic, Y extends () → self::E::X = () → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<X extends core::num, Y extends () → self::F::X> extends core::Object {
+class F<X extends core::num = core::num, Y extends () → self::F::X = () → core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.direct.expect
index d6cc852..b4a02a0 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.direct.expect
@@ -2,27 +2,27 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends self::B<self::D::X, self::D::Y>, Y extends self::C<self::D::X, self::D::Y>> extends core::Object {
+class D<X extends self::B<self::D::X, self::D::Y> = dynamic, Y extends self::C<self::D::X, self::D::Y> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends self::B<self::E::X, self::E::Y>, Y extends () → self::E::X> extends core::Object {
+class E<X extends self::B<self::E::X, self::E::Y> = dynamic, Y extends () → self::E::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<X extends () → self::F::X> extends core::Object {
+class F<X extends () → self::F::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.direct.transformed.expect
index d6cc852..b4a02a0 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.direct.transformed.expect
@@ -2,27 +2,27 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends self::B<self::D::X, self::D::Y>, Y extends self::C<self::D::X, self::D::Y>> extends core::Object {
+class D<X extends self::B<self::D::X, self::D::Y> = dynamic, Y extends self::C<self::D::X, self::D::Y> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends self::B<self::E::X, self::E::Y>, Y extends () → self::E::X> extends core::Object {
+class E<X extends self::B<self::E::X, self::E::Y> = dynamic, Y extends () → self::E::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<X extends () → self::F::X> extends core::Object {
+class F<X extends () → self::F::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.outline.expect
index cd39a20..11e2058 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.outline.expect
@@ -2,23 +2,23 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class D<X extends self::B<self::D::X, self::D::Y>, Y extends self::C<self::D::X, self::D::Y>> extends core::Object {
+class D<X extends self::B<self::D::X, self::D::Y> = dynamic, Y extends self::C<self::D::X, self::D::Y> = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class E<X extends self::B<self::E::X, self::E::Y>, Y extends () → self::E::X> extends core::Object {
+class E<X extends self::B<self::E::X, self::E::Y> = dynamic, Y extends () → self::E::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class F<X extends () → self::F::X> extends core::Object {
+class F<X extends () → self::F::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.strong.expect
index 1ebe886..ef9bb81 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.strong.expect
@@ -2,27 +2,27 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends self::B<self::D::X, self::D::Y>, Y extends self::C<self::D::X, self::D::Y>> extends core::Object {
+class D<X extends self::B<self::D::X, self::D::Y> = self::B<dynamic, dynamic>, Y extends self::C<self::D::X, self::D::Y> = self::C<dynamic, dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends self::B<self::E::X, self::E::Y>, Y extends () → self::E::X> extends core::Object {
+class E<X extends self::B<self::E::X, self::E::Y> = self::B<dynamic, dynamic>, Y extends () → self::E::X = () → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<X extends () → self::F::X> extends core::Object {
+class F<X extends () → self::F::X = () → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.strong.transformed.expect
index 1ebe886..ef9bb81 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.strong.transformed.expect
@@ -2,27 +2,27 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends self::B<self::D::X, self::D::Y>, Y extends self::C<self::D::X, self::D::Y>> extends core::Object {
+class D<X extends self::B<self::D::X, self::D::Y> = self::B<dynamic, dynamic>, Y extends self::C<self::D::X, self::D::Y> = self::C<dynamic, dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends self::B<self::E::X, self::E::Y>, Y extends () → self::E::X> extends core::Object {
+class E<X extends self::B<self::E::X, self::E::Y> = self::B<dynamic, dynamic>, Y extends () → self::E::X = () → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<X extends () → self::F::X> extends core::Object {
+class F<X extends () → self::F::X = () → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.direct.expect
index bc1bfe2..30cbae9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.direct.expect
@@ -2,27 +2,27 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends self::B<self::D::X, self::D::Y>, Y extends self::C<self::D::X, self::D::Y>> extends core::Object {
+class D<X extends self::B<self::D::X, self::D::Y> = dynamic, Y extends self::C<self::D::X, self::D::Y> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends self::B<self::E::X, self::E::Y>, Y extends () → self::E::X> extends core::Object {
+class E<X extends self::B<self::E::X, self::E::Y> = dynamic, Y extends () → self::E::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<X extends () → self::F::X> extends core::Object {
+class F<X extends () → self::F::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.direct.transformed.expect
index bc1bfe2..30cbae9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.direct.transformed.expect
@@ -2,27 +2,27 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends self::B<self::D::X, self::D::Y>, Y extends self::C<self::D::X, self::D::Y>> extends core::Object {
+class D<X extends self::B<self::D::X, self::D::Y> = dynamic, Y extends self::C<self::D::X, self::D::Y> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends self::B<self::E::X, self::E::Y>, Y extends () → self::E::X> extends core::Object {
+class E<X extends self::B<self::E::X, self::E::Y> = dynamic, Y extends () → self::E::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<X extends () → self::F::X> extends core::Object {
+class F<X extends () → self::F::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.outline.expect
index fb41cb5..9cd5b0b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.outline.expect
@@ -2,23 +2,23 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class D<X extends self::B<self::D::X, self::D::Y>, Y extends self::C<self::D::X, self::D::Y>> extends core::Object {
+class D<X extends self::B<self::D::X, self::D::Y> = dynamic, Y extends self::C<self::D::X, self::D::Y> = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class E<X extends self::B<self::E::X, self::E::Y>, Y extends () → self::E::X> extends core::Object {
+class E<X extends self::B<self::E::X, self::E::Y> = dynamic, Y extends () → self::E::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class F<X extends () → self::F::X> extends core::Object {
+class F<X extends () → self::F::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.strong.expect
index 5dd347a..9579477 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.strong.expect
@@ -2,27 +2,27 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends self::B<self::D::X, self::D::Y>, Y extends self::C<self::D::X, self::D::Y>> extends core::Object {
+class D<X extends self::B<self::D::X, self::D::Y> = self::B<dynamic, dynamic>, Y extends self::C<self::D::X, self::D::Y> = self::C<dynamic, dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends self::B<self::E::X, self::E::Y>, Y extends () → self::E::X> extends core::Object {
+class E<X extends self::B<self::E::X, self::E::Y> = self::B<dynamic, dynamic>, Y extends () → self::E::X = () → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<X extends () → self::F::X> extends core::Object {
+class F<X extends () → self::F::X = () → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.strong.transformed.expect
index 5dd347a..9579477 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.strong.transformed.expect
@@ -2,27 +2,27 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends self::B<self::D::X, self::D::Y>, Y extends self::C<self::D::X, self::D::Y>> extends core::Object {
+class D<X extends self::B<self::D::X, self::D::Y> = self::B<dynamic, dynamic>, Y extends self::C<self::D::X, self::D::Y> = self::C<dynamic, dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends self::B<self::E::X, self::E::Y>, Y extends () → self::E::X> extends core::Object {
+class E<X extends self::B<self::E::X, self::E::Y> = self::B<dynamic, dynamic>, Y extends () → self::E::X = () → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<X extends () → self::F::X> extends core::Object {
+class F<X extends () → self::F::X = () → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.direct.expect
index 50c5cd5..8a75651 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.direct.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends (self::C::X) → self::C::X> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends (self::C::X) → self::C::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends core::num, Y extends (self::D::X) → self::D::X> extends core::Object {
+class D<X extends core::num = dynamic, Y extends (self::D::X) → self::D::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.direct.transformed.expect
index 50c5cd5..8a75651 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.direct.transformed.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends (self::C::X) → self::C::X> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends (self::C::X) → self::C::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends core::num, Y extends (self::D::X) → self::D::X> extends core::Object {
+class D<X extends core::num = dynamic, Y extends (self::D::X) → self::D::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.outline.expect
index 3bfdc8a..830d760 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.outline.expect
@@ -2,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class C<X extends core::Object, Y extends (self::C::X) → self::C::X> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends (self::C::X) → self::C::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class D<X extends core::num, Y extends (self::D::X) → self::D::X> extends core::Object {
+class D<X extends core::num = dynamic, Y extends (self::D::X) → self::D::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.strong.expect
index 5e74c50..b12947d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.strong.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends (self::C::X) → self::C::X> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends (self::C::X) → self::C::X = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends core::num, Y extends (self::D::X) → self::D::X> extends core::Object {
+class D<X extends core::num = core::num, Y extends (self::D::X) → self::D::X = (core::Null) → core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.strong.transformed.expect
index 5e74c50..b12947d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.strong.transformed.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends (self::C::X) → self::C::X> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends (self::C::X) → self::C::X = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends core::num, Y extends (self::D::X) → self::D::X> extends core::Object {
+class D<X extends core::num = core::num, Y extends (self::D::X) → self::D::X = (core::Null) → core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.direct.expect
index 3d63194..a5b5d59 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.direct.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends (self::C::X) → self::C::X> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends (self::C::X) → self::C::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends core::num, Y extends (self::D::X) → self::D::X> extends core::Object {
+class D<X extends core::num = dynamic, Y extends (self::D::X) → self::D::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.direct.transformed.expect
index 3d63194..a5b5d59 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.direct.transformed.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends (self::C::X) → self::C::X> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends (self::C::X) → self::C::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends core::num, Y extends (self::D::X) → self::D::X> extends core::Object {
+class D<X extends core::num = dynamic, Y extends (self::D::X) → self::D::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.outline.expect
index 20f0f48..dbc3047 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.outline.expect
@@ -2,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class C<X extends core::Object, Y extends (self::C::X) → self::C::X> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends (self::C::X) → self::C::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class D<X extends core::num, Y extends (self::D::X) → self::D::X> extends core::Object {
+class D<X extends core::num = dynamic, Y extends (self::D::X) → self::D::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.strong.expect
index 454cf25..2e7c48b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.strong.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends (self::C::X) → self::C::X> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends (self::C::X) → self::C::X = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends core::num, Y extends (self::D::X) → self::D::X> extends core::Object {
+class D<X extends core::num = core::num, Y extends (self::D::X) → self::D::X = (core::Null) → core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.strong.transformed.expect
index 454cf25..2e7c48b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.strong.transformed.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends (self::C::X) → self::C::X> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends (self::C::X) → self::C::X = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends core::num, Y extends (self::D::X) → self::D::X> extends core::Object {
+class D<X extends core::num = core::num, Y extends (self::D::X) → self::D::X = (core::Null) → core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.direct.expect
index 2a54655..a3c9999 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.direct.expect
@@ -2,5 +2,5 @@
 import self as self;
 import "dart:collection" as col;
 
-static field col::LinkedListEntry<col::LinkedListEntry<dynamic>> y;
+static field col::LinkedListEntry<dynamic> y;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.direct.transformed.expect
index 2a54655..a3c9999 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.direct.transformed.expect
@@ -2,5 +2,5 @@
 import self as self;
 import "dart:collection" as col;
 
-static field col::LinkedListEntry<col::LinkedListEntry<dynamic>> y;
+static field col::LinkedListEntry<dynamic> y;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.outline.expect
index e9f3933..de12238 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.outline.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:collection" as col;
 
-static field col::LinkedListEntry<col::LinkedListEntry<dynamic>> y;
+static field col::LinkedListEntry<dynamic> y;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.direct.expect
index a268770..8ab5904 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.direct.transformed.expect
index a268770..8ab5904 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.outline.expect
index 4bea4fc..1cc5b2f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.strong.expect
index b63980f..73b735f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.strong.transformed.expect
index b63980f..73b735f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.direct.expect
index 7d9fe60..27905d6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.direct.transformed.expect
index 7d9fe60..27905d6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.outline.expect
index 4bea4fc..1cc5b2f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.strong.expect
index bf8ac07..122f608 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.strong.transformed.expect
index bf8ac07..122f608 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.direct.expect
index 964c2f9..5072d9a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends core::num, S extends core::List<self::B::T>> extends self::A<self::B::T> {
+class B<T extends core::num = dynamic, S extends core::List<self::B::T> = dynamic> extends self::A<self::B::T> {
   constructor •([self::B::T x = null]) → void
     : super self::A::•() {}
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.direct.transformed.expect
index 964c2f9..5072d9a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends core::num, S extends core::List<self::B::T>> extends self::A<self::B::T> {
+class B<T extends core::num = dynamic, S extends core::List<self::B::T> = dynamic> extends self::A<self::B::T> {
   constructor •([self::B::T x = null]) → void
     : super self::A::•() {}
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.outline.expect
index feaa0f3..25e2d3a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.outline.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class B<T extends core::num, S extends core::List<self::B::T>> extends self::A<self::B::T> {
+class B<T extends core::num = dynamic, S extends core::List<self::B::T> = dynamic> extends self::A<self::B::T> {
   constructor •([self::B::T x]) → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.strong.expect
index cf6dc06..2851c1c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends core::num, S extends core::List<self::B::T>> extends self::A<self::B::T> {
+class B<T extends core::num = core::num, S extends core::List<self::B::T> = core::List<core::num>> extends self::A<self::B::T> {
   constructor •([self::B::T x = null]) → void
     : super self::A::•() {}
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.strong.transformed.expect
index cf6dc06..2851c1c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends core::num, S extends core::List<self::B::T>> extends self::A<self::B::T> {
+class B<T extends core::num = core::num, S extends core::List<self::B::T> = core::List<core::num>> extends self::A<self::B::T> {
   constructor •([self::B::T x = null]) → void
     : super self::A::•() {}
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.direct.expect
index b7dd39e..7c07c34 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Comparable<self::B::T>> extends core::Object {
+class B<T extends core::Comparable<self::B::T> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.direct.transformed.expect
index b7dd39e..7c07c34 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Comparable<self::B::T>> extends core::Object {
+class B<T extends core::Comparable<self::B::T> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.outline.expect
index 50dad2d..99fed4d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Comparable<self::B::T>> extends core::Object {
+class B<T extends core::Comparable<self::B::T> = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect
index c3b6891..893b908 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Comparable<self::B::T>> extends core::Object {
+class B<T extends core::Comparable<self::B::T> = core::Comparable<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.transformed.expect
index c3b6891..893b908 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Comparable<self::B::T>> extends core::Object {
+class B<T extends core::Comparable<self::B::T> = core::Comparable<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.direct.expect
index f455106..7e7802f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.direct.transformed.expect
index f455106..7e7802f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.outline.expect
index 792d380..8d47cf3 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.strong.expect
index 8b8b879..2dbd3fa 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.strong.transformed.expect
index 8b8b879..2dbd3fa 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.direct.expect
index 4d4eb3a..752d9aa 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.direct.transformed.expect
index 4d4eb3a..752d9aa 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.outline.expect
index 303959e..b6268f4 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.strong.expect
index e031824..bae54a3 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.strong.transformed.expect
index e031824..bae54a3 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.direct.expect
index 7c0008d..513f483 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<S extends core::Object> extends core::Object {
+class B<S extends core::Object = dynamic> extends core::Object {
   final field core::List<self::A<self::B::S>> foo = <self::A<self::B::S>>[];
   final field core::List<self::A<core::num>> bar = <self::A<core::num>>[];
   synthetic constructor •() → void
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.direct.transformed.expect
index 7c0008d..513f483 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<S extends core::Object> extends core::Object {
+class B<S extends core::Object = dynamic> extends core::Object {
   final field core::List<self::A<self::B::S>> foo = <self::A<self::B::S>>[];
   final field core::List<self::A<core::num>> bar = <self::A<core::num>>[];
   synthetic constructor •() → void
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.outline.expect
index 30f1130..c839345 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.outline.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class B<S extends core::Object> extends core::Object {
+class B<S extends core::Object = dynamic> extends core::Object {
   final field core::List<self::A<self::B::S>> foo;
   final field core::List<self::A<core::num>> bar;
   synthetic constructor •() → void
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.strong.expect
index 7c0008d..513f483 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<S extends core::Object> extends core::Object {
+class B<S extends core::Object = dynamic> extends core::Object {
   final field core::List<self::A<self::B::S>> foo = <self::A<self::B::S>>[];
   final field core::List<self::A<core::num>> bar = <self::A<core::num>>[];
   synthetic constructor •() → void
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.strong.transformed.expect
index 7c0008d..513f483 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<S extends core::Object> extends core::Object {
+class B<S extends core::Object = dynamic> extends core::Object {
   final field core::List<self::A<self::B::S>> foo = <self::A<self::B::S>>[];
   final field core::List<self::A<core::num>> bar = <self::A<core::num>>[];
   synthetic constructor •() → void
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.direct.expect
index cde27c3..936727b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.direct.transformed.expect
index cde27c3..936727b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.outline.expect
index 303959e..b6268f4 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.strong.expect
index 945d678..2a9e814 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.strong.transformed.expect
index 945d678..2a9e814 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.expect
index 9ecef65..e8031c5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.expect
@@ -2,52 +2,52 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends self::A<self::D::X>, Y extends self::A<self::D::Y>> extends core::Object {
+class D<X extends self::A<self::D::X> = dynamic, Y extends self::A<self::D::Y> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<W extends self::B<self::E::W, self::E::X>, X extends self::C<self::E::W, self::E::X>, Y extends self::B<self::E::Y, self::E::Z>, Z extends self::C<self::E::Y, self::E::Z>> extends core::Object {
+class E<W extends self::B<self::E::W, self::E::X> = dynamic, X extends self::C<self::E::W, self::E::X> = dynamic, Y extends self::B<self::E::Y, self::E::Z> = dynamic, Z extends self::C<self::E::Y, self::E::Z> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<V extends core::num, W extends self::B<self::F::W, self::F::X>, X extends self::C<self::F::W, self::F::X>, Y extends self::B<self::F::W, self::F::X>, Z extends self::C<self::F::Y, self::F::Z>> extends core::Object {
+class F<V extends core::num = dynamic, W extends self::B<self::F::W, self::F::X> = dynamic, X extends self::C<self::F::W, self::F::X> = dynamic, Y extends self::B<self::F::W, self::F::X> = dynamic, Z extends self::C<self::F::Y, self::F::Z> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class G<V extends core::num, W extends self::B<self::G::V, self::G::X>, X extends self::C<self::G::W, self::G::V>, Y extends self::B<self::G::W, self::G::X>, Z extends self::C<self::G::Y, self::G::Z>> extends core::Object {
+class G<V extends core::num = dynamic, W extends self::B<self::G::V, self::G::X> = dynamic, X extends self::C<self::G::W, self::G::V> = dynamic, Y extends self::B<self::G::W, self::G::X> = dynamic, Z extends self::C<self::G::Y, self::G::Z> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class H<S extends self::A<self::H::S>, T extends self::B<self::H::T, self::H::U>, U extends self::C<self::H::T, self::H::U>, V extends self::A<self::H::V>, W extends self::H::S, X extends self::H::T, Y extends self::H::U, Z extends self::H::V> extends core::Object {
+class H<S extends self::A<self::H::S> = dynamic, T extends self::B<self::H::T, self::H::U> = dynamic, U extends self::C<self::H::T, self::H::U> = dynamic, V extends self::A<self::H::V> = dynamic, W extends self::H::S = dynamic, X extends self::H::T = dynamic, Y extends self::H::U = dynamic, Z extends self::H::V = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class I<T extends self::I::U, U extends self::I::Y, V extends (self::I::W) → dynamic, W extends (self::I::X) → dynamic, X extends (self::I::V) → dynamic, Y extends self::I::Z, Z extends self::I::T> extends core::Object {
+class I<T extends self::I::U = dynamic, U extends self::I::Y = dynamic, V extends (self::I::W) → dynamic = dynamic, W extends (self::I::X) → dynamic = dynamic, X extends (self::I::V) → dynamic = dynamic, Y extends self::I::Z = dynamic, Z extends self::I::T = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class J<S extends (self::J::U) → self::J::T, T extends (self::J::S) → self::J::U, U extends (self::J::T) → self::J::S, V extends self::J::W, W extends self::J::X, X extends (self::J::V) → self::J::Y, Y extends self::J::Z, Z extends self::J::X> extends core::Object {
+class J<S extends (self::J::U) → self::J::T = dynamic, T extends (self::J::S) → self::J::U = dynamic, U extends (self::J::T) → self::J::S = dynamic, V extends self::J::W = dynamic, W extends self::J::X = dynamic, X extends (self::J::V) → self::J::Y = dynamic, Y extends self::J::Z = dynamic, Z extends self::J::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.transformed.expect
index 9ecef65..e8031c5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.transformed.expect
@@ -2,52 +2,52 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends self::A<self::D::X>, Y extends self::A<self::D::Y>> extends core::Object {
+class D<X extends self::A<self::D::X> = dynamic, Y extends self::A<self::D::Y> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<W extends self::B<self::E::W, self::E::X>, X extends self::C<self::E::W, self::E::X>, Y extends self::B<self::E::Y, self::E::Z>, Z extends self::C<self::E::Y, self::E::Z>> extends core::Object {
+class E<W extends self::B<self::E::W, self::E::X> = dynamic, X extends self::C<self::E::W, self::E::X> = dynamic, Y extends self::B<self::E::Y, self::E::Z> = dynamic, Z extends self::C<self::E::Y, self::E::Z> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<V extends core::num, W extends self::B<self::F::W, self::F::X>, X extends self::C<self::F::W, self::F::X>, Y extends self::B<self::F::W, self::F::X>, Z extends self::C<self::F::Y, self::F::Z>> extends core::Object {
+class F<V extends core::num = dynamic, W extends self::B<self::F::W, self::F::X> = dynamic, X extends self::C<self::F::W, self::F::X> = dynamic, Y extends self::B<self::F::W, self::F::X> = dynamic, Z extends self::C<self::F::Y, self::F::Z> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class G<V extends core::num, W extends self::B<self::G::V, self::G::X>, X extends self::C<self::G::W, self::G::V>, Y extends self::B<self::G::W, self::G::X>, Z extends self::C<self::G::Y, self::G::Z>> extends core::Object {
+class G<V extends core::num = dynamic, W extends self::B<self::G::V, self::G::X> = dynamic, X extends self::C<self::G::W, self::G::V> = dynamic, Y extends self::B<self::G::W, self::G::X> = dynamic, Z extends self::C<self::G::Y, self::G::Z> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class H<S extends self::A<self::H::S>, T extends self::B<self::H::T, self::H::U>, U extends self::C<self::H::T, self::H::U>, V extends self::A<self::H::V>, W extends self::H::S, X extends self::H::T, Y extends self::H::U, Z extends self::H::V> extends core::Object {
+class H<S extends self::A<self::H::S> = dynamic, T extends self::B<self::H::T, self::H::U> = dynamic, U extends self::C<self::H::T, self::H::U> = dynamic, V extends self::A<self::H::V> = dynamic, W extends self::H::S = dynamic, X extends self::H::T = dynamic, Y extends self::H::U = dynamic, Z extends self::H::V = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class I<T extends self::I::U, U extends self::I::Y, V extends (self::I::W) → dynamic, W extends (self::I::X) → dynamic, X extends (self::I::V) → dynamic, Y extends self::I::Z, Z extends self::I::T> extends core::Object {
+class I<T extends self::I::U = dynamic, U extends self::I::Y = dynamic, V extends (self::I::W) → dynamic = dynamic, W extends (self::I::X) → dynamic = dynamic, X extends (self::I::V) → dynamic = dynamic, Y extends self::I::Z = dynamic, Z extends self::I::T = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class J<S extends (self::J::U) → self::J::T, T extends (self::J::S) → self::J::U, U extends (self::J::T) → self::J::S, V extends self::J::W, W extends self::J::X, X extends (self::J::V) → self::J::Y, Y extends self::J::Z, Z extends self::J::X> extends core::Object {
+class J<S extends (self::J::U) → self::J::T = dynamic, T extends (self::J::S) → self::J::U = dynamic, U extends (self::J::T) → self::J::S = dynamic, V extends self::J::W = dynamic, W extends self::J::X = dynamic, X extends (self::J::V) → self::J::Y = dynamic, Y extends self::J::Z = dynamic, Z extends self::J::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.outline.expect
index 64dbcc8..c917def 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.outline.expect
@@ -2,43 +2,43 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class D<X extends self::A<self::D::X>, Y extends self::A<self::D::Y>> extends core::Object {
+class D<X extends self::A<self::D::X> = dynamic, Y extends self::A<self::D::Y> = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class E<W extends self::B<self::E::W, self::E::X>, X extends self::C<self::E::W, self::E::X>, Y extends self::B<self::E::Y, self::E::Z>, Z extends self::C<self::E::Y, self::E::Z>> extends core::Object {
+class E<W extends self::B<self::E::W, self::E::X> = dynamic, X extends self::C<self::E::W, self::E::X> = dynamic, Y extends self::B<self::E::Y, self::E::Z> = dynamic, Z extends self::C<self::E::Y, self::E::Z> = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class F<V extends core::num, W extends self::B<self::F::W, self::F::X>, X extends self::C<self::F::W, self::F::X>, Y extends self::B<self::F::W, self::F::X>, Z extends self::C<self::F::Y, self::F::Z>> extends core::Object {
+class F<V extends core::num = dynamic, W extends self::B<self::F::W, self::F::X> = dynamic, X extends self::C<self::F::W, self::F::X> = dynamic, Y extends self::B<self::F::W, self::F::X> = dynamic, Z extends self::C<self::F::Y, self::F::Z> = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class G<V extends core::num, W extends self::B<self::G::V, self::G::X>, X extends self::C<self::G::W, self::G::V>, Y extends self::B<self::G::W, self::G::X>, Z extends self::C<self::G::Y, self::G::Z>> extends core::Object {
+class G<V extends core::num = dynamic, W extends self::B<self::G::V, self::G::X> = dynamic, X extends self::C<self::G::W, self::G::V> = dynamic, Y extends self::B<self::G::W, self::G::X> = dynamic, Z extends self::C<self::G::Y, self::G::Z> = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class H<S extends self::A<self::H::S>, T extends self::B<self::H::T, self::H::U>, U extends self::C<self::H::T, self::H::U>, V extends self::A<self::H::V>, W extends self::H::S, X extends self::H::T, Y extends self::H::U, Z extends self::H::V> extends core::Object {
+class H<S extends self::A<self::H::S> = dynamic, T extends self::B<self::H::T, self::H::U> = dynamic, U extends self::C<self::H::T, self::H::U> = dynamic, V extends self::A<self::H::V> = dynamic, W extends self::H::S = dynamic, X extends self::H::T = dynamic, Y extends self::H::U = dynamic, Z extends self::H::V = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class I<T extends self::I::U, U extends self::I::Y, V extends (self::I::W) → dynamic, W extends (self::I::X) → dynamic, X extends (self::I::V) → dynamic, Y extends self::I::Z, Z extends self::I::T> extends core::Object {
+class I<T extends self::I::U = dynamic, U extends self::I::Y = dynamic, V extends (self::I::W) → dynamic = dynamic, W extends (self::I::X) → dynamic = dynamic, X extends (self::I::V) → dynamic = dynamic, Y extends self::I::Z = dynamic, Z extends self::I::T = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class J<S extends (self::J::U) → self::J::T, T extends (self::J::S) → self::J::U, U extends (self::J::T) → self::J::S, V extends self::J::W, W extends self::J::X, X extends (self::J::V) → self::J::Y, Y extends self::J::Z, Z extends self::J::X> extends core::Object {
+class J<S extends (self::J::U) → self::J::T = dynamic, T extends (self::J::S) → self::J::U = dynamic, U extends (self::J::T) → self::J::S = dynamic, V extends self::J::W = dynamic, W extends self::J::X = dynamic, X extends (self::J::V) → self::J::Y = dynamic, Y extends self::J::Z = dynamic, Z extends self::J::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.expect
index b890460..7b2576f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.expect
@@ -2,52 +2,52 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends self::A<self::D::X>, Y extends self::A<self::D::Y>> extends core::Object {
+class D<X extends self::A<self::D::X> = self::A<dynamic>, Y extends self::A<self::D::Y> = self::A<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<W extends self::B<self::E::W, self::E::X>, X extends self::C<self::E::W, self::E::X>, Y extends self::B<self::E::Y, self::E::Z>, Z extends self::C<self::E::Y, self::E::Z>> extends core::Object {
+class E<W extends self::B<self::E::W, self::E::X> = self::B<dynamic, dynamic>, X extends self::C<self::E::W, self::E::X> = self::C<dynamic, dynamic>, Y extends self::B<self::E::Y, self::E::Z> = self::B<dynamic, dynamic>, Z extends self::C<self::E::Y, self::E::Z> = self::C<dynamic, dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<V extends core::num, W extends self::B<self::F::W, self::F::X>, X extends self::C<self::F::W, self::F::X>, Y extends self::B<self::F::W, self::F::X>, Z extends self::C<self::F::Y, self::F::Z>> extends core::Object {
+class F<V extends core::num = core::num, W extends self::B<self::F::W, self::F::X> = self::B<dynamic, dynamic>, X extends self::C<self::F::W, self::F::X> = self::C<dynamic, dynamic>, Y extends self::B<self::F::W, self::F::X> = self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, Z extends self::C<self::F::Y, self::F::Z> = self::C<self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class G<V extends core::num, W extends self::B<self::G::V, self::G::X>, X extends self::C<self::G::W, self::G::V>, Y extends self::B<self::G::W, self::G::X>, Z extends self::C<self::G::Y, self::G::Z>> extends core::Object {
+class G<V extends core::num = core::num, W extends self::B<self::G::V, self::G::X> = self::B<core::num, dynamic>, X extends self::C<self::G::W, self::G::V> = self::C<dynamic, core::num>, Y extends self::B<self::G::W, self::G::X> = self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, Z extends self::C<self::G::Y, self::G::Z> = self::C<self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class H<S extends self::A<self::H::S>, T extends self::B<self::H::T, self::H::U>, U extends self::C<self::H::T, self::H::U>, V extends self::A<self::H::V>, W extends self::H::S, X extends self::H::T, Y extends self::H::U, Z extends self::H::V> extends core::Object {
+class H<S extends self::A<self::H::S> = self::A<dynamic>, T extends self::B<self::H::T, self::H::U> = self::B<dynamic, dynamic>, U extends self::C<self::H::T, self::H::U> = self::C<dynamic, dynamic>, V extends self::A<self::H::V> = self::A<dynamic>, W extends self::H::S = self::A<dynamic>, X extends self::H::T = self::B<dynamic, dynamic>, Y extends self::H::U = self::C<dynamic, dynamic>, Z extends self::H::V = self::A<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class I<T extends self::I::U, U extends self::I::Y, V extends (self::I::W) → dynamic, W extends (self::I::X) → dynamic, X extends (self::I::V) → dynamic, Y extends self::I::Z, Z extends self::I::T> extends core::Object {
+class I<T extends self::I::U = dynamic, U extends self::I::Y = dynamic, V extends (self::I::W) → dynamic = (core::Null) → dynamic, W extends (self::I::X) → dynamic = (core::Null) → dynamic, X extends (self::I::V) → dynamic = (core::Null) → dynamic, Y extends self::I::Z = dynamic, Z extends self::I::T = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class J<S extends (self::J::U) → self::J::T, T extends (self::J::S) → self::J::U, U extends (self::J::T) → self::J::S, V extends self::J::W, W extends self::J::X, X extends (self::J::V) → self::J::Y, Y extends self::J::Z, Z extends self::J::X> extends core::Object {
+class J<S extends (self::J::U) → self::J::T = (core::Null) → dynamic, T extends (self::J::S) → self::J::U = (core::Null) → dynamic, U extends (self::J::T) → self::J::S = (core::Null) → dynamic, V extends self::J::W = dynamic, W extends self::J::X = dynamic, X extends (self::J::V) → self::J::Y = (core::Null) → dynamic, Y extends self::J::Z = dynamic, Z extends self::J::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.transformed.expect
index b890460..7b2576f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.transformed.expect
@@ -2,52 +2,52 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object> extends core::Object {
+class A<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C<X extends core::Object, Y extends core::Object> extends core::Object {
+class C<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D<X extends self::A<self::D::X>, Y extends self::A<self::D::Y>> extends core::Object {
+class D<X extends self::A<self::D::X> = self::A<dynamic>, Y extends self::A<self::D::Y> = self::A<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<W extends self::B<self::E::W, self::E::X>, X extends self::C<self::E::W, self::E::X>, Y extends self::B<self::E::Y, self::E::Z>, Z extends self::C<self::E::Y, self::E::Z>> extends core::Object {
+class E<W extends self::B<self::E::W, self::E::X> = self::B<dynamic, dynamic>, X extends self::C<self::E::W, self::E::X> = self::C<dynamic, dynamic>, Y extends self::B<self::E::Y, self::E::Z> = self::B<dynamic, dynamic>, Z extends self::C<self::E::Y, self::E::Z> = self::C<dynamic, dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class F<V extends core::num, W extends self::B<self::F::W, self::F::X>, X extends self::C<self::F::W, self::F::X>, Y extends self::B<self::F::W, self::F::X>, Z extends self::C<self::F::Y, self::F::Z>> extends core::Object {
+class F<V extends core::num = core::num, W extends self::B<self::F::W, self::F::X> = self::B<dynamic, dynamic>, X extends self::C<self::F::W, self::F::X> = self::C<dynamic, dynamic>, Y extends self::B<self::F::W, self::F::X> = self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, Z extends self::C<self::F::Y, self::F::Z> = self::C<self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class G<V extends core::num, W extends self::B<self::G::V, self::G::X>, X extends self::C<self::G::W, self::G::V>, Y extends self::B<self::G::W, self::G::X>, Z extends self::C<self::G::Y, self::G::Z>> extends core::Object {
+class G<V extends core::num = core::num, W extends self::B<self::G::V, self::G::X> = self::B<core::num, dynamic>, X extends self::C<self::G::W, self::G::V> = self::C<dynamic, core::num>, Y extends self::B<self::G::W, self::G::X> = self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, Z extends self::C<self::G::Y, self::G::Z> = self::C<self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class H<S extends self::A<self::H::S>, T extends self::B<self::H::T, self::H::U>, U extends self::C<self::H::T, self::H::U>, V extends self::A<self::H::V>, W extends self::H::S, X extends self::H::T, Y extends self::H::U, Z extends self::H::V> extends core::Object {
+class H<S extends self::A<self::H::S> = self::A<dynamic>, T extends self::B<self::H::T, self::H::U> = self::B<dynamic, dynamic>, U extends self::C<self::H::T, self::H::U> = self::C<dynamic, dynamic>, V extends self::A<self::H::V> = self::A<dynamic>, W extends self::H::S = self::A<dynamic>, X extends self::H::T = self::B<dynamic, dynamic>, Y extends self::H::U = self::C<dynamic, dynamic>, Z extends self::H::V = self::A<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class I<T extends self::I::U, U extends self::I::Y, V extends (self::I::W) → dynamic, W extends (self::I::X) → dynamic, X extends (self::I::V) → dynamic, Y extends self::I::Z, Z extends self::I::T> extends core::Object {
+class I<T extends self::I::U = dynamic, U extends self::I::Y = dynamic, V extends (self::I::W) → dynamic = (core::Null) → dynamic, W extends (self::I::X) → dynamic = (core::Null) → dynamic, X extends (self::I::V) → dynamic = (core::Null) → dynamic, Y extends self::I::Z = dynamic, Z extends self::I::T = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class J<S extends (self::J::U) → self::J::T, T extends (self::J::S) → self::J::U, U extends (self::J::T) → self::J::S, V extends self::J::W, W extends self::J::X, X extends (self::J::V) → self::J::Y, Y extends self::J::Z, Z extends self::J::X> extends core::Object {
+class J<S extends (self::J::U) → self::J::T = (core::Null) → dynamic, T extends (self::J::S) → self::J::U = (core::Null) → dynamic, U extends (self::J::T) → self::J::S = (core::Null) → dynamic, V extends self::J::W = dynamic, W extends self::J::X = dynamic, X extends (self::J::V) → self::J::Y = (core::Null) → dynamic, Y extends self::J::Z = dynamic, Z extends self::J::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.direct.expect
index 74147c8..c0cb9b8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.direct.expect
@@ -2,52 +2,52 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C1<X extends (self::C1::Y) → self::C1::X, Y extends (self::C1::Y) → self::C1::X> extends core::Object {
+class C1<X extends (self::C1::Y) → self::C1::X = dynamic, Y extends (self::C1::Y) → self::C1::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C2<X extends (self::C2::Y) → self::C2::X, Y extends (self::C2::X) → self::C2::Y> extends core::Object {
+class C2<X extends (self::C2::Y) → self::C2::X = dynamic, Y extends (self::C2::X) → self::C2::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X, Y extends (self::C3::X, self::C3::Y) → self::C3::X> extends core::Object {
+class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X, Y extends (self::C4::X, self::C4::Y) → self::C4::Y> extends core::Object {
+class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D1<X extends self::B<self::D1::X, self::D1::Y>, Y extends (self::D1::Y) → self::D1::X> extends core::Object {
+class D1<X extends self::B<self::D1::X, self::D1::Y> = dynamic, Y extends (self::D1::Y) → self::D1::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D2<X extends self::B<self::D2::X, self::D2::Y>, Y extends (self::D2::X) → self::D2::Y> extends core::Object {
+class D2<X extends self::B<self::D2::X, self::D2::Y> = dynamic, Y extends (self::D2::X) → self::D2::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D3<X extends self::B<self::D3::X, self::D3::Y>, Y extends (self::D3::X, self::D3::Y) → self::D3::X> extends core::Object {
+class D3<X extends self::B<self::D3::X, self::D3::Y> = dynamic, Y extends (self::D3::X, self::D3::Y) → self::D3::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D4<X extends self::B<self::D4::X, self::D4::Y>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y> extends core::Object {
+class D4<X extends self::B<self::D4::X, self::D4::Y> = dynamic, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends (self::E::X) → self::E::X> extends core::Object {
+class E<X extends (self::E::X) → self::E::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.direct.transformed.expect
index 74147c8..c0cb9b8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.direct.transformed.expect
@@ -2,52 +2,52 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C1<X extends (self::C1::Y) → self::C1::X, Y extends (self::C1::Y) → self::C1::X> extends core::Object {
+class C1<X extends (self::C1::Y) → self::C1::X = dynamic, Y extends (self::C1::Y) → self::C1::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C2<X extends (self::C2::Y) → self::C2::X, Y extends (self::C2::X) → self::C2::Y> extends core::Object {
+class C2<X extends (self::C2::Y) → self::C2::X = dynamic, Y extends (self::C2::X) → self::C2::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X, Y extends (self::C3::X, self::C3::Y) → self::C3::X> extends core::Object {
+class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X, Y extends (self::C4::X, self::C4::Y) → self::C4::Y> extends core::Object {
+class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D1<X extends self::B<self::D1::X, self::D1::Y>, Y extends (self::D1::Y) → self::D1::X> extends core::Object {
+class D1<X extends self::B<self::D1::X, self::D1::Y> = dynamic, Y extends (self::D1::Y) → self::D1::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D2<X extends self::B<self::D2::X, self::D2::Y>, Y extends (self::D2::X) → self::D2::Y> extends core::Object {
+class D2<X extends self::B<self::D2::X, self::D2::Y> = dynamic, Y extends (self::D2::X) → self::D2::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D3<X extends self::B<self::D3::X, self::D3::Y>, Y extends (self::D3::X, self::D3::Y) → self::D3::X> extends core::Object {
+class D3<X extends self::B<self::D3::X, self::D3::Y> = dynamic, Y extends (self::D3::X, self::D3::Y) → self::D3::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D4<X extends self::B<self::D4::X, self::D4::Y>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y> extends core::Object {
+class D4<X extends self::B<self::D4::X, self::D4::Y> = dynamic, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends (self::E::X) → self::E::X> extends core::Object {
+class E<X extends (self::E::X) → self::E::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.outline.expect
index 9ba0b7d..3b6681f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.outline.expect
@@ -2,43 +2,43 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class C1<X extends (self::C1::Y) → self::C1::X, Y extends (self::C1::Y) → self::C1::X> extends core::Object {
+class C1<X extends (self::C1::Y) → self::C1::X = dynamic, Y extends (self::C1::Y) → self::C1::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class C2<X extends (self::C2::Y) → self::C2::X, Y extends (self::C2::X) → self::C2::Y> extends core::Object {
+class C2<X extends (self::C2::Y) → self::C2::X = dynamic, Y extends (self::C2::X) → self::C2::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X, Y extends (self::C3::X, self::C3::Y) → self::C3::X> extends core::Object {
+class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X, Y extends (self::C4::X, self::C4::Y) → self::C4::Y> extends core::Object {
+class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class D1<X extends self::B<self::D1::X, self::D1::Y>, Y extends (self::D1::Y) → self::D1::X> extends core::Object {
+class D1<X extends self::B<self::D1::X, self::D1::Y> = dynamic, Y extends (self::D1::Y) → self::D1::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class D2<X extends self::B<self::D2::X, self::D2::Y>, Y extends (self::D2::X) → self::D2::Y> extends core::Object {
+class D2<X extends self::B<self::D2::X, self::D2::Y> = dynamic, Y extends (self::D2::X) → self::D2::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class D3<X extends self::B<self::D3::X, self::D3::Y>, Y extends (self::D3::X, self::D3::Y) → self::D3::X> extends core::Object {
+class D3<X extends self::B<self::D3::X, self::D3::Y> = dynamic, Y extends (self::D3::X, self::D3::Y) → self::D3::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class D4<X extends self::B<self::D4::X, self::D4::Y>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y> extends core::Object {
+class D4<X extends self::B<self::D4::X, self::D4::Y> = dynamic, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class E<X extends (self::E::X) → self::E::X> extends core::Object {
+class E<X extends (self::E::X) → self::E::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.strong.expect
index 77802e7..3621db7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.strong.expect
@@ -2,52 +2,52 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C1<X extends (self::C1::Y) → self::C1::X, Y extends (self::C1::Y) → self::C1::X> extends core::Object {
+class C1<X extends (self::C1::Y) → self::C1::X = (core::Null) → dynamic, Y extends (self::C1::Y) → self::C1::X = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C2<X extends (self::C2::Y) → self::C2::X, Y extends (self::C2::X) → self::C2::Y> extends core::Object {
+class C2<X extends (self::C2::Y) → self::C2::X = (core::Null) → dynamic, Y extends (self::C2::X) → self::C2::Y = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X, Y extends (self::C3::X, self::C3::Y) → self::C3::X> extends core::Object {
+class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = (core::Null, core::Null) → dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = (core::Null, core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X, Y extends (self::C4::X, self::C4::Y) → self::C4::Y> extends core::Object {
+class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = (core::Null, core::Null) → dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = (core::Null, core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D1<X extends self::B<self::D1::X, self::D1::Y>, Y extends (self::D1::Y) → self::D1::X> extends core::Object {
+class D1<X extends self::B<self::D1::X, self::D1::Y> = self::B<dynamic, dynamic>, Y extends (self::D1::Y) → self::D1::X = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D2<X extends self::B<self::D2::X, self::D2::Y>, Y extends (self::D2::X) → self::D2::Y> extends core::Object {
+class D2<X extends self::B<self::D2::X, self::D2::Y> = self::B<dynamic, dynamic>, Y extends (self::D2::X) → self::D2::Y = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D3<X extends self::B<self::D3::X, self::D3::Y>, Y extends (self::D3::X, self::D3::Y) → self::D3::X> extends core::Object {
+class D3<X extends self::B<self::D3::X, self::D3::Y> = self::B<dynamic, dynamic>, Y extends (self::D3::X, self::D3::Y) → self::D3::X = (core::Null, core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D4<X extends self::B<self::D4::X, self::D4::Y>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y> extends core::Object {
+class D4<X extends self::B<self::D4::X, self::D4::Y> = self::B<dynamic, dynamic>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = (core::Null, core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends (self::E::X) → self::E::X> extends core::Object {
+class E<X extends (self::E::X) → self::E::X = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.strong.transformed.expect
index 77802e7..3621db7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.strong.transformed.expect
@@ -2,52 +2,52 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C1<X extends (self::C1::Y) → self::C1::X, Y extends (self::C1::Y) → self::C1::X> extends core::Object {
+class C1<X extends (self::C1::Y) → self::C1::X = (core::Null) → dynamic, Y extends (self::C1::Y) → self::C1::X = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C2<X extends (self::C2::Y) → self::C2::X, Y extends (self::C2::X) → self::C2::Y> extends core::Object {
+class C2<X extends (self::C2::Y) → self::C2::X = (core::Null) → dynamic, Y extends (self::C2::X) → self::C2::Y = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X, Y extends (self::C3::X, self::C3::Y) → self::C3::X> extends core::Object {
+class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = (core::Null, core::Null) → dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = (core::Null, core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X, Y extends (self::C4::X, self::C4::Y) → self::C4::Y> extends core::Object {
+class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = (core::Null, core::Null) → dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = (core::Null, core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D1<X extends self::B<self::D1::X, self::D1::Y>, Y extends (self::D1::Y) → self::D1::X> extends core::Object {
+class D1<X extends self::B<self::D1::X, self::D1::Y> = self::B<dynamic, dynamic>, Y extends (self::D1::Y) → self::D1::X = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D2<X extends self::B<self::D2::X, self::D2::Y>, Y extends (self::D2::X) → self::D2::Y> extends core::Object {
+class D2<X extends self::B<self::D2::X, self::D2::Y> = self::B<dynamic, dynamic>, Y extends (self::D2::X) → self::D2::Y = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D3<X extends self::B<self::D3::X, self::D3::Y>, Y extends (self::D3::X, self::D3::Y) → self::D3::X> extends core::Object {
+class D3<X extends self::B<self::D3::X, self::D3::Y> = self::B<dynamic, dynamic>, Y extends (self::D3::X, self::D3::Y) → self::D3::X = (core::Null, core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D4<X extends self::B<self::D4::X, self::D4::Y>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y> extends core::Object {
+class D4<X extends self::B<self::D4::X, self::D4::Y> = self::B<dynamic, dynamic>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = (core::Null, core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends (self::E::X) → self::E::X> extends core::Object {
+class E<X extends (self::E::X) → self::E::X = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.direct.expect
index ec1fdc4..e323b52 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.direct.expect
@@ -2,52 +2,52 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C1<X extends (self::C1::Y) → self::C1::X, Y extends (self::C1::Y) → self::C1::X> extends core::Object {
+class C1<X extends (self::C1::Y) → self::C1::X = dynamic, Y extends (self::C1::Y) → self::C1::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C2<X extends (self::C2::Y) → self::C2::X, Y extends (self::C2::X) → self::C2::Y> extends core::Object {
+class C2<X extends (self::C2::Y) → self::C2::X = dynamic, Y extends (self::C2::X) → self::C2::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X, Y extends (self::C3::X, self::C3::Y) → self::C3::X> extends core::Object {
+class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X, Y extends (self::C4::X, self::C4::Y) → self::C4::Y> extends core::Object {
+class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D1<X extends self::B<self::D1::X, self::D1::Y>, Y extends (self::D1::Y) → self::D1::X> extends core::Object {
+class D1<X extends self::B<self::D1::X, self::D1::Y> = dynamic, Y extends (self::D1::Y) → self::D1::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D2<X extends self::B<self::D2::X, self::D2::Y>, Y extends (self::D2::X) → self::D2::Y> extends core::Object {
+class D2<X extends self::B<self::D2::X, self::D2::Y> = dynamic, Y extends (self::D2::X) → self::D2::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D3<X extends self::B<self::D3::X, self::D3::Y>, Y extends (self::D3::X, self::D3::Y) → self::D3::X> extends core::Object {
+class D3<X extends self::B<self::D3::X, self::D3::Y> = dynamic, Y extends (self::D3::X, self::D3::Y) → self::D3::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D4<X extends self::B<self::D4::X, self::D4::Y>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y> extends core::Object {
+class D4<X extends self::B<self::D4::X, self::D4::Y> = dynamic, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends (self::E::X) → self::E::X> extends core::Object {
+class E<X extends (self::E::X) → self::E::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.direct.transformed.expect
index ec1fdc4..e323b52 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.direct.transformed.expect
@@ -2,52 +2,52 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C1<X extends (self::C1::Y) → self::C1::X, Y extends (self::C1::Y) → self::C1::X> extends core::Object {
+class C1<X extends (self::C1::Y) → self::C1::X = dynamic, Y extends (self::C1::Y) → self::C1::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C2<X extends (self::C2::Y) → self::C2::X, Y extends (self::C2::X) → self::C2::Y> extends core::Object {
+class C2<X extends (self::C2::Y) → self::C2::X = dynamic, Y extends (self::C2::X) → self::C2::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X, Y extends (self::C3::X, self::C3::Y) → self::C3::X> extends core::Object {
+class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X, Y extends (self::C4::X, self::C4::Y) → self::C4::Y> extends core::Object {
+class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D1<X extends self::B<self::D1::X, self::D1::Y>, Y extends (self::D1::Y) → self::D1::X> extends core::Object {
+class D1<X extends self::B<self::D1::X, self::D1::Y> = dynamic, Y extends (self::D1::Y) → self::D1::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D2<X extends self::B<self::D2::X, self::D2::Y>, Y extends (self::D2::X) → self::D2::Y> extends core::Object {
+class D2<X extends self::B<self::D2::X, self::D2::Y> = dynamic, Y extends (self::D2::X) → self::D2::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D3<X extends self::B<self::D3::X, self::D3::Y>, Y extends (self::D3::X, self::D3::Y) → self::D3::X> extends core::Object {
+class D3<X extends self::B<self::D3::X, self::D3::Y> = dynamic, Y extends (self::D3::X, self::D3::Y) → self::D3::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D4<X extends self::B<self::D4::X, self::D4::Y>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y> extends core::Object {
+class D4<X extends self::B<self::D4::X, self::D4::Y> = dynamic, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends (self::E::X) → self::E::X> extends core::Object {
+class E<X extends (self::E::X) → self::E::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.outline.expect
index c1a07b1..862f29e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.outline.expect
@@ -2,43 +2,43 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class C1<X extends (self::C1::Y) → self::C1::X, Y extends (self::C1::Y) → self::C1::X> extends core::Object {
+class C1<X extends (self::C1::Y) → self::C1::X = dynamic, Y extends (self::C1::Y) → self::C1::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class C2<X extends (self::C2::Y) → self::C2::X, Y extends (self::C2::X) → self::C2::Y> extends core::Object {
+class C2<X extends (self::C2::Y) → self::C2::X = dynamic, Y extends (self::C2::X) → self::C2::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X, Y extends (self::C3::X, self::C3::Y) → self::C3::X> extends core::Object {
+class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X, Y extends (self::C4::X, self::C4::Y) → self::C4::Y> extends core::Object {
+class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class D1<X extends self::B<self::D1::X, self::D1::Y>, Y extends (self::D1::Y) → self::D1::X> extends core::Object {
+class D1<X extends self::B<self::D1::X, self::D1::Y> = dynamic, Y extends (self::D1::Y) → self::D1::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class D2<X extends self::B<self::D2::X, self::D2::Y>, Y extends (self::D2::X) → self::D2::Y> extends core::Object {
+class D2<X extends self::B<self::D2::X, self::D2::Y> = dynamic, Y extends (self::D2::X) → self::D2::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class D3<X extends self::B<self::D3::X, self::D3::Y>, Y extends (self::D3::X, self::D3::Y) → self::D3::X> extends core::Object {
+class D3<X extends self::B<self::D3::X, self::D3::Y> = dynamic, Y extends (self::D3::X, self::D3::Y) → self::D3::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class D4<X extends self::B<self::D4::X, self::D4::Y>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y> extends core::Object {
+class D4<X extends self::B<self::D4::X, self::D4::Y> = dynamic, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class E<X extends (self::E::X) → self::E::X> extends core::Object {
+class E<X extends (self::E::X) → self::E::X = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.strong.expect
index 8a37dd2..d8c6cc7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.strong.expect
@@ -2,52 +2,52 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C1<X extends (self::C1::Y) → self::C1::X, Y extends (self::C1::Y) → self::C1::X> extends core::Object {
+class C1<X extends (self::C1::Y) → self::C1::X = (core::Null) → dynamic, Y extends (self::C1::Y) → self::C1::X = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C2<X extends (self::C2::Y) → self::C2::X, Y extends (self::C2::X) → self::C2::Y> extends core::Object {
+class C2<X extends (self::C2::Y) → self::C2::X = (core::Null) → dynamic, Y extends (self::C2::X) → self::C2::Y = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X, Y extends (self::C3::X, self::C3::Y) → self::C3::X> extends core::Object {
+class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = (core::Null, core::Null) → dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = (core::Null, core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X, Y extends (self::C4::X, self::C4::Y) → self::C4::Y> extends core::Object {
+class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = (core::Null, core::Null) → dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = (core::Null, core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D1<X extends self::B<self::D1::X, self::D1::Y>, Y extends (self::D1::Y) → self::D1::X> extends core::Object {
+class D1<X extends self::B<self::D1::X, self::D1::Y> = self::B<dynamic, dynamic>, Y extends (self::D1::Y) → self::D1::X = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D2<X extends self::B<self::D2::X, self::D2::Y>, Y extends (self::D2::X) → self::D2::Y> extends core::Object {
+class D2<X extends self::B<self::D2::X, self::D2::Y> = self::B<dynamic, dynamic>, Y extends (self::D2::X) → self::D2::Y = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D3<X extends self::B<self::D3::X, self::D3::Y>, Y extends (self::D3::X, self::D3::Y) → self::D3::X> extends core::Object {
+class D3<X extends self::B<self::D3::X, self::D3::Y> = self::B<dynamic, dynamic>, Y extends (self::D3::X, self::D3::Y) → self::D3::X = (core::Null, core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D4<X extends self::B<self::D4::X, self::D4::Y>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y> extends core::Object {
+class D4<X extends self::B<self::D4::X, self::D4::Y> = self::B<dynamic, dynamic>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = (core::Null, core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends (self::E::X) → self::E::X> extends core::Object {
+class E<X extends (self::E::X) → self::E::X = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.strong.transformed.expect
index 8a37dd2..d8c6cc7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.strong.transformed.expect
@@ -2,52 +2,52 @@
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object, Y extends core::Object> extends core::Object {
+class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C1<X extends (self::C1::Y) → self::C1::X, Y extends (self::C1::Y) → self::C1::X> extends core::Object {
+class C1<X extends (self::C1::Y) → self::C1::X = (core::Null) → dynamic, Y extends (self::C1::Y) → self::C1::X = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C2<X extends (self::C2::Y) → self::C2::X, Y extends (self::C2::X) → self::C2::Y> extends core::Object {
+class C2<X extends (self::C2::Y) → self::C2::X = (core::Null) → dynamic, Y extends (self::C2::X) → self::C2::Y = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X, Y extends (self::C3::X, self::C3::Y) → self::C3::X> extends core::Object {
+class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = (core::Null, core::Null) → dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = (core::Null, core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X, Y extends (self::C4::X, self::C4::Y) → self::C4::Y> extends core::Object {
+class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = (core::Null, core::Null) → dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = (core::Null, core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D1<X extends self::B<self::D1::X, self::D1::Y>, Y extends (self::D1::Y) → self::D1::X> extends core::Object {
+class D1<X extends self::B<self::D1::X, self::D1::Y> = self::B<dynamic, dynamic>, Y extends (self::D1::Y) → self::D1::X = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D2<X extends self::B<self::D2::X, self::D2::Y>, Y extends (self::D2::X) → self::D2::Y> extends core::Object {
+class D2<X extends self::B<self::D2::X, self::D2::Y> = self::B<dynamic, dynamic>, Y extends (self::D2::X) → self::D2::Y = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D3<X extends self::B<self::D3::X, self::D3::Y>, Y extends (self::D3::X, self::D3::Y) → self::D3::X> extends core::Object {
+class D3<X extends self::B<self::D3::X, self::D3::Y> = self::B<dynamic, dynamic>, Y extends (self::D3::X, self::D3::Y) → self::D3::X = (core::Null, core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class D4<X extends self::B<self::D4::X, self::D4::Y>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y> extends core::Object {
+class D4<X extends self::B<self::D4::X, self::D4::Y> = self::B<dynamic, dynamic>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = (core::Null, core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class E<X extends (self::E::X) → self::E::X> extends core::Object {
+class E<X extends (self::E::X) → self::E::X = (core::Null) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.direct.expect
index bd60470..b7dfd8e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "dart:collection" as col;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.direct.transformed.expect
index bd60470..b7dfd8e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.direct.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "dart:collection" as col;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.outline.expect
index b822c38..debf17c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "dart:collection" as col;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.strong.expect
index bd60470..b7dfd8e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "dart:collection" as col;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.strong.transformed.expect
index bd60470..b7dfd8e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "dart:collection" as col;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.direct.expect
index bb24dfc..995aaf1 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends self::A<dynamic>> extends core::Object {
+class B<T extends self::A<dynamic> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.direct.transformed.expect
index bb24dfc..995aaf1 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends self::A<dynamic>> extends core::Object {
+class B<T extends self::A<dynamic> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.outline.expect
index 1cbb0e9..a958ced 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.outline.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class B<T extends self::A<dynamic>> extends core::Object {
+class B<T extends self::A<dynamic> = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.strong.expect
index 99ef415..465a807 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends self::A<core::num>> extends core::Object {
+class B<T extends self::A<core::num> = self::A<core::num>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.strong.transformed.expect
index 99ef415..465a807 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num> extends core::Object {
+class A<T extends core::num = core::num> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-class B<T extends self::A<core::num>> extends core::Object {
+class B<T extends self::A<core::num> = self::A<core::num>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.direct.expect
index 2f1df6b..b0c2284 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T>> extends core::Object {
+class A<T extends self::A<self::A::T> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.direct.transformed.expect
index 2f1df6b..b0c2284 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T>> extends core::Object {
+class A<T extends self::A<self::A::T> = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.outline.expect
index e3addef..80aba07 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T>> extends core::Object {
+class A<T extends self::A<self::A::T> = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.strong.expect
index 08af2f5..a9c0166 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T>> extends core::Object {
+class A<T extends self::A<self::A::T> = self::A<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.strong.transformed.expect
index 08af2f5..a9c0166 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T>> extends core::Object {
+class A<T extends self::A<self::A::T> = self::A<dynamic>> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.direct.expect
index 159c3d8..b090467 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.direct.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
 }
-class X<T extends self::B> extends core::Object {
+class X<T extends self::B = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.direct.transformed.expect
index 159c3d8..b090467 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.direct.transformed.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
 }
-class X<T extends self::B> extends core::Object {
+class X<T extends self::B = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.outline.expect
index a9960ece..95892c3 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.outline.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     ;
 }
-class X<T extends self::B> extends core::Object {
+class X<T extends self::B = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.strong.expect
index c261752..170e64b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.strong.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
 }
-class X<T extends self::B> extends core::Object {
+class X<T extends self::B = self::B> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.strong.transformed.expect
index c261752..170e64b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
 }
-class X<T extends self::B> extends core::Object {
+class X<T extends self::B = self::B> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.direct.expect
index 2e8df2e..82574be 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = dynamic> = (T) → dynamic;
 class B extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.direct.transformed.expect
index 2e8df2e..82574be 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = dynamic> = (T) → dynamic;
 class B extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.outline.expect
index bf24d2c..1b7b1df 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = dynamic> = (T) → dynamic;
 class B extends core::Object {
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.strong.expect
index 52fa1cf..6c19133 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = core::num> = (T) → dynamic;
 class B extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.strong.transformed.expect
index 52fa1cf..6c19133 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = core::num> = (T) → dynamic;
 class B extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.direct.expect
index 3e9d62e..a682c5a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.direct.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = dynamic> = (T) → dynamic;
 static field dynamic a = <(dynamic) → dynamic>[];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.direct.transformed.expect
index 3e9d62e..a682c5a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.direct.transformed.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = dynamic> = (T) → dynamic;
 static field dynamic a = <(dynamic) → dynamic>[];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.outline.expect
index 9545c7a..4b19220 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = dynamic> = (T) → dynamic;
 static field dynamic a;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.strong.expect
index 6194fc1..f3acf59 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.strong.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = core::num> = (T) → dynamic;
 static field core::List<(core::num) → dynamic> a = <(core::num) → dynamic>[];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.strong.transformed.expect
index 6194fc1..f3acf59 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.strong.transformed.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = core::num> = (T) → dynamic;
 static field core::List<(core::num) → dynamic> a = <(core::num) → dynamic>[];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.direct.expect
index b156915..c2775ea 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.direct.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
-class B<S extends core::Object> extends core::Object {
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
+class B<S extends core::Object = dynamic> extends core::Object {
   final field core::List<(self::B::S) → dynamic> foo = <(self::B::S) → dynamic>[];
   final field core::List<(core::num) → dynamic> bar = <(core::num) → dynamic>[];
   synthetic constructor •() → void
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.direct.transformed.expect
index b156915..c2775ea 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.direct.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
-class B<S extends core::Object> extends core::Object {
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
+class B<S extends core::Object = dynamic> extends core::Object {
   final field core::List<(self::B::S) → dynamic> foo = <(self::B::S) → dynamic>[];
   final field core::List<(core::num) → dynamic> bar = <(core::num) → dynamic>[];
   synthetic constructor •() → void
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.outline.expect
index fb0ee2e..de720ff 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.outline.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
-class B<S extends core::Object> extends core::Object {
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
+class B<S extends core::Object = dynamic> extends core::Object {
   final field core::List<(self::B::S) → dynamic> foo;
   final field core::List<(core::num) → dynamic> bar;
   synthetic constructor •() → void
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.strong.expect
index b156915..c2775ea 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.strong.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
-class B<S extends core::Object> extends core::Object {
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
+class B<S extends core::Object = dynamic> extends core::Object {
   final field core::List<(self::B::S) → dynamic> foo = <(self::B::S) → dynamic>[];
   final field core::List<(core::num) → dynamic> bar = <(core::num) → dynamic>[];
   synthetic constructor •() → void
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.strong.transformed.expect
index b156915..c2775ea 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
-class B<S extends core::Object> extends core::Object {
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
+class B<S extends core::Object = dynamic> extends core::Object {
   final field core::List<(self::B::S) → dynamic> foo = <(self::B::S) → dynamic>[];
   final field core::List<(core::num) → dynamic> bar = <(core::num) → dynamic>[];
   synthetic constructor •() → void
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.direct.expect
index 5258ebf..cb487a9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.direct.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = dynamic> = (T) → dynamic;
 static field dynamic a = <(dynamic) → dynamic, (dynamic) → dynamic>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.direct.transformed.expect
index 5258ebf..cb487a9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.direct.transformed.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = dynamic> = (T) → dynamic;
 static field dynamic a = <(dynamic) → dynamic, (dynamic) → dynamic>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.outline.expect
index 9545c7a..4b19220 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = dynamic> = (T) → dynamic;
 static field dynamic a;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.strong.expect
index c2e8007..fe31568 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.strong.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = core::num> = (T) → dynamic;
 static field core::Map<(core::num) → dynamic, (core::num) → dynamic> a = <(core::num) → dynamic, (core::num) → dynamic>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.strong.transformed.expect
index c2e8007..fe31568 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.strong.transformed.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
+typedef A<T extends core::num = core::num> = (T) → dynamic;
 static field core::Map<(core::num) → dynamic, (core::num) → dynamic> a = <(core::num) → dynamic, (core::num) → dynamic>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.direct.expect
index f3c3c27..b7cb482 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
 class C extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.direct.transformed.expect
index f3c3c27..b7cb482 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
 class C extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.outline.expect
index 6a2e4db..a88799c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
 class C extends core::Object {
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.strong.expect
index f3c3c27..b7cb482 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
 class C extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.strong.transformed.expect
index f3c3c27..b7cb482 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::Object> = (T) → dynamic;
+typedef A<T extends core::Object = dynamic> = (T) → dynamic;
 class C extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.direct.expect
index ddb4888..7df4a93 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.direct.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
-class B<T extends (dynamic) → dynamic> extends core::Object {
+typedef A<T extends core::num = dynamic> = (T) → dynamic;
+class B<T extends (dynamic) → dynamic = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.direct.transformed.expect
index ddb4888..7df4a93 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.direct.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
-class B<T extends (dynamic) → dynamic> extends core::Object {
+typedef A<T extends core::num = dynamic> = (T) → dynamic;
+class B<T extends (dynamic) → dynamic = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.outline.expect
index 8e00857..f7220cb 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.outline.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
-class B<T extends (dynamic) → dynamic> extends core::Object {
+typedef A<T extends core::num = dynamic> = (T) → dynamic;
+class B<T extends (dynamic) → dynamic = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.strong.expect
index 03b6e9c..97ca06a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.strong.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
-class B<T extends (core::num) → dynamic> extends core::Object {
+typedef A<T extends core::num = core::num> = (T) → dynamic;
+class B<T extends (core::num) → dynamic = (core::num) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.strong.transformed.expect
index 03b6e9c..97ca06a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num> = (T) → dynamic;
-class B<T extends (core::num) → dynamic> extends core::Object {
+typedef A<T extends core::num = core::num> = (T) → dynamic;
+class B<T extends (core::num) → dynamic = (core::num) → dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
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
index 819253e..caa1662 100644
--- 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
@@ -2,7 +2,7 @@
 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;
+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
index 819253e..caa1662 100644
--- 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
@@ -2,7 +2,7 @@
 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;
+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
index 61fcce0..68eb853 100644
--- 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
@@ -2,8 +2,8 @@
 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;
+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/local_generic_function.dart.direct.expect b/pkg/front_end/testcases/local_generic_function.dart.direct.expect
index 204a1a3..26709f0 100644
--- a/pkg/front_end/testcases/local_generic_function.dart.direct.expect
+++ b/pkg/front_end/testcases/local_generic_function.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  function f<T extends core::Object>(core::List<T> l) → T
+  function f<T extends core::Object = dynamic>(core::List<T> l) → T
     return l.[](0);
   dynamic x = f.call(<dynamic>[0]);
 }
diff --git a/pkg/front_end/testcases/local_generic_function.dart.direct.transformed.expect b/pkg/front_end/testcases/local_generic_function.dart.direct.transformed.expect
index 204a1a3..26709f0 100644
--- a/pkg/front_end/testcases/local_generic_function.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/local_generic_function.dart.direct.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  function f<T extends core::Object>(core::List<T> l) → T
+  function f<T extends core::Object = dynamic>(core::List<T> l) → T
     return l.[](0);
   dynamic x = f.call(<dynamic>[0]);
 }
diff --git a/pkg/front_end/testcases/local_generic_function.dart.strong.expect b/pkg/front_end/testcases/local_generic_function.dart.strong.expect
index 8f00c9d..f3d3e87 100644
--- a/pkg/front_end/testcases/local_generic_function.dart.strong.expect
+++ b/pkg/front_end/testcases/local_generic_function.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  function f<T extends core::Object>(core::List<T> l) → T
+  function f<T extends core::Object = dynamic>(core::List<T> l) → T
     return l.{core::List::[]}(0);
   core::int x = f.call<core::int>(<core::int>[0]);
 }
diff --git a/pkg/front_end/testcases/local_generic_function.dart.strong.transformed.expect b/pkg/front_end/testcases/local_generic_function.dart.strong.transformed.expect
index 8f00c9d..f3d3e87 100644
--- a/pkg/front_end/testcases/local_generic_function.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/local_generic_function.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  function f<T extends core::Object>(core::List<T> l) → T
+  function f<T extends core::Object = dynamic>(core::List<T> l) → T
     return l.{core::List::[]}(0);
   core::int x = f.call<core::int>(<core::int>[0]);
 }
diff --git a/pkg/front_end/testcases/mixin.dart.direct.expect b/pkg/front_end/testcases/mixin.dart.direct.expect
index 7ebdddc..249e126 100644
--- a/pkg/front_end/testcases/mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/mixin.dart.direct.expect
@@ -34,16 +34,16 @@
     : super core::Object::•()
     ;
 }
-abstract class G1<T extends core::Object> extends core::Object {
+abstract class G1<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m() → dynamic
     return core::print(self::G1::T);
 }
-abstract class _D&Object&G1<S extends core::Object> = core::Object with self::G1<self::_D&Object&G1::S> {
+abstract class _D&Object&G1<S extends core::Object = dynamic> = core::Object with self::G1<self::_D&Object&G1::S> {
 }
-class D<S extends core::Object> extends self::_D&Object&G1<self::D::S> {
+class D<S extends core::Object = dynamic> extends self::_D&Object&G1<self::D::S> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/mixin.dart.direct.transformed.expect b/pkg/front_end/testcases/mixin.dart.direct.transformed.expect
index 572573a..c3b7891 100644
--- a/pkg/front_end/testcases/mixin.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/mixin.dart.direct.transformed.expect
@@ -54,21 +54,21 @@
     : super core::Object::•()
     ;
 }
-abstract class G1<T extends core::Object> extends core::Object {
+abstract class G1<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m() → dynamic
     return core::print(self::G1::T);
 }
-abstract class _D&Object&G1<S extends core::Object> extends core::Object implements self::G1<self::_D&Object&G1::S> {
+abstract class _D&Object&G1<S extends core::Object = dynamic> extends core::Object implements self::G1<self::_D&Object&G1::S> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m() → dynamic
     return core::print(self::_D&Object&G1::S);
 }
-class D<S extends core::Object> extends self::_D&Object&G1<self::D::S> {
+class D<S extends core::Object = dynamic> extends self::_D&Object&G1<self::D::S> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/mixin.dart.outline.expect b/pkg/front_end/testcases/mixin.dart.outline.expect
index ec5b2f3..35f0145 100644
--- a/pkg/front_end/testcases/mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/mixin.dart.outline.expect
@@ -30,15 +30,15 @@
   constructor •(dynamic value) → void
     ;
 }
-abstract class G1<T extends core::Object> extends core::Object {
+abstract class G1<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method m() → dynamic
     ;
 }
-abstract class _D&Object&G1<S extends core::Object> = core::Object with self::G1<self::_D&Object&G1::S> {
+abstract class _D&Object&G1<S extends core::Object = dynamic> = core::Object with self::G1<self::_D&Object&G1::S> {
 }
-class D<S extends core::Object> extends self::_D&Object&G1<self::D::S> {
+class D<S extends core::Object = dynamic> extends self::_D&Object&G1<self::D::S> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/mixin.dart.strong.expect b/pkg/front_end/testcases/mixin.dart.strong.expect
index b60be6e..675b2e9 100644
--- a/pkg/front_end/testcases/mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/mixin.dart.strong.expect
@@ -34,16 +34,16 @@
     : super core::Object::•()
     ;
 }
-abstract class G1<T extends core::Object> extends core::Object {
+abstract class G1<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m() → dynamic
     return core::print(self::G1::T);
 }
-abstract class _D&Object&G1<S extends core::Object> = core::Object with self::G1<self::_D&Object&G1::S> {
+abstract class _D&Object&G1<S extends core::Object = dynamic> = core::Object with self::G1<self::_D&Object&G1::S> {
 }
-class D<S extends core::Object> extends self::_D&Object&G1<self::D::S> {
+class D<S extends core::Object = dynamic> extends self::_D&Object&G1<self::D::S> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/mixin.dart.strong.transformed.expect b/pkg/front_end/testcases/mixin.dart.strong.transformed.expect
index e84c17f..12ddf25 100644
--- a/pkg/front_end/testcases/mixin.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/mixin.dart.strong.transformed.expect
@@ -54,21 +54,21 @@
     : super core::Object::•()
     ;
 }
-abstract class G1<T extends core::Object> extends core::Object {
+abstract class G1<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m() → dynamic
     return core::print(self::G1::T);
 }
-abstract class _D&Object&G1<S extends core::Object> extends core::Object implements self::G1<self::_D&Object&G1::S> {
+abstract class _D&Object&G1<S extends core::Object = dynamic> extends core::Object implements self::G1<self::_D&Object&G1::S> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m() → dynamic
     return core::print(self::_D&Object&G1::S);
 }
-class D<S extends core::Object> extends self::_D&Object&G1<self::D::S> {
+class D<S extends core::Object = dynamic> extends self::_D&Object&G1<self::D::S> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.direct.expect b/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.direct.expect
index 4affa80..9d1770e 100644
--- a/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.direct.expect
+++ b/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.direct.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
 }
-class C<T extends self::A> extends core::Object {
+class C<T extends self::A = dynamic> extends core::Object {
   field self::C::T _field = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.direct.transformed.expect b/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.direct.transformed.expect
index 6424b60..0e95fd1 100644
--- a/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.direct.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
 }
-class C<T extends self::A> extends core::Object {
+class C<T extends self::A = dynamic> extends core::Object {
   field self::C::T _field = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.outline.expect b/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.outline.expect
index dbe9a87..9409948 100644
--- a/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.outline.expect
+++ b/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.outline.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     ;
 }
-class C<T extends self::A> extends core::Object {
+class C<T extends self::A = dynamic> extends core::Object {
   field self::C::T _field;
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.strong.expect b/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.strong.expect
index 453c4fe..3600b5a 100644
--- a/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.strong.expect
+++ b/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.strong.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
 }
-class C<T extends self::A> extends core::Object {
+class C<T extends self::A = self::A> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T _field = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.strong.transformed.expect b/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.strong.transformed.expect
index 79519a1..94cb3e5 100644
--- a/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
 }
-class C<T extends self::A> extends core::Object {
+class C<T extends self::A = self::A> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T _field = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/named_function_scope.dart.direct.expect b/pkg/front_end/testcases/named_function_scope.dart.direct.expect
index a6a572a..637e4c1 100644
--- a/pkg/front_end/testcases/named_function_scope.dart.direct.expect
+++ b/pkg/front_end/testcases/named_function_scope.dart.direct.expect
@@ -59,7 +59,7 @@
   {
     dynamic x = let final dynamic #t4 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:63:9: Error: 'T' is already declared in this scope.
         T< /*@context=DuplicatedNameCause*/ T>() {};
-        ^" in let final <T extends core::Object>() → dynamic T = <T extends core::Object>() → dynamic {} in T;
+        ^" in let final <T extends core::Object = dynamic>() → dynamic T = <T extends core::Object = dynamic>() → dynamic {} in T;
   }
   {
     self::T t;
diff --git a/pkg/front_end/testcases/named_function_scope.dart.direct.transformed.expect b/pkg/front_end/testcases/named_function_scope.dart.direct.transformed.expect
index a6a572a..637e4c1 100644
--- a/pkg/front_end/testcases/named_function_scope.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/named_function_scope.dart.direct.transformed.expect
@@ -59,7 +59,7 @@
   {
     dynamic x = let final dynamic #t4 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:63:9: Error: 'T' is already declared in this scope.
         T< /*@context=DuplicatedNameCause*/ T>() {};
-        ^" in let final <T extends core::Object>() → dynamic T = <T extends core::Object>() → dynamic {} in T;
+        ^" in let final <T extends core::Object = dynamic>() → dynamic T = <T extends core::Object = dynamic>() → dynamic {} in T;
   }
   {
     self::T t;
diff --git a/pkg/front_end/testcases/named_function_scope.dart.strong.expect b/pkg/front_end/testcases/named_function_scope.dart.strong.expect
index c207784..3c4db65 100644
--- a/pkg/front_end/testcases/named_function_scope.dart.strong.expect
+++ b/pkg/front_end/testcases/named_function_scope.dart.strong.expect
@@ -61,7 +61,7 @@
   {
     dynamic x = let final dynamic #t4 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:63:9: Error: 'T' is already declared in this scope.
         T< /*@context=DuplicatedNameCause*/ T>() {};
-        ^" in let final <T extends core::Object>() → dynamic T = <T extends core::Object>() → dynamic {} in T;
+        ^" in let final <T extends core::Object = dynamic>() → dynamic T = <T extends core::Object = dynamic>() → dynamic {} in T;
   }
   {
     self::T t;
diff --git a/pkg/front_end/testcases/named_function_scope.dart.strong.transformed.expect b/pkg/front_end/testcases/named_function_scope.dart.strong.transformed.expect
index 4fcb933..155e18a 100644
--- a/pkg/front_end/testcases/named_function_scope.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/named_function_scope.dart.strong.transformed.expect
@@ -61,7 +61,7 @@
   {
     dynamic x = let final dynamic #t4 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:63:9: Error: 'T' is already declared in this scope.
         T< /*@context=DuplicatedNameCause*/ T>() {};
-        ^" in let final <T extends core::Object>() → dynamic T = <T extends core::Object>() → dynamic {} in T;
+        ^" in let final <T extends core::Object = dynamic>() → dynamic T = <T extends core::Object = dynamic>() → dynamic {} in T;
   }
   {
     self::T t;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.direct.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.direct.expect
index bf9c46c..4ff7688 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.direct.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.direct.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.direct.transformed.expect
index 32ef81f..01d96cb 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect
index 969a34b..7e40698 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   abstract method foo() → self::I::T;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect
index bf9c46c..4ff7688 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect
index 32ef81f..01d96cb 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/override_check_two_substitutions.dart.direct.expect b/pkg/front_end/testcases/override_check_two_substitutions.dart.direct.expect
index 0273119..edbd26a 100644
--- a/pkg/front_end/testcases/override_check_two_substitutions.dart.direct.expect
+++ b/pkg/front_end/testcases/override_check_two_substitutions.dart.direct.expect
@@ -2,16 +2,16 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends core::Object>(core::Map<self::A::T, self::A::f::U> m) → void {}
+  method f<U extends core::Object = dynamic>(core::Map<self::A::T, self::A::f::U> m) → void {}
 }
 class B extends self::A<core::String> {
   synthetic constructor •() → void
     : super self::A::•()
     ;
-  method f<V extends core::Object>(core::Map<core::String, self::B::f::V> m) → void {}
+  method f<V extends core::Object = dynamic>(core::Map<core::String, self::B::f::V> m) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_two_substitutions.dart.direct.transformed.expect b/pkg/front_end/testcases/override_check_two_substitutions.dart.direct.transformed.expect
index 0273119..edbd26a 100644
--- a/pkg/front_end/testcases/override_check_two_substitutions.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/override_check_two_substitutions.dart.direct.transformed.expect
@@ -2,16 +2,16 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends core::Object>(core::Map<self::A::T, self::A::f::U> m) → void {}
+  method f<U extends core::Object = dynamic>(core::Map<self::A::T, self::A::f::U> m) → void {}
 }
 class B extends self::A<core::String> {
   synthetic constructor •() → void
     : super self::A::•()
     ;
-  method f<V extends core::Object>(core::Map<core::String, self::B::f::V> m) → void {}
+  method f<V extends core::Object = dynamic>(core::Map<core::String, self::B::f::V> m) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_two_substitutions.dart.outline.expect b/pkg/front_end/testcases/override_check_two_substitutions.dart.outline.expect
index 5c2a82a..b2cfae4 100644
--- a/pkg/front_end/testcases/override_check_two_substitutions.dart.outline.expect
+++ b/pkg/front_end/testcases/override_check_two_substitutions.dart.outline.expect
@@ -2,16 +2,16 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
-  method f<U extends core::Object>(core::Map<self::A::T, self::A::f::U> m) → void
+  method f<U extends core::Object = dynamic>(core::Map<self::A::T, self::A::f::U> m) → void
     ;
 }
 class B extends self::A<core::String> {
   synthetic constructor •() → void
     ;
-  method f<V extends core::Object>(core::Map<core::String, self::B::f::V> m) → void
+  method f<V extends core::Object = dynamic>(core::Map<core::String, self::B::f::V> m) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/override_check_two_substitutions.dart.strong.expect b/pkg/front_end/testcases/override_check_two_substitutions.dart.strong.expect
index 5871307..3d2edc0 100644
--- a/pkg/front_end/testcases/override_check_two_substitutions.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_two_substitutions.dart.strong.expect
@@ -2,16 +2,16 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends core::Object>(generic-covariant-impl generic-covariant-interface core::Map<self::A::T, self::A::f::U> m) → void {}
+  method f<U extends core::Object = dynamic>(generic-covariant-impl generic-covariant-interface core::Map<self::A::T, self::A::f::U> m) → void {}
 }
 class B extends self::A<core::String> {
   synthetic constructor •() → void
     : super self::A::•()
     ;
-  method f<V extends core::Object>(generic-covariant-impl core::Map<core::String, self::B::f::V> m) → void {}
+  method f<V extends core::Object = dynamic>(generic-covariant-impl core::Map<core::String, self::B::f::V> m) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_two_substitutions.dart.strong.transformed.expect b/pkg/front_end/testcases/override_check_two_substitutions.dart.strong.transformed.expect
index 5871307..3d2edc0 100644
--- a/pkg/front_end/testcases/override_check_two_substitutions.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/override_check_two_substitutions.dart.strong.transformed.expect
@@ -2,16 +2,16 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends core::Object>(generic-covariant-impl generic-covariant-interface core::Map<self::A::T, self::A::f::U> m) → void {}
+  method f<U extends core::Object = dynamic>(generic-covariant-impl generic-covariant-interface core::Map<self::A::T, self::A::f::U> m) → void {}
 }
 class B extends self::A<core::String> {
   synthetic constructor •() → void
     : super self::A::•()
     ;
-  method f<V extends core::Object>(generic-covariant-impl core::Map<core::String, self::B::f::V> m) → void {}
+  method f<V extends core::Object = dynamic>(generic-covariant-impl core::Map<core::String, self::B::f::V> m) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/qualified.dart.direct.expect b/pkg/front_end/testcases/qualified.dart.direct.expect
index 9a7583a..545aedf 100644
--- a/pkg/front_end/testcases/qualified.dart.direct.expect
+++ b/pkg/front_end/testcases/qualified.dart.direct.expect
@@ -14,7 +14,7 @@
     : super lib::Supertype::•()
     ;
 }
-class C<T extends core::Object> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
+class C<T extends core::Object = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
   static field dynamic _redirecting# = <dynamic>[self::C::b];
   constructor •() → void
     : super core::Object::•()
@@ -22,7 +22,7 @@
   constructor a() → void
     : super core::Object::•()
     ;
-  static factory b<T extends core::Object>() → self::C<self::C::b::T>
+  static factory b<T extends core::Object = dynamic>() → self::C<self::C::b::T>
     let dynamic #redirecting_factory = lib::C::b in let self::C::b::T #typeArg0 = null in invalid-expression;
 }
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/qualified.dart:11:19: Error: Type 'lib.Missing' not found.
diff --git a/pkg/front_end/testcases/qualified.dart.direct.transformed.expect b/pkg/front_end/testcases/qualified.dart.direct.transformed.expect
index a428888..de3c17e 100644
--- a/pkg/front_end/testcases/qualified.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/qualified.dart.direct.transformed.expect
@@ -20,7 +20,7 @@
     : super lib::Supertype::•()
     ;
 }
-class C<T extends core::Object> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
+class C<T extends core::Object = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
   static field dynamic _redirecting# = <dynamic>[self::C::b];
   constructor •() → void
     : super core::Object::•()
@@ -28,7 +28,7 @@
   constructor a() → void
     : super core::Object::•()
     ;
-  static factory b<T extends core::Object>() → self::C<self::C::b::T>
+  static factory b<T extends core::Object = dynamic>() → self::C<self::C::b::T>
     let dynamic #redirecting_factory = lib::C::b in let self::C::b::T #typeArg0 = null in invalid-expression;
 }
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/qualified.dart:11:19: Error: Type 'lib.Missing' not found.
diff --git a/pkg/front_end/testcases/qualified.dart.outline.expect b/pkg/front_end/testcases/qualified.dart.outline.expect
index 1214470..b04c33a 100644
--- a/pkg/front_end/testcases/qualified.dart.outline.expect
+++ b/pkg/front_end/testcases/qualified.dart.outline.expect
@@ -15,13 +15,13 @@
   synthetic constructor •() → void
     ;
 }
-class C<T extends core::Object> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
+class C<T extends core::Object = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
   static field dynamic _redirecting# = <dynamic>[self::C::b];
   constructor •() → void
     ;
   constructor a() → void
     ;
-  static factory b<T extends core::Object>() → self::C<self::C::b::T>
+  static factory b<T extends core::Object = dynamic>() → self::C<self::C::b::T>
     let dynamic #redirecting_factory = lib::C::b in let self::C::b::T #typeArg0 = null in invalid-expression;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/qualified.dart.strong.expect b/pkg/front_end/testcases/qualified.dart.strong.expect
index 7136bf5..ead5697 100644
--- a/pkg/front_end/testcases/qualified.dart.strong.expect
+++ b/pkg/front_end/testcases/qualified.dart.strong.expect
@@ -14,7 +14,7 @@
     : super lib::Supertype::•()
     ;
 }
-class C<T extends core::Object> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
+class C<T extends core::Object = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
   static field dynamic _redirecting# = <dynamic>[self::C::b];
   constructor •() → void
     : super core::Object::•()
@@ -22,7 +22,7 @@
   constructor a() → void
     : super core::Object::•()
     ;
-  static factory b<T extends core::Object>() → self::C<self::C::b::T>
+  static factory b<T extends core::Object = dynamic>() → self::C<self::C::b::T>
     let dynamic #redirecting_factory = lib::C::b in let self::C::b::T #typeArg0 = null in invalid-expression;
 }
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/qualified.dart:12:3: Error: Type 'lib.Missing' not found.
diff --git a/pkg/front_end/testcases/qualified.dart.strong.transformed.expect b/pkg/front_end/testcases/qualified.dart.strong.transformed.expect
index b90128a..54bc304 100644
--- a/pkg/front_end/testcases/qualified.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/qualified.dart.strong.transformed.expect
@@ -20,7 +20,7 @@
     : super lib::Supertype::•()
     ;
 }
-class C<T extends core::Object> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
+class C<T extends core::Object = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
   static field dynamic _redirecting# = <dynamic>[self::C::b];
   constructor •() → void
     : super core::Object::•()
@@ -28,8 +28,8 @@
   constructor a() → void
     : super core::Object::•()
     ;
-  static factory b<T extends core::Object>() → self::C<self::C::b::T>
-    let <T extends core::Object>() → lib::C<lib::C::b::T> #redirecting_factory = lib::C::b in let self::C::b::T #typeArg0 = null in invalid-expression;
+  static factory b<T extends core::Object = dynamic>() → self::C<self::C::b::T>
+    let <T extends core::Object = dynamic>() → lib::C<lib::C::b::T> #redirecting_factory = lib::C::b in let self::C::b::T #typeArg0 = null in invalid-expression;
 }
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/qualified.dart:12:3: Error: Type 'lib.Missing' not found.
   lib.Missing method() {}
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect
index b03c5e3..1033641 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect
@@ -14,27 +14,27 @@
   synthetic constructor •() → void
     ;
 }
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   static field dynamic _redirecting# = <dynamic>[self::A::a, self::A::b, self::A::c];
   constructor internal() → void
     ;
-  static factory a<T extends core::Object>() → self::A<self::A::a::T>
+  static factory a<T extends core::Object = dynamic>() → self::A<self::A::a::T>
     let dynamic #redirecting_factory = self::B::a in let self::A::a::T #typeArg0 = null in invalid-expression;
-  static factory b<T extends core::Object>() → self::A<self::A::b::T>
+  static factory b<T extends core::Object = dynamic>() → self::A<self::A::b::T>
     let dynamic #redirecting_factory = self::B::a in let self::C1 #typeArg0 = null in invalid-expression;
-  static factory c<T extends core::Object>() → self::A<self::A::c::T>
+  static factory c<T extends core::Object = dynamic>() → self::A<self::A::c::T>
     let dynamic #redirecting_factory = "Missing" in invalid-expression;
 }
-class B<S extends core::Object> extends self::A<self::B::S> {
+class B<S extends core::Object = dynamic> extends self::A<self::B::S> {
   static field dynamic _redirecting# = <dynamic>[self::B::a, self::B::b];
   constructor internal() → void
     ;
-  static factory a<S extends core::Object>() → self::B<self::B::a::S>
+  static factory a<S extends core::Object = dynamic>() → self::B<self::B::a::S>
     let dynamic #redirecting_factory = self::C::• in let self::B::a::S #typeArg0 = null in invalid-expression;
-  static factory b<S extends core::Object>() → self::B<self::B::b::S>
+  static factory b<S extends core::Object = dynamic>() → self::B<self::B::b::S>
     let dynamic #redirecting_factory = self::C::• in let self::C2 #typeArg0 = null in invalid-expression;
 }
-class C<U extends core::Object> extends self::B<self::C::U> {
+class C<U extends core::Object = dynamic> extends self::B<self::C::U> {
   constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000068.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000068.dart.direct.expect
index d2e5607..3432824 100644
--- a/pkg/front_end/testcases/rasta/issue_000068.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000068.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
-class G<T extends core::Object> extends core::Object {
+class G<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000068.dart.direct.transformed.expect b/pkg/front_end/testcases/rasta/issue_000068.dart.direct.transformed.expect
index d2e5607..3432824 100644
--- a/pkg/front_end/testcases/rasta/issue_000068.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000068.dart.direct.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
-class G<T extends core::Object> extends core::Object {
+class G<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000068.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000068.dart.outline.expect
index e1d7f2e..9c46dd8 100644
--- a/pkg/front_end/testcases/rasta/issue_000068.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000068.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class G<T extends core::Object> extends core::Object {
+class G<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.direct.expect
index a80d4c3..3ea2923b 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
-class A<N extends core::Object, S extends core::Object, U extends core::Object> extends core::Object {
+class A<N extends core::Object = dynamic, S extends core::Object = dynamic, U extends core::Object = dynamic> extends core::Object {
   final field core::List<self::A::U> field;
   constructor •(self::A::N n, self::A::S s) → void
     : self::A::field = core::List::•<self::A::U>(), super core::Object::•() {
@@ -15,7 +15,7 @@
   const constructor c(self::A::U u, self::A::S s) → void
     : self::A::field = const <dynamic>[null], super core::Object::•()
     ;
-  static factory f<N extends core::Object, S extends core::Object, U extends core::Object>(self::A::f::S s) → self::A<self::A::f::N, self::A::f::S, self::A::f::U> {
+  static factory f<N extends core::Object = dynamic, S extends core::Object = dynamic, U extends core::Object = dynamic>(self::A::f::S s) → self::A<self::A::f::N, self::A::f::S, self::A::f::U> {
     exp::Expect::isTrue(s is self::A::f::S);
     return new self::A::empty<dynamic, dynamic, dynamic>();
   }
@@ -24,12 +24,12 @@
   }
   set setter(self::A::S s) → void {}
 }
-abstract class J<Aa extends core::Object, B extends core::Object> extends core::Object {
+abstract class J<Aa extends core::Object = dynamic, B extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-abstract class I<H extends core::Object, C extends core::Object, K extends core::Object> extends self::J<self::I::C, self::I::K> {
+abstract class I<H extends core::Object = dynamic, C extends core::Object = dynamic, K extends core::Object = dynamic> extends self::J<self::I::C, self::I::K> {
   synthetic constructor •() → void
     : super self::J::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.direct.transformed.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.direct.transformed.expect
index a80d4c3..3ea2923b 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.direct.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
-class A<N extends core::Object, S extends core::Object, U extends core::Object> extends core::Object {
+class A<N extends core::Object = dynamic, S extends core::Object = dynamic, U extends core::Object = dynamic> extends core::Object {
   final field core::List<self::A::U> field;
   constructor •(self::A::N n, self::A::S s) → void
     : self::A::field = core::List::•<self::A::U>(), super core::Object::•() {
@@ -15,7 +15,7 @@
   const constructor c(self::A::U u, self::A::S s) → void
     : self::A::field = const <dynamic>[null], super core::Object::•()
     ;
-  static factory f<N extends core::Object, S extends core::Object, U extends core::Object>(self::A::f::S s) → self::A<self::A::f::N, self::A::f::S, self::A::f::U> {
+  static factory f<N extends core::Object = dynamic, S extends core::Object = dynamic, U extends core::Object = dynamic>(self::A::f::S s) → self::A<self::A::f::N, self::A::f::S, self::A::f::U> {
     exp::Expect::isTrue(s is self::A::f::S);
     return new self::A::empty<dynamic, dynamic, dynamic>();
   }
@@ -24,12 +24,12 @@
   }
   set setter(self::A::S s) → void {}
 }
-abstract class J<Aa extends core::Object, B extends core::Object> extends core::Object {
+abstract class J<Aa extends core::Object = dynamic, B extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-abstract class I<H extends core::Object, C extends core::Object, K extends core::Object> extends self::J<self::I::C, self::I::K> {
+abstract class I<H extends core::Object = dynamic, C extends core::Object = dynamic, K extends core::Object = dynamic> extends self::J<self::I::C, self::I::K> {
   synthetic constructor •() → void
     : super self::J::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.outline.expect
index c0e3673..00c0cb3 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<N extends core::Object, S extends core::Object, U extends core::Object> extends core::Object {
+class A<N extends core::Object = dynamic, S extends core::Object = dynamic, U extends core::Object = dynamic> extends core::Object {
   final field core::List<self::A::U> field;
   constructor •(self::A::N n, self::A::S s) → void
     ;
@@ -10,18 +10,18 @@
     ;
   const constructor c(self::A::U u, self::A::S s) → void
     ;
-  static factory f<N extends core::Object, S extends core::Object, U extends core::Object>(self::A::f::S s) → self::A<self::A::f::N, self::A::f::S, self::A::f::U>
+  static factory f<N extends core::Object = dynamic, S extends core::Object = dynamic, U extends core::Object = dynamic>(self::A::f::S s) → self::A<self::A::f::N, self::A::f::S, self::A::f::U>
     ;
   get getter() → core::List<self::A::U>
     ;
   set setter(self::A::S s) → void
     ;
 }
-abstract class J<Aa extends core::Object, B extends core::Object> extends core::Object {
+abstract class J<Aa extends core::Object = dynamic, B extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-abstract class I<H extends core::Object, C extends core::Object, K extends core::Object> extends self::J<self::I::C, self::I::K> {
+abstract class I<H extends core::Object = dynamic, C extends core::Object = dynamic, K extends core::Object = dynamic> extends self::J<self::I::C, self::I::K> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.outline.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.outline.expect
index fdda949..27d7daf 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class Mixin<T extends core::Object> extends core::Object {
+class Mixin<T extends core::Object = dynamic> extends core::Object {
   field dynamic x;
   field dynamic y;
   field dynamic z;
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
index 58551e4..06badae 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class Mixin<T extends core::Object> extends core::Object {
+class Mixin<T extends core::Object = dynamic> extends core::Object {
   field dynamic x = self::f();
   field dynamic y = null;
   field dynamic z = null;
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.direct.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.direct.expect
index 25388a4..f43c8b5 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "./mixin_library.dart" as mix;
 
-class Super<S extends core::Object> extends core::Object {
+class Super<S extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -12,9 +12,9 @@
   method f() → dynamic
     return 3;
 }
-abstract class _C&Super&Mixin<V extends core::Object> = self::Super<self::_C&Super&Mixin::V> with mix::Mixin<self::_C&Super&Mixin::V> {
+abstract class _C&Super&Mixin<V extends core::Object = dynamic> = self::Super<self::_C&Super&Mixin::V> with mix::Mixin<self::_C&Super&Mixin::V> {
 }
-class C<V extends core::Object> extends self::_C&Super&Mixin<self::C::V> {
+class C<V extends core::Object = dynamic> extends self::_C&Super&Mixin<self::C::V> {
   synthetic constructor •() → void
     : super self::Super::•()
     ;
@@ -26,7 +26,7 @@
     : super self::Super::•()
     ;
 }
-class C2<V extends core::Object> = self::Super<self::C2::V> with mix::Mixin<self::C2::V> {
+class C2<V extends core::Object = dynamic> = self::Super<self::C2::V> with mix::Mixin<self::C2::V> {
   synthetic constructor •() → void
     : super self::Super::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.direct.transformed.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.direct.transformed.expect
index 8540267..49f815b 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.direct.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "./mixin_library.dart" as mix;
 
-class Super<S extends core::Object> extends core::Object {
+class Super<S extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -12,7 +12,7 @@
   method f() → dynamic
     return 3;
 }
-abstract class _C&Super&Mixin<V extends core::Object> extends self::Super<self::_C&Super&Mixin::V> implements mix::Mixin<self::_C&Super&Mixin::V> {
+abstract class _C&Super&Mixin<V extends core::Object = dynamic> extends self::Super<self::_C&Super&Mixin::V> implements mix::Mixin<self::_C&Super&Mixin::V> {
   field dynamic x = mix::f()/* from org-dartlang-testcase:///mixin_library.dart */;
   field dynamic y = null /* from org-dartlang-testcase:///mixin_library.dart */;
   field dynamic z = null /* from org-dartlang-testcase:///mixin_library.dart */;
@@ -33,7 +33,7 @@
   method /* from org-dartlang-testcase:///mixin_library.dart */ publicMethod() → dynamic
     return this.{mix::Mixin::_privateMethod}();
 }
-class C<V extends core::Object> extends self::_C&Super&Mixin<self::C::V> {
+class C<V extends core::Object = dynamic> extends self::_C&Super&Mixin<self::C::V> {
   synthetic constructor •() → void
     : super self::Super::•()
     ;
@@ -64,7 +64,7 @@
     : super self::Super::•()
     ;
 }
-class C2<V extends core::Object> extends self::Super<self::C2::V> implements mix::Mixin<self::C2::V> {
+class C2<V extends core::Object = dynamic> extends self::Super<self::C2::V> implements mix::Mixin<self::C2::V> {
   field dynamic x = mix::f()/* from org-dartlang-testcase:///mixin_library.dart */;
   field dynamic y = null /* from org-dartlang-testcase:///mixin_library.dart */;
   field dynamic z = null /* from org-dartlang-testcase:///mixin_library.dart */;
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.outline.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.outline.expect
index e1bc111..226be4d 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "./mixin_library.dart" as mix;
 
-class Super<S extends core::Object> extends core::Object {
+class Super<S extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method foo() → dynamic
@@ -11,9 +11,9 @@
   method f() → dynamic
     ;
 }
-abstract class _C&Super&Mixin<V extends core::Object> = self::Super<self::_C&Super&Mixin::V> with mix::Mixin<self::_C&Super&Mixin::V> {
+abstract class _C&Super&Mixin<V extends core::Object = dynamic> = self::Super<self::_C&Super&Mixin::V> with mix::Mixin<self::_C&Super&Mixin::V> {
 }
-class C<V extends core::Object> extends self::_C&Super&Mixin<self::C::V> {
+class C<V extends core::Object = dynamic> extends self::_C&Super&Mixin<self::C::V> {
   synthetic constructor •() → void
     ;
 }
@@ -23,7 +23,7 @@
   synthetic constructor •() → void
     ;
 }
-class C2<V extends core::Object> = self::Super<self::C2::V> with mix::Mixin<self::C2::V> {
+class C2<V extends core::Object = dynamic> = self::Super<self::C2::V> with mix::Mixin<self::C2::V> {
   synthetic constructor •() → void
     : super self::Super::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
index 6a403fb..abb198d 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "./mixin_library.dart" as mix;
 
-class Super<S extends core::Object> extends core::Object {
+class Super<S extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -12,9 +12,9 @@
   method f() → dynamic
     return 3;
 }
-abstract class _C&Super&Mixin<V extends core::Object> = self::Super<self::_C&Super&Mixin::V> with mix::Mixin<self::_C&Super&Mixin::V> {
+abstract class _C&Super&Mixin<V extends core::Object = dynamic> = self::Super<self::_C&Super&Mixin::V> with mix::Mixin<self::_C&Super&Mixin::V> {
 }
-class C<V extends core::Object> extends self::_C&Super&Mixin<self::C::V> {
+class C<V extends core::Object = dynamic> extends self::_C&Super&Mixin<self::C::V> {
   synthetic constructor •() → void
     : super self::Super::•()
     ;
@@ -29,7 +29,7 @@
     ;
   abstract forwarding-stub set t(generic-covariant-impl dynamic _) → void;
 }
-class C2<V extends core::Object> = self::Super<self::C2::V> with mix::Mixin<self::C2::V> {
+class C2<V extends core::Object = dynamic> = self::Super<self::C2::V> with mix::Mixin<self::C2::V> {
   synthetic constructor •() → void
     : super self::Super::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/type_literals.dart.outline.expect b/pkg/front_end/testcases/rasta/type_literals.dart.outline.expect
index 4f17669..48fb196 100644
--- a/pkg/front_end/testcases/rasta/type_literals.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/type_literals.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 typedef Func = () → void;
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method test() → dynamic
diff --git a/pkg/front_end/testcases/redirecting_factory.dart.outline.expect b/pkg/front_end/testcases/redirecting_factory.dart.outline.expect
index 4a460e9..0e9db8ea 100644
--- a/pkg/front_end/testcases/redirecting_factory.dart.outline.expect
+++ b/pkg/front_end/testcases/redirecting_factory.dart.outline.expect
@@ -2,51 +2,51 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class FooBase<Tf extends core::Object> extends core::Object {
+abstract class FooBase<Tf extends core::Object = dynamic> extends core::Object {
   static field dynamic _redirecting# = <dynamic>[self::FooBase::•];
   abstract get x() → core::int;
-  static factory •<Tf extends core::Object>(core::int x) → self::FooBase<self::FooBase::•::Tf>
+  static factory •<Tf extends core::Object = dynamic>(core::int x) → self::FooBase<self::FooBase::•::Tf>
     let dynamic #redirecting_factory = self::Foo::• in let self::FooBase::•::Tf #typeArg0 = null in invalid-expression;
 }
-abstract class Foo<T extends core::Object> extends core::Object implements self::FooBase<dynamic> {
+abstract class Foo<T extends core::Object = dynamic> extends core::Object implements self::FooBase<dynamic> {
   static field dynamic _redirecting# = <dynamic>[self::Foo::•];
-  static factory •<T extends core::Object>(core::int x) → self::Foo<self::Foo::•::T>
+  static factory •<T extends core::Object = dynamic>(core::int x) → self::Foo<self::Foo::•::T>
     let dynamic #redirecting_factory = self::Bar::• in let core::String #typeArg0 = null in let self::Foo::•::T #typeArg1 = null in invalid-expression;
 }
-class Bar<Sb extends core::Object, Tb extends core::Object> extends core::Object implements self::Foo<self::Bar::Tb> {
+class Bar<Sb extends core::Object = dynamic, Tb extends core::Object = dynamic> extends core::Object implements self::Foo<self::Bar::Tb> {
   field core::int x;
   constructor •(core::int x) → void
     ;
 }
-class Builder<X extends core::Object> extends core::Object {
+class Builder<X extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method method() → dynamic
     ;
 }
-class SimpleCase<A extends core::Object, B extends core::Object> extends core::Object {
+class SimpleCase<A extends core::Object = dynamic, B extends core::Object = dynamic> extends core::Object {
   static field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
-  static factory •<A extends core::Object, B extends core::Object>() → self::SimpleCase<self::SimpleCase::•::A, self::SimpleCase::•::B>
+  static factory •<A extends core::Object = dynamic, B extends core::Object = dynamic>() → self::SimpleCase<self::SimpleCase::•::A, self::SimpleCase::•::B>
     let dynamic #redirecting_factory = self::SimpleCaseImpl::• in let self::SimpleCase::•::A #typeArg0 = null in let self::SimpleCase::•::B #typeArg1 = null in invalid-expression;
 }
-class SimpleCaseImpl<Ai extends core::Object, Bi extends core::Object> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai, self::SimpleCaseImpl::Bi> {
+class SimpleCaseImpl<Ai extends core::Object = dynamic, Bi extends core::Object = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai, self::SimpleCaseImpl::Bi> {
   static field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
-  static factory •<Ai extends core::Object, Bi extends core::Object>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai, self::SimpleCaseImpl::•::Bi>
+  static factory •<Ai extends core::Object = dynamic, Bi extends core::Object = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai, self::SimpleCaseImpl::•::Bi>
     let dynamic #redirecting_factory = self::SimpleCaseImpl2::• in let self::SimpleCaseImpl::•::Ai #typeArg0 = null in let self::SimpleCaseImpl::•::Bi #typeArg1 = null in invalid-expression;
 }
-class SimpleCaseImpl2<Ai2 extends core::Object, Bi2 extends core::Object> extends core::Object implements self::SimpleCaseImpl<self::SimpleCaseImpl2::Ai2, self::SimpleCaseImpl2::Bi2> {
+class SimpleCaseImpl2<Ai2 extends core::Object = dynamic, Bi2 extends core::Object = dynamic> extends core::Object implements self::SimpleCaseImpl<self::SimpleCaseImpl2::Ai2, self::SimpleCaseImpl2::Bi2> {
   synthetic constructor •() → void
     ;
 }
-class Base<M extends core::Object> extends core::Object {
+class Base<M extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class Mixin<M extends core::Object> extends core::Object {
+class Mixin<M extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-class Mix<M extends core::Object> = self::Base<self::Mix::M> with self::Mixin<self::Mix::M> {
+class Mix<M extends core::Object = dynamic> = self::Base<self::Mix::M> with self::Mixin<self::Mix::M> {
   synthetic constructor •() → void
     : super self::Base::•()
     ;
diff --git a/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.direct.expect b/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.direct.expect
index ff74d26..b456e45 100644
--- a/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.direct.expect
+++ b/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.direct.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
 }
-class Foo<T extends self::X> extends core::Object {
+class Foo<T extends self::X = dynamic> extends core::Object {
   field self::Foo::T x;
   constructor fromX(self::X _init) → void
     : this self::Foo::_internal(x: _init)
diff --git a/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.direct.transformed.expect b/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.direct.transformed.expect
index ff74d26..b456e45 100644
--- a/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.direct.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
 }
-class Foo<T extends self::X> extends core::Object {
+class Foo<T extends self::X = dynamic> extends core::Object {
   field self::Foo::T x;
   constructor fromX(self::X _init) → void
     : this self::Foo::_internal(x: _init)
diff --git a/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.outline.expect b/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.outline.expect
index 5cbe7eb..9a93e35 100644
--- a/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.outline.expect
+++ b/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.outline.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → void
     ;
 }
-class Foo<T extends self::X> extends core::Object {
+class Foo<T extends self::X = dynamic> extends core::Object {
   field self::Foo::T x;
   constructor fromX(self::X _init) → void
     ;
diff --git a/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.strong.expect b/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.strong.expect
index 81b63fc..ad19bc0 100644
--- a/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.strong.expect
+++ b/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.strong.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
 }
-class Foo<T extends self::X> extends core::Object {
+class Foo<T extends self::X = self::X> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::Foo::T x;
   constructor fromX(self::X _init) → void
     : this self::Foo::_internal(x: _init as{TypeError} self::Foo::T)
diff --git a/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.strong.transformed.expect b/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.strong.transformed.expect
index 81b63fc..ad19bc0 100644
--- a/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/redirecting_initializer_arguments_assignable_test.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
 }
-class Foo<T extends self::X> extends core::Object {
+class Foo<T extends self::X = self::X> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::Foo::T x;
   constructor fromX(self::X _init) → void
     : this self::Foo::_internal(x: _init as{TypeError} self::Foo::T)
diff --git a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.direct.expect b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.direct.expect
index d42aaa0..4a3a9d5 100644
--- a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.direct.expect
+++ b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends core::Object> extends core::Object {
+class Foo<T extends core::Object = dynamic> extends core::Object {
   field self::Foo::T x;
   constructor from(core::String _init) → void
     : this self::Foo::_internal(x: _init)
diff --git a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.direct.transformed.expect b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.direct.transformed.expect
index d42aaa0..4a3a9d5 100644
--- a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends core::Object> extends core::Object {
+class Foo<T extends core::Object = dynamic> extends core::Object {
   field self::Foo::T x;
   constructor from(core::String _init) → void
     : this self::Foo::_internal(x: _init)
diff --git a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.outline.expect b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.outline.expect
index 10bf447..467c389 100644
--- a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.outline.expect
+++ b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends core::Object> extends core::Object {
+class Foo<T extends core::Object = dynamic> extends core::Object {
   field self::Foo::T x;
   constructor from(core::String _init) → void
     ;
diff --git a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.expect b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.expect
index db3b854..b07315d 100644
--- a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.expect
+++ b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends core::Object> extends core::Object {
+class Foo<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::Foo::T x;
   constructor from(core::String _init) → void
     : this self::Foo::_internal(x: let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/redirecting_initializer_arguments_test.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::Foo::T'.
diff --git a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.transformed.expect b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.transformed.expect
index db3b854..b07315d 100644
--- a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends core::Object> extends core::Object {
+class Foo<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::Foo::T x;
   constructor from(core::String _init) → void
     : this self::Foo::_internal(x: let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/redirecting_initializer_arguments_test.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::Foo::T'.
diff --git a/pkg/front_end/testcases/redirection_chain_type_arguments.dart.outline.expect b/pkg/front_end/testcases/redirection_chain_type_arguments.dart.outline.expect
index 1b274eb..038ab97 100644
--- a/pkg/front_end/testcases/redirection_chain_type_arguments.dart.outline.expect
+++ b/pkg/front_end/testcases/redirection_chain_type_arguments.dart.outline.expect
@@ -2,21 +2,21 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   static field dynamic _redirecting# = <dynamic>[self::A::•];
   constructor empty() → void
     ;
-  static factory •<T extends core::Object>() → self::A<self::A::•::T>
+  static factory •<T extends core::Object = dynamic>() → self::A<self::A::•::T>
     let dynamic #redirecting_factory = self::B::• in let self::A::•::T #typeArg0 = null in let core::num #typeArg1 = null in invalid-expression;
 }
-class B<U extends core::Object, W extends core::Object> extends self::A<self::B::U> {
+class B<U extends core::Object = dynamic, W extends core::Object = dynamic> extends self::A<self::B::U> {
   static field dynamic _redirecting# = <dynamic>[self::B::•];
   constructor empty() → void
     ;
-  static factory •<U extends core::Object, W extends core::Object>() → self::B<self::B::•::U, self::B::•::W>
+  static factory •<U extends core::Object = dynamic, W extends core::Object = dynamic>() → self::B<self::B::•::U, self::B::•::W>
     let dynamic #redirecting_factory = self::C::• in let self::B::•::U #typeArg0 = null in let self::B::•::W #typeArg1 = null in let core::String #typeArg2 = null in invalid-expression;
 }
-class C<V extends core::Object, S extends core::Object, R extends core::Object> extends self::B<self::C::V, self::C::S> {
+class C<V extends core::Object = dynamic, S extends core::Object = dynamic, R extends core::Object = dynamic> extends self::B<self::C::V, self::C::S> {
   constructor •() → void
     ;
   method toString() → dynamic
diff --git a/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.outline.expect b/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.outline.expect
index 7e4faab..f6ba5d2 100644
--- a/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.outline.expect
+++ b/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.outline.expect
@@ -2,21 +2,21 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class A<T extends core::Object> extends core::Object {
+abstract class A<T extends core::Object = dynamic> extends core::Object {
   static field dynamic _redirecting# = <dynamic>[self::A::•];
   constructor empty() → void
     ;
-  static factory •<T extends core::Object>() → self::A<self::A::•::T>
+  static factory •<T extends core::Object = dynamic>() → self::A<self::A::•::T>
     let dynamic #redirecting_factory = self::B::• in let self::A::•::T #typeArg0 = null in let core::List<self::A::•::T> #typeArg1 = null in invalid-expression;
 }
-abstract class B<U extends core::Object, W extends core::Object> extends self::A<self::B::U> {
+abstract class B<U extends core::Object = dynamic, W extends core::Object = dynamic> extends self::A<self::B::U> {
   static field dynamic _redirecting# = <dynamic>[self::B::•];
   constructor empty() → void
     ;
-  static factory •<U extends core::Object, W extends core::Object>() → self::B<self::B::•::U, self::B::•::W>
+  static factory •<U extends core::Object = dynamic, W extends core::Object = dynamic>() → self::B<self::B::•::U, self::B::•::W>
     let dynamic #redirecting_factory = self::C::• in let self::B::•::U #typeArg0 = null in let self::B::•::W #typeArg1 = null in let core::Map<self::B::•::U, self::B::•::W> #typeArg2 = null in invalid-expression;
 }
-class C<V extends core::Object, S extends core::Object, R extends core::Object> extends self::B<self::C::V, self::C::S> {
+class C<V extends core::Object = dynamic, S extends core::Object = dynamic, R extends core::Object = dynamic> extends self::B<self::C::V, self::C::S> {
   constructor •() → void
     ;
   method toString() → dynamic
diff --git a/pkg/front_end/testcases/redirection_type_arguments.dart.direct.expect b/pkg/front_end/testcases/redirection_type_arguments.dart.direct.expect
index 8a13842..c39fbd5 100644
--- a/pkg/front_end/testcases/redirection_type_arguments.dart.direct.expect
+++ b/pkg/front_end/testcases/redirection_type_arguments.dart.direct.expect
@@ -11,7 +11,7 @@
   static factory •() → self::A
     let dynamic #redirecting_factory = self::B::• in let core::String #typeArg0 = null in invalid-expression;
 }
-class B<T extends core::Object> extends self::A {
+class B<T extends core::Object = dynamic> extends self::A {
   const constructor •() → void
     : super self::A::empty()
     ;
diff --git a/pkg/front_end/testcases/redirection_type_arguments.dart.direct.transformed.expect b/pkg/front_end/testcases/redirection_type_arguments.dart.direct.transformed.expect
index 8a13842..c39fbd5 100644
--- a/pkg/front_end/testcases/redirection_type_arguments.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/redirection_type_arguments.dart.direct.transformed.expect
@@ -11,7 +11,7 @@
   static factory •() → self::A
     let dynamic #redirecting_factory = self::B::• in let core::String #typeArg0 = null in invalid-expression;
 }
-class B<T extends core::Object> extends self::A {
+class B<T extends core::Object = dynamic> extends self::A {
   const constructor •() → void
     : super self::A::empty()
     ;
diff --git a/pkg/front_end/testcases/redirection_type_arguments.dart.outline.expect b/pkg/front_end/testcases/redirection_type_arguments.dart.outline.expect
index 3d5f4a4..7ec5a97 100644
--- a/pkg/front_end/testcases/redirection_type_arguments.dart.outline.expect
+++ b/pkg/front_end/testcases/redirection_type_arguments.dart.outline.expect
@@ -9,7 +9,7 @@
   static factory •() → self::A
     let dynamic #redirecting_factory = self::B::• in let core::String #typeArg0 = null in invalid-expression;
 }
-class B<T extends core::Object> extends self::A {
+class B<T extends core::Object = dynamic> extends self::A {
   const constructor •() → void
     ;
   method toString() → dynamic
diff --git a/pkg/front_end/testcases/redirection_type_arguments.dart.strong.expect b/pkg/front_end/testcases/redirection_type_arguments.dart.strong.expect
index 1ded566..781d97dc 100644
--- a/pkg/front_end/testcases/redirection_type_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/redirection_type_arguments.dart.strong.expect
@@ -11,7 +11,7 @@
   static factory •() → self::A
     let dynamic #redirecting_factory = self::B::• in let core::String #typeArg0 = null in invalid-expression;
 }
-class B<T extends core::Object> extends self::A {
+class B<T extends core::Object = dynamic> extends self::A {
   const constructor •() → void
     : super self::A::empty()
     ;
diff --git a/pkg/front_end/testcases/redirection_type_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/redirection_type_arguments.dart.strong.transformed.expect
index f69d118..993c466 100644
--- a/pkg/front_end/testcases/redirection_type_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/redirection_type_arguments.dart.strong.transformed.expect
@@ -11,7 +11,7 @@
   static factory •() → self::A
     let<BottomType> #redirecting_factory = self::B::• in let core::String #typeArg0 = null in invalid-expression;
 }
-class B<T extends core::Object> extends self::A {
+class B<T extends core::Object = dynamic> extends self::A {
   const constructor •() → void
     : super self::A::empty()
     ;
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29981.dart.direct.expect
index 6da0dfb..dad6a74 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C<dynamic> field = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_29981.dart.direct.transformed.expect
index 6da0dfb..dad6a74 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C<dynamic> field = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.outline.expect b/pkg/front_end/testcases/regress/issue_29981.dart.outline.expect
index b6cacd1..95b5a02 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C<dynamic> field;
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
index c4d09ee..5b58a21 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field invalid-type field = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29981.dart.strong.transformed.expect
index c4d09ee..5b58a21 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field invalid-type field = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/regress/issue_30838.dart.direct.expect b/pkg/front_end/testcases/regress/issue_30838.dart.direct.expect
index f535fa7..9e4af92 100644
--- a/pkg/front_end/testcases/regress/issue_30838.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_30838.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<S extends core::Object> = <T extends core::Object>(T) → S;
+typedef Foo<S extends core::Object = dynamic> = <T extends core::Object = dynamic>(T) → S;
 class A extends core::Object {
   field <T extends core::Object>(T) → core::int f = null;
   synthetic constructor •() → void
@@ -12,7 +12,7 @@
     this.f<core::String>("hello");
   }
 }
-static method foo<T extends core::Object>(self::foo::T x) → core::int
+static method foo<T extends core::Object = dynamic>(self::foo::T x) → core::int
   return 3;
 static method bar() → <T extends core::Object>(T) → core::int
   return self::foo;
diff --git a/pkg/front_end/testcases/regress/issue_30838.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_30838.dart.direct.transformed.expect
index f535fa7..9e4af92 100644
--- a/pkg/front_end/testcases/regress/issue_30838.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30838.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<S extends core::Object> = <T extends core::Object>(T) → S;
+typedef Foo<S extends core::Object = dynamic> = <T extends core::Object = dynamic>(T) → S;
 class A extends core::Object {
   field <T extends core::Object>(T) → core::int f = null;
   synthetic constructor •() → void
@@ -12,7 +12,7 @@
     this.f<core::String>("hello");
   }
 }
-static method foo<T extends core::Object>(self::foo::T x) → core::int
+static method foo<T extends core::Object = dynamic>(self::foo::T x) → core::int
   return 3;
 static method bar() → <T extends core::Object>(T) → core::int
   return self::foo;
diff --git a/pkg/front_end/testcases/regress/issue_30838.dart.outline.expect b/pkg/front_end/testcases/regress/issue_30838.dart.outline.expect
index c9ded96..55709ba 100644
--- a/pkg/front_end/testcases/regress/issue_30838.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_30838.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<S extends core::Object> = <T extends core::Object>(T) → S;
+typedef Foo<S extends core::Object = dynamic> = <T extends core::Object = dynamic>(T) → S;
 class A extends core::Object {
   field <T extends core::Object>(T) → core::int f;
   synthetic constructor •() → void
@@ -10,7 +10,7 @@
   method test() → void
     ;
 }
-static method foo<T extends core::Object>(self::foo::T x) → core::int
+static method foo<T extends core::Object = dynamic>(self::foo::T x) → core::int
   ;
 static method bar() → <T extends core::Object>(T) → core::int
   ;
diff --git a/pkg/front_end/testcases/regress/issue_30838.dart.strong.expect b/pkg/front_end/testcases/regress/issue_30838.dart.strong.expect
index c2c1595..f08b8e7 100644
--- a/pkg/front_end/testcases/regress/issue_30838.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_30838.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<S extends core::Object> = <T extends core::Object>(T) → S;
+typedef Foo<S extends core::Object = dynamic> = <T extends core::Object = dynamic>(T) → S;
 class A extends core::Object {
   field <T extends core::Object>(T) → core::int f = null;
   synthetic constructor •() → void
@@ -12,7 +12,7 @@
     this.{self::A::f}<core::String>("hello");
   }
 }
-static method foo<T extends core::Object>(self::foo::T x) → core::int
+static method foo<T extends core::Object = dynamic>(self::foo::T x) → core::int
   return 3;
 static method bar() → <T extends core::Object>(T) → core::int
   return self::foo;
diff --git a/pkg/front_end/testcases/regress/issue_30838.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_30838.dart.strong.transformed.expect
index c2c1595..f08b8e7 100644
--- a/pkg/front_end/testcases/regress/issue_30838.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30838.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<S extends core::Object> = <T extends core::Object>(T) → S;
+typedef Foo<S extends core::Object = dynamic> = <T extends core::Object = dynamic>(T) → S;
 class A extends core::Object {
   field <T extends core::Object>(T) → core::int f = null;
   synthetic constructor •() → void
@@ -12,7 +12,7 @@
     this.{self::A::f}<core::String>("hello");
   }
 }
-static method foo<T extends core::Object>(self::foo::T x) → core::int
+static method foo<T extends core::Object = dynamic>(self::foo::T x) → core::int
   return 3;
 static method bar() → <T extends core::Object>(T) → core::int
   return self::foo;
diff --git a/pkg/front_end/testcases/regress/issue_31181.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31181.dart.direct.expect
index b89cafc..28d2985 100644
--- a/pkg/front_end/testcases/regress/issue_31181.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31181.dart.direct.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<T extends core::Object> = <T extends core::Object>(T) → T;
-static field <T extends core::Object>(T) → T x;
+typedef Foo<T extends core::Object = dynamic> = <T extends core::Object = dynamic>(T) → T;
+static field <T extends core::Object = dynamic>(T) → T x;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31181.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_31181.dart.direct.transformed.expect
index b89cafc..28d2985 100644
--- a/pkg/front_end/testcases/regress/issue_31181.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31181.dart.direct.transformed.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<T extends core::Object> = <T extends core::Object>(T) → T;
-static field <T extends core::Object>(T) → T x;
+typedef Foo<T extends core::Object = dynamic> = <T extends core::Object = dynamic>(T) → T;
+static field <T extends core::Object = dynamic>(T) → T x;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31181.dart.outline.expect b/pkg/front_end/testcases/regress/issue_31181.dart.outline.expect
index 8ca2fe8..b2e2e71 100644
--- a/pkg/front_end/testcases/regress/issue_31181.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31181.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<T extends core::Object> = <T extends core::Object>(T) → T;
-static field <T extends core::Object>(T) → T x;
+typedef Foo<T extends core::Object = dynamic> = <T extends core::Object = dynamic>(T) → T;
+static field <T extends core::Object = dynamic>(T) → T x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_31181.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31181.dart.strong.expect
index b89cafc..28d2985 100644
--- a/pkg/front_end/testcases/regress/issue_31181.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31181.dart.strong.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<T extends core::Object> = <T extends core::Object>(T) → T;
-static field <T extends core::Object>(T) → T x;
+typedef Foo<T extends core::Object = dynamic> = <T extends core::Object = dynamic>(T) → T;
+static field <T extends core::Object = dynamic>(T) → T x;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31181.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31181.dart.strong.transformed.expect
index b89cafc..28d2985 100644
--- a/pkg/front_end/testcases/regress/issue_31181.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31181.dart.strong.transformed.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<T extends core::Object> = <T extends core::Object>(T) → T;
-static field <T extends core::Object>(T) → T x;
+typedef Foo<T extends core::Object = dynamic> = <T extends core::Object = dynamic>(T) → T;
+static field <T extends core::Object = dynamic>(T) → T x;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31190.dart.direct.expect
index 4fad235..808b453 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class Typed<T extends core::Object> extends core::Object {
+class Typed<T extends core::Object = dynamic> extends core::Object {
   field self::Typed::T v = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_31190.dart.direct.transformed.expect
index 4fad235..808b453 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class Typed<T extends core::Object> extends core::Object {
+class Typed<T extends core::Object = dynamic> extends core::Object {
   field self::Typed::T v = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.outline.expect b/pkg/front_end/testcases/regress/issue_31190.dart.outline.expect
index 3f98d5d..b7201fd 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class Typed<T extends core::Object> extends core::Object {
+class Typed<T extends core::Object = dynamic> extends core::Object {
   field self::Typed::T v;
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
index 2eacbb9..38248c76 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class Typed<T extends core::Object> extends core::Object {
+class Typed<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::Typed::T v = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31190.dart.strong.transformed.expect
index 2eacbb9..38248c76 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class Typed<T extends core::Object> extends core::Object {
+class Typed<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::Typed::T v = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/regress/issue_31213.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31213.dart.direct.expect
index 860b081..a54adf0 100644
--- a/pkg/front_end/testcases/regress/issue_31213.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31213.dart.direct.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-typedef C<A extends core::Object, K extends core::Object> = <B extends core::Object>(A, K, B) → core::int;
-typedef D<K extends core::Object> = <A extends core::Object>(core::int) → <B extends core::Object>(A, K, B) → core::int;
-static method producer<K extends core::Object>() → dynamic {
-  return <A extends core::Object>(core::int v1) → dynamic {
-    return <B extends core::Object>(A v2, self::producer::K v3, B v4) → dynamic => 0;
+typedef C<A extends core::Object = dynamic, K extends core::Object = dynamic> = <B extends core::Object = dynamic>(A, K, B) → core::int;
+typedef D<K extends core::Object = dynamic> = <A extends core::Object = dynamic>(core::int) → <B extends core::Object>(A, K, B) → core::int;
+static method producer<K extends core::Object = dynamic>() → dynamic {
+  return <A extends core::Object = dynamic>(core::int v1) → dynamic {
+    return <B extends core::Object = dynamic>(A v2, self::producer::K v3, B v4) → dynamic => 0;
   };
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/regress/issue_31213.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_31213.dart.direct.transformed.expect
index 860b081..a54adf0 100644
--- a/pkg/front_end/testcases/regress/issue_31213.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31213.dart.direct.transformed.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-typedef C<A extends core::Object, K extends core::Object> = <B extends core::Object>(A, K, B) → core::int;
-typedef D<K extends core::Object> = <A extends core::Object>(core::int) → <B extends core::Object>(A, K, B) → core::int;
-static method producer<K extends core::Object>() → dynamic {
-  return <A extends core::Object>(core::int v1) → dynamic {
-    return <B extends core::Object>(A v2, self::producer::K v3, B v4) → dynamic => 0;
+typedef C<A extends core::Object = dynamic, K extends core::Object = dynamic> = <B extends core::Object = dynamic>(A, K, B) → core::int;
+typedef D<K extends core::Object = dynamic> = <A extends core::Object = dynamic>(core::int) → <B extends core::Object>(A, K, B) → core::int;
+static method producer<K extends core::Object = dynamic>() → dynamic {
+  return <A extends core::Object = dynamic>(core::int v1) → dynamic {
+    return <B extends core::Object = dynamic>(A v2, self::producer::K v3, B v4) → dynamic => 0;
   };
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/regress/issue_31213.dart.outline.expect b/pkg/front_end/testcases/regress/issue_31213.dart.outline.expect
index ab22b45..2626a19 100644
--- a/pkg/front_end/testcases/regress/issue_31213.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31213.dart.outline.expect
@@ -2,9 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-typedef C<A extends core::Object, K extends core::Object> = <B extends core::Object>(A, K, B) → core::int;
-typedef D<K extends core::Object> = <A extends core::Object>(core::int) → <B extends core::Object>(A, K, B) → core::int;
-static method producer<K extends core::Object>() → dynamic
+typedef C<A extends core::Object = dynamic, K extends core::Object = dynamic> = <B extends core::Object = dynamic>(A, K, B) → core::int;
+typedef D<K extends core::Object = dynamic> = <A extends core::Object = dynamic>(core::int) → <B extends core::Object>(A, K, B) → core::int;
+static method producer<K extends core::Object = dynamic>() → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_31213.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31213.dart.strong.expect
index c6e0d5f..730da9b 100644
--- a/pkg/front_end/testcases/regress/issue_31213.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31213.dart.strong.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-typedef C<A extends core::Object, K extends core::Object> = <B extends core::Object>(A, K, B) → core::int;
-typedef D<K extends core::Object> = <A extends core::Object>(core::int) → <B extends core::Object>(A, K, B) → core::int;
-static method producer<K extends core::Object>() → dynamic {
-  return <A extends core::Object>(core::int v1) → <B extends core::Object>(A, self::producer::K, B) → core::int {
-    return <B extends core::Object>(A v2, self::producer::K v3, B v4) → core::int => 0;
+typedef C<A extends core::Object = dynamic, K extends core::Object = dynamic> = <B extends core::Object = dynamic>(A, K, B) → core::int;
+typedef D<K extends core::Object = dynamic> = <A extends core::Object = dynamic>(core::int) → <B extends core::Object>(A, K, B) → core::int;
+static method producer<K extends core::Object = dynamic>() → dynamic {
+  return <A extends core::Object = dynamic>(core::int v1) → <B extends core::Object = dynamic>(A, self::producer::K, B) → core::int {
+    return <B extends core::Object = dynamic>(A v2, self::producer::K v3, B v4) → core::int => 0;
   };
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/regress/issue_31213.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31213.dart.strong.transformed.expect
index c6e0d5f..730da9b 100644
--- a/pkg/front_end/testcases/regress/issue_31213.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31213.dart.strong.transformed.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-typedef C<A extends core::Object, K extends core::Object> = <B extends core::Object>(A, K, B) → core::int;
-typedef D<K extends core::Object> = <A extends core::Object>(core::int) → <B extends core::Object>(A, K, B) → core::int;
-static method producer<K extends core::Object>() → dynamic {
-  return <A extends core::Object>(core::int v1) → <B extends core::Object>(A, self::producer::K, B) → core::int {
-    return <B extends core::Object>(A v2, self::producer::K v3, B v4) → core::int => 0;
+typedef C<A extends core::Object = dynamic, K extends core::Object = dynamic> = <B extends core::Object = dynamic>(A, K, B) → core::int;
+typedef D<K extends core::Object = dynamic> = <A extends core::Object = dynamic>(core::int) → <B extends core::Object>(A, K, B) → core::int;
+static method producer<K extends core::Object = dynamic>() → dynamic {
+  return <A extends core::Object = dynamic>(core::int v1) → <B extends core::Object = dynamic>(A, self::producer::K, B) → core::int {
+    return <B extends core::Object = dynamic>(A v2, self::producer::K v3, B v4) → core::int => 0;
   };
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/regress/issue_31766.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31766.dart.direct.expect
index ad01f98..c532f88 100644
--- a/pkg/front_end/testcases/regress/issue_31766.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31766.dart.direct.expect
@@ -10,11 +10,11 @@
     return null;
 }
 static method main() → dynamic {
-  function bar<T extends self::A>(T t) → void {
+  function bar<T extends self::A = dynamic>(T t) → void {
     core::print("t.foo()=${t.foo()}");
   }
   bar.call(new self::A::•());
-  (<S extends self::A>(S s) → dynamic {
+  (<S extends self::A = dynamic>(S s) → dynamic {
     core::print("s.foo()=${s.foo()}");
   }).call(new self::A::•());
 }
diff --git a/pkg/front_end/testcases/regress/issue_31766.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_31766.dart.direct.transformed.expect
index ad01f98..c532f88 100644
--- a/pkg/front_end/testcases/regress/issue_31766.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31766.dart.direct.transformed.expect
@@ -10,11 +10,11 @@
     return null;
 }
 static method main() → dynamic {
-  function bar<T extends self::A>(T t) → void {
+  function bar<T extends self::A = dynamic>(T t) → void {
     core::print("t.foo()=${t.foo()}");
   }
   bar.call(new self::A::•());
-  (<S extends self::A>(S s) → dynamic {
+  (<S extends self::A = dynamic>(S s) → dynamic {
     core::print("s.foo()=${s.foo()}");
   }).call(new self::A::•());
 }
diff --git a/pkg/front_end/testcases/regress/issue_31766.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31766.dart.strong.expect
index 5228fa9..33b060d 100644
--- a/pkg/front_end/testcases/regress/issue_31766.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31766.dart.strong.expect
@@ -10,11 +10,11 @@
     return null;
 }
 static method main() → dynamic {
-  function bar<T extends self::A>(T t) → void {
+  function bar<T extends self::A = dynamic>(T t) → void {
     core::print("t.foo()=${t.{self::A::foo}()}");
   }
   bar.call<self::A>(new self::A::•());
-  (<S extends self::A>(S s) → core::Null {
+  (<S extends self::A = dynamic>(S s) → core::Null {
     core::print("s.foo()=${s.{self::A::foo}()}");
   }).call<self::A>(new self::A::•());
 }
diff --git a/pkg/front_end/testcases/regress/issue_31766.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31766.dart.strong.transformed.expect
index 5228fa9..33b060d 100644
--- a/pkg/front_end/testcases/regress/issue_31766.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31766.dart.strong.transformed.expect
@@ -10,11 +10,11 @@
     return null;
 }
 static method main() → dynamic {
-  function bar<T extends self::A>(T t) → void {
+  function bar<T extends self::A = dynamic>(T t) → void {
     core::print("t.foo()=${t.{self::A::foo}()}");
   }
   bar.call<self::A>(new self::A::•());
-  (<S extends self::A>(S s) → core::Null {
+  (<S extends self::A = dynamic>(S s) → core::Null {
     core::print("s.foo()=${s.{self::A::foo}()}");
   }).call<self::A>(new self::A::•());
 }
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 960d4d1..710cc04 100644
--- a/pkg/front_end/testcases/regress/issue_31846.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31846.dart.direct.expect
@@ -4,7 +4,7 @@
 
 static method main() → dynamic {
   core::print(self::main is () → dynamic);
-  core::print((<T extends core::Object>(T x) → dynamic => x).runtimeType);
-  core::print((<T extends core::num>(T x) → dynamic => x).runtimeType);
-  core::print((<T extends core::Comparable<T>>(T x) → dynamic => x).runtimeType);
+  core::print((<T extends core::Object = dynamic>(T x) → dynamic => x).runtimeType);
+  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);
 }
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 960d4d1..710cc04 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
@@ -4,7 +4,7 @@
 
 static method main() → dynamic {
   core::print(self::main is () → dynamic);
-  core::print((<T extends core::Object>(T x) → dynamic => x).runtimeType);
-  core::print((<T extends core::num>(T x) → dynamic => x).runtimeType);
-  core::print((<T extends core::Comparable<T>>(T x) → dynamic => x).runtimeType);
+  core::print((<T extends core::Object = dynamic>(T x) → dynamic => x).runtimeType);
+  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);
 }
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 8a842f2..fc1a7b3 100644
--- a/pkg/front_end/testcases/regress/issue_31846.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31846.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static method main() → dynamic {
   core::print(self::main is () → dynamic);
-  core::print((<T extends core::Object>(T x) → T => x).{core::Object::runtimeType});
-  core::print((<T extends core::num>(T x) → T => x).{core::Object::runtimeType});
-  core::print((<T extends core::Comparable<T>>(T x) → T => x).{core::Object::runtimeType});
+  core::print((<T extends core::Object = dynamic>(T x) → T => x).{core::Object::runtimeType});
+  core::print((<T extends core::num = dynamic>(T x) → T => x).{core::Object::runtimeType});
+  core::print((<T extends core::Comparable<T> = 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 8a842f2..fc1a7b3 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
@@ -4,7 +4,7 @@
 
 static method main() → dynamic {
   core::print(self::main is () → dynamic);
-  core::print((<T extends core::Object>(T x) → T => x).{core::Object::runtimeType});
-  core::print((<T extends core::num>(T x) → T => x).{core::Object::runtimeType});
-  core::print((<T extends core::Comparable<T>>(T x) → T => x).{core::Object::runtimeType});
+  core::print((<T extends core::Object = dynamic>(T x) → T => x).{core::Object::runtimeType});
+  core::print((<T extends core::num = dynamic>(T x) → T => x).{core::Object::runtimeType});
+  core::print((<T extends core::Comparable<T> = dynamic>(T x) → T => x).{core::Object::runtimeType});
 }
diff --git a/pkg/front_end/testcases/regress/issue_31996.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31996.dart.direct.expect
index 7b5a76e..46c7f90 100644
--- a/pkg/front_end/testcases/regress/issue_31996.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31996.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class B<T extends core::Object> extends core::Object {
+abstract class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-abstract class C<T extends core::Object> extends core::Object {
+abstract class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/regress/issue_31996.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_31996.dart.direct.transformed.expect
index 7b5a76e..46c7f90 100644
--- a/pkg/front_end/testcases/regress/issue_31996.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31996.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class B<T extends core::Object> extends core::Object {
+abstract class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-abstract class C<T extends core::Object> extends core::Object {
+abstract class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/regress/issue_31996.dart.outline.expect b/pkg/front_end/testcases/regress/issue_31996.dart.outline.expect
index 5dca73f..38497b9 100644
--- a/pkg/front_end/testcases/regress/issue_31996.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31996.dart.outline.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class B<T extends core::Object> extends core::Object {
+abstract class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-abstract class C<T extends core::Object> extends core::Object {
+abstract class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/regress/issue_31996.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31996.dart.strong.expect
index 7b5a76e..46c7f90 100644
--- a/pkg/front_end/testcases/regress/issue_31996.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31996.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class B<T extends core::Object> extends core::Object {
+abstract class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-abstract class C<T extends core::Object> extends core::Object {
+abstract class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/regress/issue_31996.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31996.dart.strong.transformed.expect
index 7b5a76e..46c7f90 100644
--- a/pkg/front_end/testcases/regress/issue_31996.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31996.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class B<T extends core::Object> extends core::Object {
+abstract class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-abstract class C<T extends core::Object> extends core::Object {
+abstract class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.direct.expect b/pkg/front_end/testcases/regress/issue_32182.dart.direct.expect
index 634143d..f95cc9a 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_32182.dart.direct.transformed.expect
index aeae487..a899754 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.outline.expect b/pkg/front_end/testcases/regress/issue_32182.dart.outline.expect
index 92da155..a8c130e 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.strong.expect b/pkg/front_end/testcases/regress/issue_32182.dart.strong.expect
index e9a1802..3d90b60 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_32182.dart.strong.transformed.expect
index 179409c..34ee38b 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.direct.expect
index cd8a1ec..24a436e 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.direct.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   field (self::C::T) → void y = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.direct.transformed.expect
index cd8a1ec..24a436e 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.direct.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   field (self::C::T) → void y = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.outline.expect
index 27f223b..e23f39e 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.outline.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   field (self::C::T) → void y;
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.expect
index c6d729f..44fde23 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   field (self::C::T) → void y = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.transformed.expect
index c6d729f..44fde23 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   field (self::C::T) → void y = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.direct.expect
index bf5d9be..bd2b5aa 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends (self::C::T) → void>(self::C::f::U x) → void {}
+  method f<U extends (self::C::T) → void = dynamic>(self::C::f::U x) → void {}
 }
 static method g(self::C<core::num> c) → void {
   c.f<(core::Object) → void>((core::Object o) → dynamic {});
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.direct.transformed.expect
index bf5d9be..bd2b5aa 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends (self::C::T) → void>(self::C::f::U x) → void {}
+  method f<U extends (self::C::T) → void = dynamic>(self::C::f::U x) → void {}
 }
 static method g(self::C<core::num> c) → void {
   c.f<(core::Object) → void>((core::Object o) → dynamic {});
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.outline.expect
index 8ec2342..a709687 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.outline.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
-  method f<U extends (self::C::T) → void>(self::C::f::U x) → void
+  method f<U extends (self::C::T) → void = dynamic>(self::C::f::U x) → void
     ;
 }
 static method g(self::C<core::num> c) → void
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.strong.expect
index 547faf4..9ca2a67 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends (self::C::T) → void>(self::C::f::U x) → void {}
+  method f<U extends (self::C::T) → void = dynamic>(self::C::f::U x) → void {}
 }
 static method g(self::C<core::num> c) → void {
   c.{self::C::f}<(core::Object) → void>((core::Object o) → core::Null {});
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.strong.transformed.expect
index 547faf4..9ca2a67 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends (self::C::T) → void>(self::C::f::U x) → void {}
+  method f<U extends (self::C::T) → void = dynamic>(self::C::f::U x) → void {}
 }
 static method g(self::C<core::num> c) → void {
   c.{self::C::f}<(core::Object) → void>((core::Object o) → core::Null {});
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.direct.expect
index 5221de2..e5707a0 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.direct.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.direct.transformed.expect
index 5221de2..e5707a0 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.direct.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.outline.expect
index a87c9ba..87b34bb 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.outline.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method f1() → (self::C::T) → void
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.expect
index a18c06b..c94a828 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.transformed.expect
index a18c06b..c94a828 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.direct.expect
index 8acd66a..e4d2536 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.direct.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.direct.transformed.expect
index 8acd66a..e4d2536 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.direct.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.outline.expect
index a87c9ba..87b34bb 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.outline.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method f1() → (self::C::T) → void
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.expect
index a67d03d..e9ad7e2 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.transformed.expect
index a67d03d..e9ad7e2 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.direct.expect
index 70ed6d7..7c86eac 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.direct.expect
@@ -2,9 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-typedef G<T extends core::Object> = () → (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+typedef G<T extends core::Object = dynamic> = () → (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   field (self::C::T) → void _x;
   constructor •((self::C::T) → void _x) → void
     : self::C::_x = _x, super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.direct.transformed.expect
index 70ed6d7..7c86eac 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.direct.transformed.expect
@@ -2,9 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-typedef G<T extends core::Object> = () → (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+typedef G<T extends core::Object = dynamic> = () → (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   field (self::C::T) → void _x;
   constructor •((self::C::T) → void _x) → void
     : self::C::_x = _x, super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.outline.expect
index e1a454a..929714f 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.outline.expect
@@ -2,9 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-typedef G<T extends core::Object> = () → (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+typedef G<T extends core::Object = dynamic> = () → (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   field (self::C::T) → void _x;
   constructor •((self::C::T) → void _x) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.expect
index ce92ed1..c12fd60 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.expect
@@ -2,9 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-typedef G<T extends core::Object> = () → (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+typedef G<T extends core::Object = dynamic> = () → (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   field (self::C::T) → void _x;
   constructor •((self::C::T) → void _x) → void
     : self::C::_x = _x, super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.transformed.expect
index ce92ed1..c12fd60 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.transformed.expect
@@ -2,9 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-typedef G<T extends core::Object> = () → (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+typedef G<T extends core::Object = dynamic> = () → (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   field (self::C::T) → void _x;
   constructor •((self::C::T) → void _x) → void
     : self::C::_x = _x, super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.direct.expect
index e4fcea0..427e870 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.direct.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   field (self::C::T) → void y = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.direct.transformed.expect
index e4fcea0..427e870 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.direct.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   field (self::C::T) → void y = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.outline.expect
index 871ab56..46e1514 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.outline.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   field (self::C::T) → void y;
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.expect
index a13a055..0d90e29 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   field (self::C::T) → void y = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.transformed.expect
index a13a055..0d90e29 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   field (self::C::T) → void y = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.direct.expect
index 012a192..a07d5f0 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.direct.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.direct.transformed.expect
index 012a192..a07d5f0 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.direct.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.outline.expect
index 5f2d058..1043616 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.outline.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   get f1() → (self::C::T) → void
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.expect
index 5f2899e..147d4fd 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.transformed.expect
index 5f2899e..147d4fd 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.direct.expect
index 7b9c2c6..35547b1 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.direct.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.direct.transformed.expect
index 7b9c2c6..35547b1 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.direct.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.outline.expect
index 5f2d058..1043616 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.outline.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   get f1() → (self::C::T) → void
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.expect
index 764aea8..6f4b3ea 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.transformed.expect
index 764aea8..6f4b3ea 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.direct.expect
index b0a70d9..4f1bbc3 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends self::C::T>(self::C::f::U x) → void {}
-  method g1<U extends self::C::T>() → void {
+  method f<U extends self::C::T = dynamic>(self::C::f::U x) → void {}
+  method g1<U extends self::C::T = dynamic>() → void {
     this.{self::C::f}<self::C::g1::U>(1.5);
   }
 }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.direct.transformed.expect
index b0a70d9..4f1bbc3 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.direct.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends self::C::T>(self::C::f::U x) → void {}
-  method g1<U extends self::C::T>() → void {
+  method f<U extends self::C::T = dynamic>(self::C::f::U x) → void {}
+  method g1<U extends self::C::T = dynamic>() → void {
     this.{self::C::f}<self::C::g1::U>(1.5);
   }
 }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.outline.expect
index eaad1c0..ec15d19 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.outline.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
-  method f<U extends self::C::T>(self::C::f::U x) → void
+  method f<U extends self::C::T = dynamic>(self::C::f::U x) → void
     ;
-  method g1<U extends self::C::T>() → void
+  method g1<U extends self::C::T = dynamic>() → void
     ;
 }
 static method g2(self::C<core::Object> c) → void
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
index 73a7f87..26fb1d3 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<generic-covariant-impl generic-covariant-interface U extends self::C::T>(self::C::f::U x) → void {}
-  method g1<generic-covariant-impl generic-covariant-interface U extends self::C::T>() → void {
+  method f<generic-covariant-impl generic-covariant-interface U extends self::C::T = dynamic>(self::C::f::U x) → void {}
+  method g1<generic-covariant-impl generic-covariant-interface U extends self::C::T = dynamic>() → void {
     this.{self::C::f}<self::C::g1::U>(let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::C::g1::U'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::C::g1::U'.
     this.f<U>(1.5);
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.transformed.expect
index 25a05fa..d43df56 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.transformed.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<generic-covariant-impl generic-covariant-interface U extends self::C::T>(self::C::f::U x) → void {}
-  method g1<generic-covariant-impl generic-covariant-interface U extends self::C::T>() → void {
+  method f<generic-covariant-impl generic-covariant-interface U extends self::C::T = dynamic>(self::C::f::U x) → void {}
+  method g1<generic-covariant-impl generic-covariant-interface U extends self::C::T = dynamic>() → void {
     this.{self::C::f}<self::C::g1::U>(let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::C::g1::U'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::C::g1::U'.
     this.f<U>(1.5);
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.direct.expect
index 421712c..cf3c2b8 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.direct.transformed.expect
index 421712c..cf3c2b8 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.outline.expect
index 6ebe36d..67723c56 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method f(self::C::T x) → void
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.strong.expect
index 78f2e36..5552a2d 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.strong.transformed.expect
index 78f2e36..5552a2d 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.direct.expect
index 51f994d..3487157 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.direct.transformed.expect
index 51f994d..3487157 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.outline.expect
index d3057ec..3968bbe 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method f1(core::List<self::C::T> x) → void
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.strong.expect
index e945744..79250d9 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.strong.transformed.expect
index e945744..79250d9 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.direct.expect
index 49169f4..7dfdaaf 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.direct.expect
@@ -2,21 +2,21 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f1(self::I::T x) → void;
   abstract method f2(self::I::T x) → void;
 }
-class C<U extends core::Object> extends core::Object implements self::I<core::int> {
+class C<U extends core::Object = dynamic> extends core::Object implements self::I<core::int> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f1(core::int x) → void {}
   method f2(core::int x, [self::C::U y = null]) → void {}
 }
-class D<U extends core::Object> extends self::C<self::D::U> {
+class D<U extends core::Object = dynamic> extends self::C<self::D::U> {
   synthetic constructor •() → void
     : super self::C::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.direct.transformed.expect
index 49169f4..7dfdaaf 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.direct.transformed.expect
@@ -2,21 +2,21 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f1(self::I::T x) → void;
   abstract method f2(self::I::T x) → void;
 }
-class C<U extends core::Object> extends core::Object implements self::I<core::int> {
+class C<U extends core::Object = dynamic> extends core::Object implements self::I<core::int> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f1(core::int x) → void {}
   method f2(core::int x, [self::C::U y = null]) → void {}
 }
-class D<U extends core::Object> extends self::C<self::D::U> {
+class D<U extends core::Object = dynamic> extends self::C<self::D::U> {
   synthetic constructor •() → void
     : super self::C::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.outline.expect
index 6a0cec0..426bf40 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.outline.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   abstract method f1(self::I::T x) → void;
   abstract method f2(self::I::T x) → void;
 }
-class C<U extends core::Object> extends core::Object implements self::I<core::int> {
+class C<U extends core::Object = dynamic> extends core::Object implements self::I<core::int> {
   synthetic constructor •() → void
     ;
   method f1(core::int x) → void
@@ -16,7 +16,7 @@
   method f2(core::int x, [self::C::U y]) → void
     ;
 }
-class D<U extends core::Object> extends self::C<self::D::U> {
+class D<U extends core::Object = dynamic> extends self::C<self::D::U> {
   synthetic constructor •() → void
     ;
   method f1(core::int x) → void
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.strong.expect
index b941549..97d183c 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.strong.expect
@@ -2,21 +2,21 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f1(generic-covariant-impl generic-covariant-interface self::I::T x) → void;
   abstract method f2(generic-covariant-impl generic-covariant-interface self::I::T x) → void;
 }
-class C<U extends core::Object> extends core::Object implements self::I<core::int> {
+class C<U extends core::Object = dynamic> extends core::Object implements self::I<core::int> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f1(generic-covariant-impl core::int x) → void {}
   method f2(generic-covariant-impl core::int x, [generic-covariant-impl generic-covariant-interface self::C::U y = null]) → void {}
 }
-class D<U extends core::Object> extends self::C<self::D::U> {
+class D<U extends core::Object = dynamic> extends self::C<self::D::U> {
   synthetic constructor •() → void
     : super self::C::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.strong.transformed.expect
index b941549..97d183c 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.strong.transformed.expect
@@ -2,21 +2,21 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f1(generic-covariant-impl generic-covariant-interface self::I::T x) → void;
   abstract method f2(generic-covariant-impl generic-covariant-interface self::I::T x) → void;
 }
-class C<U extends core::Object> extends core::Object implements self::I<core::int> {
+class C<U extends core::Object = dynamic> extends core::Object implements self::I<core::int> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f1(generic-covariant-impl core::int x) → void {}
   method f2(generic-covariant-impl core::int x, [generic-covariant-impl generic-covariant-interface self::C::U y = null]) → void {}
 }
-class D<U extends core::Object> extends self::C<self::D::U> {
+class D<U extends core::Object = dynamic> extends self::C<self::D::U> {
   synthetic constructor •() → void
     : super self::C::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.direct.expect
index 8d93c66..6577fa6 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.direct.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.direct.transformed.expect
index 0292b5f..f4b7d39 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.direct.transformed.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.outline.expect
index a9b1002..0a93e1b 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.outline.expect
@@ -8,7 +8,7 @@
   method f(core::int x) → void
     ;
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   abstract method f(self::I::T x) → void;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.strong.expect
index 10178cb..d5ddea7 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.strong.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.strong.transformed.expect
index 2a932d4..1feabc7 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.direct.expect
index e6d6b9b..5c01902 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.direct.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.direct.transformed.expect
index e6d6b9b..5c01902 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.direct.transformed.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.outline.expect
index 57bd231..5990c58 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.outline.expect
@@ -8,7 +8,7 @@
   method f(core::int x) → void
     ;
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   abstract method f(self::I::T x) → void;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.strong.expect
index dfe595c..fb37f0a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.strong.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.strong.transformed.expect
index dfe595c..fb37f0a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.direct.expect
index 2a83d23..eb9914c 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.direct.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.direct.transformed.expect
index 11b38c7..0cc0cd00 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.direct.transformed.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.outline.expect
index 94b5113..4815e5f 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.outline.expect
@@ -8,7 +8,7 @@
   method f(core::int x) → void
     ;
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   abstract method f(self::I::T x) → void;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.strong.expect
index 2f06fdd..710336f 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.strong.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.strong.transformed.expect
index e10a6c4..7d07c7b 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.direct.expect
index f7ef8a8..625be9b 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.direct.expect
@@ -2,9 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-typedef G<T extends core::Object, U extends core::Object> = (T) → U;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+typedef G<T extends core::Object = dynamic, U extends core::Object = dynamic> = (T) → U;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.direct.transformed.expect
index f7ef8a8..625be9b 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.direct.transformed.expect
@@ -2,9 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-typedef G<T extends core::Object, U extends core::Object> = (T) → U;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+typedef G<T extends core::Object = dynamic, U extends core::Object = dynamic> = (T) → U;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.outline.expect
index 351f537..f1468ee 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.outline.expect
@@ -2,9 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-typedef G<T extends core::Object, U extends core::Object> = (T) → U;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+typedef G<T extends core::Object = dynamic, U extends core::Object = dynamic> = (T) → U;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method f1(self::C::T x) → void
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.strong.expect
index 89e8e41..b36578d 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.strong.expect
@@ -2,9 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-typedef G<T extends core::Object, U extends core::Object> = (T) → U;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+typedef G<T extends core::Object = dynamic, U extends core::Object = dynamic> = (T) → U;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.strong.transformed.expect
index 89e8e41..b36578d 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.strong.transformed.expect
@@ -2,9 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-typedef G<T extends core::Object, U extends core::Object> = (T) → U;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+typedef G<T extends core::Object = dynamic, U extends core::Object = dynamic> = (T) → U;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.direct.expect
index 773f079..85f3c37 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → dynamic;
+typedef F<T extends core::Object = dynamic> = (T) → dynamic;
 class C extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.direct.transformed.expect
index 773f079..85f3c37 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → dynamic;
+typedef F<T extends core::Object = dynamic> = (T) → dynamic;
 class C extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.outline.expect
index c28351a..2b11d85 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → dynamic;
+typedef F<T extends core::Object = dynamic> = (T) → dynamic;
 class C extends core::Object {
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.strong.expect
index 03b5829..ba57944 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → dynamic;
+typedef F<T extends core::Object = dynamic> = (T) → dynamic;
 class C extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.strong.transformed.expect
index 03b5829..ba57944 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → dynamic;
+typedef F<T extends core::Object = dynamic> = (T) → dynamic;
 class C extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.direct.expect
index 3552fdc..af80278 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.direct.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.direct.transformed.expect
index 3552fdc..af80278 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.direct.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.outline.expect
index 0ab028a..70e1cb2 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.outline.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T x;
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.strong.expect
index 6dcd2b4..872b355 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.strong.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.strong.transformed.expect
index 6dcd2b4..872b355 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.direct.expect
index e710937..4ac52bc 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.direct.transformed.expect
index e710937..4ac52bc 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.outline.expect
index 29cb370..3ce3e00 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method f1(self::C::T x) → void
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.strong.expect
index 4655e62..24e6b93 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.strong.transformed.expect
index 4655e62..24e6b93 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.direct.expect
index 1bd3bd3..7595443 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.direct.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends self::C::T>(self::C::f::U x) → void {}
+  method f<U extends self::C::T = dynamic>(self::C::f::U x) → void {}
 }
 static method g1(dynamic d) → void {
   d.f<core::num>(1.5);
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.direct.transformed.expect
index 1bd3bd3..7595443 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.direct.transformed.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<U extends self::C::T>(self::C::f::U x) → void {}
+  method f<U extends self::C::T = dynamic>(self::C::f::U x) → void {}
 }
 static method g1(dynamic d) → void {
   d.f<core::num>(1.5);
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.outline.expect
index 1beaf51..b72ecf1 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.outline.expect
@@ -2,10 +2,10 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
-  method f<U extends self::C::T>(self::C::f::U x) → void
+  method f<U extends self::C::T = dynamic>(self::C::f::U x) → void
     ;
 }
 static method g1(dynamic d) → void
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.strong.expect
index 3ebc69c..015a396 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.strong.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<generic-covariant-impl generic-covariant-interface U extends self::C::T>(self::C::f::U x) → void {}
+  method f<generic-covariant-impl generic-covariant-interface U extends self::C::T = dynamic>(self::C::f::U x) → void {}
 }
 static method g1(dynamic d) → void {
   d.f<core::num>(1.5);
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.strong.transformed.expect
index 3ebc69c..015a396 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.strong.transformed.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method f<generic-covariant-impl generic-covariant-interface U extends self::C::T>(self::C::f::U x) → void {}
+  method f<generic-covariant-impl generic-covariant-interface U extends self::C::T = dynamic>(self::C::f::U x) → void {}
 }
 static method g1(dynamic d) → void {
   d.f<core::num>(1.5);
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.direct.expect
index bd9af0e..ed9baff 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   field self::B::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.direct.transformed.expect
index bd9af0e..ed9baff 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   field self::B::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.outline.expect
index 2ac3d36..b253175 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   field self::B::T x;
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.expect
index 0620b1b..ad33099 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::B::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.transformed.expect
index 0620b1b..ad33099 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::B::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.direct.expect
index e6905e8..de3d63c 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.direct.expect
@@ -19,7 +19,7 @@
     }
   }
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.direct.transformed.expect
index e6905e8..de3d63c 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.direct.transformed.expect
@@ -19,7 +19,7 @@
     }
   }
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.outline.expect
index eb83109..9719eeb 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.outline.expect
@@ -13,7 +13,7 @@
   method check(core::Object expectedValue) → void
     ;
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   abstract method f([self::I::T x]) → void;
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.strong.expect
index 8db2e73..3cd551d 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.strong.expect
@@ -19,7 +19,7 @@
     }
   }
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.strong.transformed.expect
index 8db2e73..3cd551d 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.strong.transformed.expect
@@ -19,7 +19,7 @@
     }
   }
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.direct.expect
index bc78480..33fa3f3 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.direct.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x, core::int y) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.direct.transformed.expect
index bc78480..33fa3f3 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.direct.transformed.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x, core::int y) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.outline.expect
index 9abb71b..8206474 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.outline.expect
@@ -8,7 +8,7 @@
   method f(core::int x, core::int y) → void
     ;
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   abstract method f(self::I::T x, core::int y) → void;
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.strong.expect
index 0bfc9ad..71807009 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.strong.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x, core::int y) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.strong.transformed.expect
index 0bfc9ad..71807009 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x, core::int y) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.direct.expect
index e76c032..61904ef 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T y = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.direct.transformed.expect
index e76c032..61904ef 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T y = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.outline.expect
index d22bd7e..88ddc9b 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   field self::C::T y;
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.strong.expect
index 42d0664..94d01ed 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T y = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.strong.transformed.expect
index 42d0664..94d01ed 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T y = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.direct.expect
index 6c33166..19e4b9b 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.direct.expect
@@ -15,7 +15,7 @@
     ;
   method f(covariant core::Object x) → void {}
 }
-class C<T extends core::Object> extends core::Object implements self::B {
+class C<T extends core::Object = dynamic> extends core::Object implements self::B {
   field self::C::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.direct.transformed.expect
index 6c33166..19e4b9b 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.direct.transformed.expect
@@ -15,7 +15,7 @@
     ;
   method f(covariant core::Object x) → void {}
 }
-class C<T extends core::Object> extends core::Object implements self::B {
+class C<T extends core::Object = dynamic> extends core::Object implements self::B {
   field self::C::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.outline.expect
index 8382a52..6f06015 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.outline.expect
@@ -14,7 +14,7 @@
   method f(covariant core::Object x) → void
     ;
 }
-class C<T extends core::Object> extends core::Object implements self::B {
+class C<T extends core::Object = dynamic> extends core::Object implements self::B {
   field self::C::T x;
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.strong.expect
index 3cb3cc3..a03ad85 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.strong.expect
@@ -15,7 +15,7 @@
     ;
   method f(covariant core::Object x) → void {}
 }
-class C<T extends core::Object> extends core::Object implements self::B {
+class C<T extends core::Object = dynamic> extends core::Object implements self::B {
   covariant generic-covariant-impl generic-covariant-interface field self::C::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.strong.transformed.expect
index 3cb3cc3..a03ad85 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
     ;
   method f(covariant core::Object x) → void {}
 }
-class C<T extends core::Object> extends core::Object implements self::B {
+class C<T extends core::Object = dynamic> extends core::Object implements self::B {
   covariant generic-covariant-impl generic-covariant-interface field self::C::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.direct.expect
index fa00c10..fb75e74 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.direct.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::num x) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.direct.transformed.expect
index fa00c10..fb75e74 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.direct.transformed.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::num x) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.outline.expect
index 75bdee2..0a75151 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.outline.expect
@@ -8,7 +8,7 @@
   method f(core::num x) → void
     ;
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   abstract method f(self::I::T x) → void;
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.strong.expect
index 4cdc473..730f655 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.strong.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::num x) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.strong.transformed.expect
index 4cdc473..730f655 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::num x) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.direct.expect
index b0e9bfc..20d497c 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.direct.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → dynamic;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → dynamic;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.direct.transformed.expect
index b0e9bfc..20d497c 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.direct.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → dynamic;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → dynamic;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.outline.expect
index 9c70c67..1b240b6 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.outline.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → dynamic;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → dynamic;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method f(self::C::T x) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.expect
index a8e4634..56e15b3 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → dynamic;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → dynamic;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.transformed.expect
index a8e4634..56e15b3 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → dynamic;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → dynamic;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.direct.expect
index 142da81..1c8d174 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.direct.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object, U extends (self::B::T) → void> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic, U extends (self::B::T) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.direct.transformed.expect
index 142da81..1c8d174 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.direct.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object, U extends (self::B::T) → void> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic, U extends (self::B::T) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.outline.expect
index 51e24b8..99545e4 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.outline.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object, U extends (self::B::T) → void> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic, U extends (self::B::T) → void = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   operator +(dynamic other) → self::B<self::B::T, (self::B::T) → void>
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.expect
index abb7c26..447bd5c 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object, U extends (self::B::T) → void> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic, U extends (self::B::T) → void = (dynamic) → void> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.transformed.expect
index abb7c26..447bd5c 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object, U extends (self::B::T) → void> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic, U extends (self::B::T) → void = (dynamic) → void> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.direct.expect
index f7da8fe..aa918d1 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   final field (self::C::T) → core::num plusResult;
   constructor •((self::C::T) → core::num plusResult) → void
     : self::C::plusResult = plusResult, super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.direct.transformed.expect
index f7da8fe..aa918d1 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   final field (self::C::T) → core::num plusResult;
   constructor •((self::C::T) → core::num plusResult) → void
     : self::C::plusResult = plusResult, super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.outline.expect
index cd27122..466bc13 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   final field (self::C::T) → core::num plusResult;
   constructor •((self::C::T) → core::num plusResult) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
index 8a36099..1447ddb 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   final field (self::C::T) → core::num plusResult;
   constructor •((self::C::T) → core::num plusResult) → void
     : self::C::plusResult = plusResult, super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.transformed.expect
index 9e71b47..8378a4c 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   final field (self::C::T) → core::num plusResult;
   constructor •((self::C::T) → core::num plusResult) → void
     : self::C::plusResult = plusResult, super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.direct.expect
index e5d0682..7941e44 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.direct.expect
@@ -2,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(self::B<self::B::T> other) → self::B<self::B::T>
     return null;
 }
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.direct.transformed.expect
index e5d0682..7941e44 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.direct.transformed.expect
@@ -2,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(self::B<self::B::T> other) → self::B<self::B::T>
     return null;
 }
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.outline.expect
index 0b7e9a5..6305ba1 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.outline.expect
@@ -2,14 +2,14 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   operator +(self::B<self::B::T> other) → self::B<self::B::T>
     ;
 }
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   get x() → self::B<(self::C::T) → void>
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
index 5661177..35cd46f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
@@ -2,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(generic-covariant-impl generic-covariant-interface self::B<self::B::T> other) → self::B<self::B::T>
     return null;
 }
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.transformed.expect
index 7a9ab98..5a9326d 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.transformed.expect
@@ -2,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(generic-covariant-impl generic-covariant-interface self::B<self::B::T> other) → self::B<self::B::T>
     return null;
 }
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.direct.expect
index 78a8669..8370814 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.direct.expect
@@ -2,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(self::B<self::B::T> other) → self::B<self::B::T>
     return null;
 }
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.direct.transformed.expect
index 78a8669..8370814 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.direct.transformed.expect
@@ -2,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(self::B<self::B::T> other) → self::B<self::B::T>
     return null;
 }
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.outline.expect
index 4e1e19f..9fe6f92 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.outline.expect
@@ -2,14 +2,14 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   operator +(self::B<self::B::T> other) → self::B<self::B::T>
     ;
 }
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   operator [](core::int i) → self::B<(self::C::T) → void>
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.expect
index 4c7b92c..b74c2ed 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.expect
@@ -2,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(generic-covariant-impl generic-covariant-interface self::B<self::B::T> other) → self::B<self::B::T>
     return null;
 }
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.transformed.expect
index 4c7b92c..b74c2ed 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.transformed.expect
@@ -2,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(generic-covariant-impl generic-covariant-interface self::B<self::B::T> other) → self::B<self::B::T>
     return null;
 }
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.direct.expect
index 02c5897..be5b7ea 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.direct.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.direct.transformed.expect
index 02c5897..be5b7ea 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.direct.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.outline.expect
index 31036c6..136af72 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.outline.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   operator [](core::int i) → (self::C::T) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.expect
index 4c9a372..5d00df6 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.transformed.expect
index 4c9a372..5d00df6 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class C<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.direct.expect
index e8eb073..7d922fa 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.direct.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(self::B::T x) → void {}
   method g({self::B::T x = null}) → void {}
-  method h<U extends self::B::T>() → void {}
+  method h<U extends self::B::T = dynamic>() → void {}
 }
 class C extends self::B<core::int> {
   synthetic constructor •() → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.direct.transformed.expect
index e8eb073..7d922fa 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.direct.transformed.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(self::B::T x) → void {}
   method g({self::B::T x = null}) → void {}
-  method h<U extends self::B::T>() → void {}
+  method h<U extends self::B::T = dynamic>() → void {}
 }
 class C extends self::B<core::int> {
   synthetic constructor •() → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.outline.expect
index ebd92db..895a16d 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.outline.expect
@@ -2,14 +2,14 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method f(self::B::T x) → void
     ;
   method g({self::B::T x}) → void
     ;
-  method h<U extends self::B::T>() → void
+  method h<U extends self::B::T = dynamic>() → void
     ;
 }
 class C extends self::B<core::int> {
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.strong.expect
index e4bff7d..485a5a8 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.strong.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(generic-covariant-impl generic-covariant-interface self::B::T x) → void {}
   method g({generic-covariant-impl generic-covariant-interface self::B::T x = null}) → void {}
-  method h<generic-covariant-impl generic-covariant-interface U extends self::B::T>() → void {}
+  method h<generic-covariant-impl generic-covariant-interface U extends self::B::T = dynamic>() → void {}
 }
 class C extends self::B<core::int> {
   synthetic constructor •() → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.strong.transformed.expect
index e4bff7d..485a5a8 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.strong.transformed.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(generic-covariant-impl generic-covariant-interface self::B::T x) → void {}
   method g({generic-covariant-impl generic-covariant-interface self::B::T x = null}) → void {}
-  method h<generic-covariant-impl generic-covariant-interface U extends self::B::T>() → void {}
+  method h<generic-covariant-impl generic-covariant-interface U extends self::B::T = dynamic>() → void {}
 }
 class C extends self::B<core::int> {
   synthetic constructor •() → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.direct.expect
index 5ae17d3..25d0e7a 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   field self::B::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.direct.transformed.expect
index 5ae17d3..25d0e7a 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   field self::B::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.outline.expect
index b70e682..5146cef 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   field self::B::T x;
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.strong.expect
index e0ee96e..0de2a48 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::B::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.strong.transformed.expect
index e0ee96e..0de2a48 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::B::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.direct.expect
index 2582858..caf1225 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.direct.expect
@@ -2,14 +2,14 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   field self::B::T x = null;
   field self::B::T y = null;
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-abstract class C<T extends core::Object> extends core::Object implements self::B<core::num> {
+abstract class C<T extends core::Object = dynamic> extends core::Object implements self::B<core::num> {
   field dynamic x = null;
   synthetic constructor •() → void
     : super core::Object::•()
@@ -17,7 +17,7 @@
   abstract get y() → dynamic;
   abstract set y(dynamic value) → dynamic;
 }
-abstract class D<T extends core::Object> extends core::Object implements self::B<self::D::T> {
+abstract class D<T extends core::Object = dynamic> extends core::Object implements self::B<self::D::T> {
   field dynamic x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.direct.transformed.expect
index 2582858..caf1225 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.direct.transformed.expect
@@ -2,14 +2,14 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   field self::B::T x = null;
   field self::B::T y = null;
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-abstract class C<T extends core::Object> extends core::Object implements self::B<core::num> {
+abstract class C<T extends core::Object = dynamic> extends core::Object implements self::B<core::num> {
   field dynamic x = null;
   synthetic constructor •() → void
     : super core::Object::•()
@@ -17,7 +17,7 @@
   abstract get y() → dynamic;
   abstract set y(dynamic value) → dynamic;
 }
-abstract class D<T extends core::Object> extends core::Object implements self::B<self::D::T> {
+abstract class D<T extends core::Object = dynamic> extends core::Object implements self::B<self::D::T> {
   field dynamic x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.outline.expect
index 6ae5d4d..441306a 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.outline.expect
@@ -2,20 +2,20 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   field self::B::T x;
   field self::B::T y;
   synthetic constructor •() → void
     ;
 }
-abstract class C<T extends core::Object> extends core::Object implements self::B<core::num> {
+abstract class C<T extends core::Object = dynamic> extends core::Object implements self::B<core::num> {
   field dynamic x;
   synthetic constructor •() → void
     ;
   abstract get y() → dynamic;
   abstract set y(dynamic value) → dynamic;
 }
-abstract class D<T extends core::Object> extends core::Object implements self::B<self::D::T> {
+abstract class D<T extends core::Object = dynamic> extends core::Object implements self::B<self::D::T> {
   field dynamic x;
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.strong.expect
index d32e1ab..56bdaf5 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.strong.expect
@@ -2,14 +2,14 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::B::T x = null;
   generic-covariant-impl generic-covariant-interface field self::B::T y = null;
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-abstract class C<T extends core::Object> extends core::Object implements self::B<core::num> {
+abstract class C<T extends core::Object = dynamic> extends core::Object implements self::B<core::num> {
   generic-covariant-impl field core::num x = null;
   synthetic constructor •() → void
     : super core::Object::•()
@@ -17,7 +17,7 @@
   abstract get y() → core::num;
   abstract set y(generic-covariant-impl core::num value) → void;
 }
-abstract class D<T extends core::Object> extends core::Object implements self::B<self::D::T> {
+abstract class D<T extends core::Object = dynamic> extends core::Object implements self::B<self::D::T> {
   generic-covariant-impl generic-covariant-interface field self::D::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.strong.transformed.expect
index d32e1ab..56bdaf5 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.strong.transformed.expect
@@ -2,14 +2,14 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::B::T x = null;
   generic-covariant-impl generic-covariant-interface field self::B::T y = null;
   synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
-abstract class C<T extends core::Object> extends core::Object implements self::B<core::num> {
+abstract class C<T extends core::Object = dynamic> extends core::Object implements self::B<core::num> {
   generic-covariant-impl field core::num x = null;
   synthetic constructor •() → void
     : super core::Object::•()
@@ -17,7 +17,7 @@
   abstract get y() → core::num;
   abstract set y(generic-covariant-impl core::num value) → void;
 }
-abstract class D<T extends core::Object> extends core::Object implements self::B<self::D::T> {
+abstract class D<T extends core::Object = dynamic> extends core::Object implements self::B<self::D::T> {
   generic-covariant-impl generic-covariant-interface field self::D::T x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.direct.expect
index 4c4735d..386f01b 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.direct.expect
@@ -19,7 +19,7 @@
     throw "Should not be reached";
   }
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.direct.transformed.expect
index 78ffd8c5..0cdd702 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.direct.transformed.expect
@@ -19,7 +19,7 @@
     throw "Should not be reached";
   }
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
index 05bfd76..a054265 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
@@ -14,7 +14,7 @@
   set y(core::int value) → void
     ;
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   abstract get x() → self::I::T;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect
index 7ae9bb9..314d87d 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect
@@ -19,7 +19,7 @@
     throw "Should not be reached";
   }
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.direct.expect
index 20bef1d..16a273b 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
+typedef F<T extends core::Object = dynamic> = (T) → void;
 class B extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
@@ -14,14 +14,14 @@
     throw "Should not be reached";
   }
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → (self::I::T) → void;
   abstract set x(core::Object value) → void;
 }
-abstract class M<T extends core::Object> extends core::Object {
+abstract class M<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -32,7 +32,7 @@
   }
   abstract method f() → self::M::T;
 }
-abstract class C<T extends core::Object> = self::B with self::M<(self::C::T) → void> implements self::I<self::C::T> {
+abstract class C<T extends core::Object = dynamic> = self::B with self::M<(self::C::T) → void> implements self::I<self::C::T> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.direct.transformed.expect
index f43208c..92d7a50 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
+typedef F<T extends core::Object = dynamic> = (T) → void;
 class B extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
@@ -14,14 +14,14 @@
     throw "Should not be reached";
   }
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → (self::I::T) → void;
   abstract set x(core::Object value) → void;
 }
-abstract class M<T extends core::Object> extends core::Object {
+abstract class M<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -32,7 +32,7 @@
   }
   abstract method f() → self::M::T;
 }
-abstract class C<T extends core::Object> extends self::B implements self::I<self::C::T>, self::M<(self::C::T) → void> {
+abstract class C<T extends core::Object = dynamic> extends self::B implements self::I<self::C::T>, self::M<(self::C::T) → void> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.outline.expect
index 95b1dc0..6ce8632 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
+typedef F<T extends core::Object = dynamic> = (T) → void;
 class B extends core::Object {
   synthetic constructor •() → void
     ;
@@ -11,13 +11,13 @@
   set x(core::Object value) → void
     ;
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   abstract get x() → (self::I::T) → void;
   abstract set x(core::Object value) → void;
 }
-abstract class M<T extends core::Object> extends core::Object {
+abstract class M<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   get x() → self::M::T
@@ -26,7 +26,7 @@
     ;
   abstract method f() → self::M::T;
 }
-abstract class C<T extends core::Object> = self::B with self::M<(self::C::T) → void> implements self::I<self::C::T> {
+abstract class C<T extends core::Object = dynamic> = self::B with self::M<(self::C::T) → void> implements self::I<self::C::T> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.strong.expect
index f3d6139..606c252 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
+typedef F<T extends core::Object = dynamic> = (T) → void;
 class B extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
@@ -14,14 +14,14 @@
     throw "Should not be reached";
   }
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → (self::I::T) → void;
   abstract set x(core::Object value) → void;
 }
-abstract class M<T extends core::Object> extends core::Object {
+abstract class M<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
@@ -32,7 +32,7 @@
   }
   abstract method f() → self::M::T;
 }
-abstract class C<T extends core::Object> = self::B with self::M<(self::C::T) → void> implements self::I<self::C::T> {
+abstract class C<T extends core::Object = dynamic> = self::B with self::M<(self::C::T) → void> implements self::I<self::C::T> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.direct.expect
index f15e59d..ddda646 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.direct.expect
@@ -19,7 +19,7 @@
     throw "Should not be reached";
   }
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.direct.transformed.expect
index b204ff8..062777f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.direct.transformed.expect
@@ -19,7 +19,7 @@
     throw "Should not be reached";
   }
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect
index 27d681e..2bd1d45 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect
@@ -14,7 +14,7 @@
   set y(core::int value) → void
     ;
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   abstract get x() → self::I::T;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.expect
index 9fc4e47..77c4077 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.expect
@@ -19,7 +19,7 @@
     throw "Should not be reached";
   }
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.direct.expect
index 8324835..8075c32 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.direct.expect
@@ -2,20 +2,20 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x) → self::B::T {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(core::Object x) → self::I::T;
 }
-class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
+class C<T extends core::Object = dynamic> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.direct.transformed.expect
index 8324835..8075c32 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.direct.transformed.expect
@@ -2,20 +2,20 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x) → self::B::T {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(core::Object x) → self::I::T;
 }
-class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
+class C<T extends core::Object = dynamic> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.outline.expect
index ea24f69..9da9feb 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.outline.expect
@@ -2,19 +2,19 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method f(core::int x) → self::B::T
     ;
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   abstract method f(core::Object x) → self::I::T;
 }
-class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
+class C<T extends core::Object = dynamic> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.strong.expect
index fde8b6f..d78be9f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.strong.expect
@@ -2,20 +2,20 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x) → self::B::T {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(core::Object x) → self::I::T;
 }
-class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
+class C<T extends core::Object = dynamic> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.direct.expect
index 1d29587..a267375 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.direct.expect
@@ -2,20 +2,20 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f((self::B::T) → void x, core::int y) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f((self::I::T) → void x, core::Object y) → void;
 }
-class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
+class C<T extends core::Object = dynamic> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.direct.transformed.expect
index 1d29587..a267375 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.direct.transformed.expect
@@ -2,20 +2,20 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f((self::B::T) → void x, core::int y) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f((self::I::T) → void x, core::Object y) → void;
 }
-class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
+class C<T extends core::Object = dynamic> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.outline.expect
index 3c3e508..6959519 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.outline.expect
@@ -2,19 +2,19 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method f((self::B::T) → void x, core::int y) → void
     ;
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   abstract method f((self::I::T) → void x, core::Object y) → void;
 }
-class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
+class C<T extends core::Object = dynamic> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.strong.expect
index ee19538..8e34bf3 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.strong.expect
@@ -2,20 +2,20 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f((self::B::T) → void x, core::int y) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f((self::I::T) → void x, core::Object y) → void;
 }
-class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
+class C<T extends core::Object = dynamic> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.strong.transformed.expect
index ee19538..8e34bf3 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.strong.transformed.expect
@@ -2,20 +2,20 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-class B<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f((self::B::T) → void x, core::int y) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f((self::I::T) → void x, core::Object y) → void;
 }
-class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
+class C<T extends core::Object = dynamic> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.direct.expect
index fcf58faa..43f51a2 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.direct.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x, core::int y) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.direct.transformed.expect
index fcf58faa..43f51a2 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.direct.transformed.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x, core::int y) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.outline.expect
index 9151bf7..123da75 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.outline.expect
@@ -8,7 +8,7 @@
   method f(core::int x, core::int y) → void
     ;
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   abstract method f(self::I::T x, core::Object y) → void;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.strong.expect
index 892c2f0..c26770b 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.strong.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x, core::int y) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.strong.transformed.expect
index 892c2f0..c26770b 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
     ;
   method f(core::int x, core::int y) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object {
+abstract class I<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.direct.expect
index b2f0239..34a373d 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.direct.transformed.expect
index b2f0239..34a373d 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.outline.expect
index a7c73a2..97b15b3 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method f(self::B::T x, core::int y) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.strong.expect
index 37bfc39..79fe012 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object> extends core::Object {
+class B<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.direct.expect
index a9dd532..863ae95 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.direct.expect
@@ -2,26 +2,26 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-abstract class A<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+abstract class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(self::A::T x, core::int y) → void;
 }
-class B<T extends core::Object> extends core::Object implements self::A<(self::B::T) → void> {
+class B<T extends core::Object = dynamic> extends core::Object implements self::A<(self::B::T) → void> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f((self::B::T) → void x, core::int y) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object implements self::A<(self::I::T) → void> {
+abstract class I<T extends core::Object = dynamic> extends core::Object implements self::A<(self::I::T) → void> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f((self::I::T) → void x, core::Object y) → void;
 }
-class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
+class C<T extends core::Object = dynamic> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.direct.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.direct.transformed.expect
index a9dd532..863ae95 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.direct.transformed.expect
@@ -2,26 +2,26 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-abstract class A<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+abstract class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(self::A::T x, core::int y) → void;
 }
-class B<T extends core::Object> extends core::Object implements self::A<(self::B::T) → void> {
+class B<T extends core::Object = dynamic> extends core::Object implements self::A<(self::B::T) → void> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f((self::B::T) → void x, core::int y) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object implements self::A<(self::I::T) → void> {
+abstract class I<T extends core::Object = dynamic> extends core::Object implements self::A<(self::I::T) → void> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f((self::I::T) → void x, core::Object y) → void;
 }
-class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
+class C<T extends core::Object = dynamic> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.outline.expect
index 9e334f5..723d19c 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.outline.expect
@@ -2,24 +2,24 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-abstract class A<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+abstract class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   abstract method f(self::A::T x, core::int y) → void;
 }
-class B<T extends core::Object> extends core::Object implements self::A<(self::B::T) → void> {
+class B<T extends core::Object = dynamic> extends core::Object implements self::A<(self::B::T) → void> {
   synthetic constructor •() → void
     ;
   method f((self::B::T) → void x, core::int y) → void
     ;
 }
-abstract class I<T extends core::Object> extends core::Object implements self::A<(self::I::T) → void> {
+abstract class I<T extends core::Object = dynamic> extends core::Object implements self::A<(self::I::T) → void> {
   synthetic constructor •() → void
     ;
   abstract method f((self::I::T) → void x, core::Object y) → void;
 }
-class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
+class C<T extends core::Object = dynamic> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.strong.expect
index fcb22cdd..ee0c689 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.strong.expect
@@ -2,26 +2,26 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object> = (T) → void;
-abstract class A<T extends core::Object> extends core::Object {
+typedef F<T extends core::Object = dynamic> = (T) → void;
+abstract class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(generic-covariant-impl generic-covariant-interface self::A::T x, core::int y) → void;
 }
-class B<T extends core::Object> extends core::Object implements self::A<(self::B::T) → void> {
+class B<T extends core::Object = dynamic> extends core::Object implements self::A<(self::B::T) → void> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(generic-covariant-impl (self::B::T) → void x, core::int y) → void {}
 }
-abstract class I<T extends core::Object> extends core::Object implements self::A<(self::I::T) → void> {
+abstract class I<T extends core::Object = dynamic> extends core::Object implements self::A<(self::I::T) → void> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(generic-covariant-impl (self::I::T) → void x, core::Object y) → void;
 }
-class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
+class C<T extends core::Object = dynamic> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
   synthetic constructor •() → void
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/type_variable_as_super.dart.outline.expect b/pkg/front_end/testcases/type_variable_as_super.dart.outline.expect
index a770e2c..5df44e4 100644
--- a/pkg/front_end/testcases/type_variable_as_super.dart.outline.expect
+++ b/pkg/front_end/testcases/type_variable_as_super.dart.outline.expect
@@ -2,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class A<T extends core::Object> extends core::Object {
+abstract class A<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
-abstract class B<T extends core::Object> extends core::Object {
+abstract class B<T extends core::Object = dynamic> extends core::Object {
   constructor •() → void
     ;
 }
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.direct.expect b/pkg/front_end/testcases/type_variable_prefix.dart.direct.expect
index b588a3e..515d754 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.direct.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.direct.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.direct.transformed.expect b/pkg/front_end/testcases/type_variable_prefix.dart.direct.transformed.expect
index b588a3e..515d754 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.direct.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.outline.expect b/pkg/front_end/testcases/type_variable_prefix.dart.outline.expect
index 6447b5b..be7fb5e 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.outline.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     ;
   method method() → invalid-type
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
index 862b7b7..52774b2 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect b/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect
index bd3a6bd..c26c47a 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object> extends core::Object {
+class C<T extends core::Object = dynamic> extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/vm/testcases/bytecode/instance_creation.dart.expect b/pkg/vm/testcases/bytecode/instance_creation.dart.expect
index b026f3c0..b91a903 100644
--- a/pkg/vm/testcases/bytecode/instance_creation.dart.expect
+++ b/pkg/vm/testcases/bytecode/instance_creation.dart.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class Base<T1 extends core::Object, T2 extends core::Object> extends core::Object {
+class Base<T1 extends core::Object = dynamic, T2 extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::Base::T1 t1 = null;
   generic-covariant-impl generic-covariant-interface field self::Base::T2 t2 = null;
 [@vm.bytecode=
@@ -92,7 +92,7 @@
   abstract forwarding-stub set t1(generic-covariant-impl core::int _) → void;
   abstract forwarding-stub set t2(generic-covariant-impl core::String _) → void;
 }
-class B<T extends core::Object> extends self::Base<core::List<self::B::T>, core::String> {
+class B<T extends core::Object = dynamic> extends self::Base<core::List<self::B::T>, core::String> {
 [@vm.bytecode=
 Bytecode {
   Entry                1
@@ -282,7 +282,7 @@
   [4] = ArgDesc num-args 1, num-type-args 0, names []
   [5] = StaticICData target '#lib::B::', arg-desc CP#4
 }
-]static method foo3<T extends core::Object>() → void {
+]static method foo3<T extends core::Object = dynamic>() → void {
   new self::B::•<core::List<self::foo3::T>>();
 }
 [@vm.bytecode=
diff --git a/pkg/vm/testcases/bytecode/literals.dart.expect b/pkg/vm/testcases/bytecode/literals.dart.expect
index b56cae6..df1fe96 100644
--- a/pkg/vm/testcases/bytecode/literals.dart.expect
+++ b/pkg/vm/testcases/bytecode/literals.dart.expect
@@ -609,7 +609,7 @@
   [22] = StaticICData target 'dart.core::Map::_fromLiteral', arg-desc CP#7
   [23] = StaticICData target 'dart.core::print', arg-desc CP#9
 }
-]static method test_map_literal<T extends core::Object>(core::int a, core::int b, self::test_map_literal::T c) → void {
+]static method test_map_literal<T extends core::Object = dynamic>(core::int a, core::int b, self::test_map_literal::T c) → void {
   core::print(<core::int, core::int>{1: a, b: 2});
   core::print(<core::String, core::int>{"foo": a, b.{core::int::toString}(): 3});
   core::print(<core::String, self::test_map_literal::T>{});
@@ -660,7 +660,7 @@
   [4] = Null
   [5] = StaticICData target 'dart.core::print', arg-desc CP#1
 }
-]static method test_type_literal<T extends core::Object>() → void {
+]static method test_type_literal<T extends core::Object = dynamic>() → void {
   core::print(core::String);
   core::print(self::test_type_literal::T);
 }
diff --git a/pkg/vm/testcases/bytecode/type_ops.dart.expect b/pkg/vm/testcases/bytecode/type_ops.dart.expect
index f53ec42..e6af3e1 100644
--- a/pkg/vm/testcases/bytecode/type_ops.dart.expect
+++ b/pkg/vm/testcases/bytecode/type_ops.dart.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object> extends core::Object {
+class A<T extends core::Object = dynamic> extends core::Object {
 [@vm.bytecode=
 Bytecode {
   Entry                0
@@ -44,7 +44,7 @@
     : super self::A::•()
     ;
 }
-class C<T1 extends core::Object, T2 extends core::Object, T3 extends core::Object> extends self::B {
+class C<T1 extends core::Object = dynamic, T2 extends core::Object = dynamic, T3 extends core::Object = dynamic> extends self::B {
 [@vm.bytecode=
 Bytecode {
   Entry                0
@@ -65,7 +65,7 @@
     : super self::B::•()
     ;
 }
-class D<P extends core::Object, Q extends core::Object> extends self::C<core::int, self::D::Q, self::D::P> {
+class D<P extends core::Object = dynamic, Q extends core::Object = dynamic> extends self::C<core::int, self::D::Q, self::D::P> {
   generic-covariant-impl generic-covariant-interface field core::Map<self::D::P, self::D::Q> foo = null;
 [@vm.bytecode=
 Bytecode {
@@ -215,7 +215,7 @@
   [14] = ICData target-name 'get:values', arg-desc CP#6
   [15] = Null
 }
-]  method foo3<T1 extends core::Object, T2 extends core::Object>(dynamic z) → dynamic {
+]  method foo3<T1 extends core::Object = dynamic, T2 extends core::Object = dynamic>(dynamic z) → dynamic {
     if(z is self::A<self::D::foo3::T1>) {
       core::print("31");
     }