[cfe] Change outline test to test strong mode

Closes #37904

Change-Id: I75cd093922dbcf29c0b073d6a37aaba9d6c1f5f2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/113697
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
diff --git a/pkg/front_end/test/fasta/outline_test.dart b/pkg/front_end/test/fasta/outline_test.dart
index 3551732..43e9cc9 100644
--- a/pkg/front_end/test/fasta/outline_test.dart
+++ b/pkg/front_end/test/fasta/outline_test.dart
@@ -10,7 +10,6 @@
 
 Future<FastaContext> createContext(
     Chain suite, Map<String, String> environment) {
-  environment[LEGACY_MODE] = "";
   return FastaContext.create(suite, environment);
 }
 
diff --git a/pkg/front_end/testcases/extensions/direct_instance_access.dart.outline.expect b/pkg/front_end/testcases/extensions/direct_instance_access.dart.outline.expect
index f7cedf9..dfcdbe8 100644
--- a/pkg/front_end/testcases/extensions/direct_instance_access.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/direct_instance_access.dart.outline.expect
@@ -1,61 +1,4 @@
 library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:9:1: Error: This requires the 'extension-methods' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// extension Extension on Class {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:9:24: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension Extension on Class {
-//                        ^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:9:24: Error: 'Class' is already declared in this scope.
-// extension Extension on Class {
-//                        ^^^^^
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:5:7: Context: Previous declaration of 'Class'.
-// class Class {
-//       ^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:73:11: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension GenericExtension<T> on GenericClass<T> {
-//           ^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:73:31: Error: Expected '{' before this.
-// extension GenericExtension<T> on GenericClass<T> {
-//                               ^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:73:34: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension GenericExtension<T> on GenericClass<T> {
-//                                  ^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:73:34: Error: 'GenericClass' is already declared in this scope.
-// extension GenericExtension<T> on GenericClass<T> {
-//                                  ^^^^^^^^^^^^
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:69:7: Context: Previous declaration of 'GenericClass'.
-// class GenericClass<T> {
-//       ^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:9:1: Warning: Type 'extension' not found.
-// extension Extension on Class {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:9:21: Warning: Type 'on' not found.
-// extension Extension on Class {
-//                     ^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:73:1: Warning: Type 'extension' not found.
-// extension GenericExtension<T> on GenericClass<T> {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:73:31: Warning: Type 'on' not found.
-// extension GenericExtension<T> on GenericClass<T> {
-//                               ^^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -69,8 +12,105 @@
   synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
     ;
 }
-static field invalid-type Extension;
-static method GenericExtension<T extends core::Object* = dynamic>() → invalid-type
+extension Extension on self::Class* {
+  method readGetter = self::Extension|readGetter;
+  method writeSetterRequired = self::Extension|writeSetterRequired;
+  method writeSetterOptional = self::Extension|writeSetterOptional;
+  method writeSetterNamed = self::Extension|writeSetterNamed;
+  get tearOffGetterNoArgs = self::Extension|get#tearOffGetterNoArgs;
+  get tearOffGetterRequired = self::Extension|get#tearOffGetterRequired;
+  get tearOffGetterOptional = self::Extension|get#tearOffGetterOptional;
+  get tearOffGetterNamed = self::Extension|get#tearOffGetterNamed;
+  get property = self::Extension|get#property;
+  method invocations = self::Extension|invocations;
+  method tearOffs = self::Extension|tearOffs;
+  method getterCalls = self::Extension|getterCalls;
+  set property = self::Extension|set#property;
+}
+extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+  method readGetter = self::GenericExtension|readGetter;
+  method writeSetterRequired = self::GenericExtension|writeSetterRequired;
+  method writeSetterOptional = self::GenericExtension|writeSetterOptional;
+  method writeSetterNamed = self::GenericExtension|writeSetterNamed;
+  method genericWriteSetterRequired = self::GenericExtension|genericWriteSetterRequired;
+  method genericWriteSetterOptional = self::GenericExtension|genericWriteSetterOptional;
+  method genericWriteSetterNamed = self::GenericExtension|genericWriteSetterNamed;
+  get property = self::GenericExtension|get#property;
+  get tearOffGetterNoArgs = self::GenericExtension|get#tearOffGetterNoArgs;
+  get tearOffGetterRequired = self::GenericExtension|get#tearOffGetterRequired;
+  get tearOffGetterOptional = self::GenericExtension|get#tearOffGetterOptional;
+  get tearOffGetterNamed = self::GenericExtension|get#tearOffGetterNamed;
+  get tearOffGetterGenericRequired = self::GenericExtension|get#tearOffGetterGenericRequired;
+  get tearOffGetterGenericOptional = self::GenericExtension|get#tearOffGetterGenericOptional;
+  get tearOffGetterGenericNamed = self::GenericExtension|get#tearOffGetterGenericNamed;
+  method invocations = self::GenericExtension|invocations;
+  method tearOffs = self::GenericExtension|tearOffs;
+  method getterCalls = self::GenericExtension|getterCalls;
+  set property = self::GenericExtension|set#property;
+}
+static method Extension|readGetter(final self::Class* #this) → dynamic
+  ;
+static method Extension|writeSetterRequired(final self::Class* #this, dynamic value) → dynamic
+  ;
+static method Extension|writeSetterOptional(final self::Class* #this, [dynamic value]) → dynamic
+  ;
+static method Extension|writeSetterNamed(final self::Class* #this, {dynamic value}) → dynamic
+  ;
+static method Extension|get#tearOffGetterNoArgs(final self::Class* #this) → dynamic
+  ;
+static method Extension|get#tearOffGetterRequired(final self::Class* #this) → dynamic
+  ;
+static method Extension|get#tearOffGetterOptional(final self::Class* #this) → dynamic
+  ;
+static method Extension|get#tearOffGetterNamed(final self::Class* #this) → dynamic
+  ;
+static method Extension|get#property(final self::Class* #this) → dynamic
+  ;
+static method Extension|set#property(final self::Class* #this, dynamic value) → void
+  ;
+static method Extension|invocations(final self::Class* #this, dynamic value) → dynamic
+  ;
+static method Extension|tearOffs(final self::Class* #this, dynamic value) → dynamic
+  ;
+static method Extension|getterCalls(final self::Class* #this, dynamic value) → dynamic
+  ;
+static method GenericExtension|readGetter<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|readGetter::#T*>* #this) → self::GenericExtension|readGetter::#T*
+  ;
+static method GenericExtension|writeSetterRequired<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|writeSetterRequired::#T*>* #this, self::GenericExtension|writeSetterRequired::#T* value) → dynamic
+  ;
+static method GenericExtension|writeSetterOptional<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|writeSetterOptional::#T*>* #this, [self::GenericExtension|writeSetterOptional::#T* value]) → dynamic
+  ;
+static method GenericExtension|writeSetterNamed<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|writeSetterNamed::#T*>* #this, {self::GenericExtension|writeSetterNamed::#T* value}) → dynamic
+  ;
+static method GenericExtension|genericWriteSetterRequired<#T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterRequired::#T = dynamic>(final self::GenericClass<self::GenericExtension|genericWriteSetterRequired::#T*>* #this, self::GenericExtension|genericWriteSetterRequired::S value) → dynamic
+  ;
+static method GenericExtension|genericWriteSetterOptional<#T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterOptional::#T = dynamic>(final self::GenericClass<self::GenericExtension|genericWriteSetterOptional::#T*>* #this, [self::GenericExtension|genericWriteSetterOptional::S value]) → dynamic
+  ;
+static method GenericExtension|genericWriteSetterNamed<#T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterNamed::#T = dynamic>(final self::GenericClass<self::GenericExtension|genericWriteSetterNamed::#T*>* #this, {self::GenericExtension|genericWriteSetterNamed::S value}) → dynamic
+  ;
+static method GenericExtension|get#property<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#property::#T*>* #this) → self::GenericExtension|get#property::#T*
+  ;
+static method GenericExtension|set#property<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|set#property::#T*>* #this, self::GenericExtension|set#property::#T* value) → void
+  ;
+static method GenericExtension|get#tearOffGetterNoArgs<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterNoArgs::#T*>* #this) → dynamic
+  ;
+static method GenericExtension|get#tearOffGetterRequired<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterRequired::#T*>* #this) → dynamic
+  ;
+static method GenericExtension|get#tearOffGetterOptional<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterOptional::#T*>* #this) → dynamic
+  ;
+static method GenericExtension|get#tearOffGetterNamed<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterNamed::#T*>* #this) → dynamic
+  ;
+static method GenericExtension|get#tearOffGetterGenericRequired<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericRequired::#T*>* #this) → dynamic
+  ;
+static method GenericExtension|get#tearOffGetterGenericOptional<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericOptional::#T*>* #this) → dynamic
+  ;
+static method GenericExtension|get#tearOffGetterGenericNamed<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericNamed::#T*>* #this) → dynamic
+  ;
+static method GenericExtension|invocations<#T extends core::Object* = dynamic, S extends self::GenericExtension|invocations::#T = dynamic>(final self::GenericClass<self::GenericExtension|invocations::#T*>* #this, self::GenericExtension|invocations::S value) → dynamic
+  ;
+static method GenericExtension|tearOffs<#T extends core::Object* = dynamic, S extends self::GenericExtension|tearOffs::#T = dynamic>(final self::GenericClass<self::GenericExtension|tearOffs::#T*>* #this, self::GenericExtension|tearOffs::S value) → dynamic
+  ;
+static method GenericExtension|getterCalls<#T extends core::Object* = dynamic, S extends self::GenericExtension|getterCalls::#T = dynamic>(final self::GenericClass<self::GenericExtension|getterCalls::#T*>* #this, self::GenericExtension|getterCalls::S value) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/direct_static_access.dart.outline.expect b/pkg/front_end/testcases/extensions/direct_static_access.dart.outline.expect
index e6826b8..5a1e9ab 100644
--- a/pkg/front_end/testcases/extensions/direct_static_access.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/direct_static_access.dart.outline.expect
@@ -1,36 +1,4 @@
 library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/extensions/direct_static_access.dart:9:11: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension Extension<T> on Class<T> {
-//           ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_static_access.dart:9:24: Error: Expected '{' before this.
-// extension Extension<T> on Class<T> {
-//                        ^^
-//
-// pkg/front_end/testcases/extensions/direct_static_access.dart:9:27: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension Extension<T> on Class<T> {
-//                           ^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_static_access.dart:9:27: Error: 'Class' is already declared in this scope.
-// extension Extension<T> on Class<T> {
-//                           ^^^^^
-// pkg/front_end/testcases/extensions/direct_static_access.dart:5:7: Context: Previous declaration of 'Class'.
-// class Class<T> {
-//       ^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_static_access.dart:9:1: Warning: Type 'extension' not found.
-// extension Extension<T> on Class<T> {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_static_access.dart:9:24: Warning: Type 'on' not found.
-// extension Extension<T> on Class<T> {
-//                        ^^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -39,7 +7,81 @@
   synthetic constructor •() → self::Class<self::Class::T*>*
     ;
 }
-static method Extension<T extends core::Object* = dynamic>() → invalid-type
+extension Extension<T extends core::Object* = dynamic> on self::Class<T*>* {
+  static get property = get self::Extension|property;
+  static field field = self::Extension|field;
+  static method readGetter = self::Extension|readGetter;
+  static method writeSetterRequired = self::Extension|writeSetterRequired;
+  static method writeSetterOptional = self::Extension|writeSetterOptional;
+  static method writeSetterNamed = self::Extension|writeSetterNamed;
+  static method genericWriteSetterRequired = self::Extension|genericWriteSetterRequired;
+  static method genericWriteSetterOptional = self::Extension|genericWriteSetterOptional;
+  static method genericWriteSetterNamed = self::Extension|genericWriteSetterNamed;
+  static get tearOffGetterNoArgs = get self::Extension|tearOffGetterNoArgs;
+  static get tearOffGetterRequired = get self::Extension|tearOffGetterRequired;
+  static get tearOffGetterOptional = get self::Extension|tearOffGetterOptional;
+  static get tearOffGetterNamed = get self::Extension|tearOffGetterNamed;
+  static get tearOffGetterGenericRequired = get self::Extension|tearOffGetterGenericRequired;
+  static get tearOffGetterGenericOptional = get self::Extension|tearOffGetterGenericOptional;
+  static get tearOffGetterGenericNamed = get self::Extension|tearOffGetterGenericNamed;
+  static method invocationsFromStaticContext = self::Extension|invocationsFromStaticContext;
+  static method tearOffsFromStaticContext = self::Extension|tearOffsFromStaticContext;
+  static method fieldAccessFromStaticContext = self::Extension|fieldAccessFromStaticContext;
+  static method getterCallsFromStaticContext = self::Extension|getterCallsFromStaticContext;
+  method invocationsFromInstanceContext = self::Extension|invocationsFromInstanceContext;
+  method tearOffsFromInstanceContext = self::Extension|tearOffsFromInstanceContext;
+  method fieldAccessFromInstanceContext = self::Extension|fieldAccessFromInstanceContext;
+  method getterCallsFromInstanceContext = self::Extension|getterCallsFromInstanceContext;
+  static set property = set self::Extension|property;
+}
+static field dynamic Extension|field;
+static get Extension|property() → dynamic
+  ;
+static set Extension|property(dynamic value) → void
+  ;
+static method Extension|readGetter() → dynamic
+  ;
+static method Extension|writeSetterRequired(dynamic value) → dynamic
+  ;
+static method Extension|writeSetterOptional([dynamic value]) → dynamic
+  ;
+static method Extension|writeSetterNamed({dynamic value}) → dynamic
+  ;
+static method Extension|genericWriteSetterRequired<S extends core::Object* = dynamic>(self::Extension|genericWriteSetterRequired::S* value) → dynamic
+  ;
+static method Extension|genericWriteSetterOptional<S extends core::Object* = dynamic>([self::Extension|genericWriteSetterOptional::S* value]) → dynamic
+  ;
+static method Extension|genericWriteSetterNamed<S extends core::Object* = dynamic>({self::Extension|genericWriteSetterNamed::S* value}) → dynamic
+  ;
+static get Extension|tearOffGetterNoArgs() → dynamic
+  ;
+static get Extension|tearOffGetterRequired() → dynamic
+  ;
+static get Extension|tearOffGetterOptional() → dynamic
+  ;
+static get Extension|tearOffGetterNamed() → dynamic
+  ;
+static get Extension|tearOffGetterGenericRequired() → dynamic
+  ;
+static get Extension|tearOffGetterGenericOptional() → dynamic
+  ;
+static get Extension|tearOffGetterGenericNamed() → dynamic
+  ;
+static method Extension|invocationsFromStaticContext(core::int* value) → dynamic
+  ;
+static method Extension|tearOffsFromStaticContext(core::int* value) → dynamic
+  ;
+static method Extension|fieldAccessFromStaticContext() → dynamic
+  ;
+static method Extension|getterCallsFromStaticContext(core::int* value) → dynamic
+  ;
+static method Extension|invocationsFromInstanceContext<#T extends core::Object* = dynamic>(final self::Class<self::Extension|invocationsFromInstanceContext::#T*>* #this, self::Extension|invocationsFromInstanceContext::#T* value) → dynamic
+  ;
+static method Extension|tearOffsFromInstanceContext<#T extends core::Object* = dynamic>(final self::Class<self::Extension|tearOffsFromInstanceContext::#T*>* #this, self::Extension|tearOffsFromInstanceContext::#T* value) → dynamic
+  ;
+static method Extension|fieldAccessFromInstanceContext<#T extends core::Object* = dynamic>(final self::Class<self::Extension|fieldAccessFromInstanceContext::#T*>* #this) → dynamic
+  ;
+static method Extension|getterCallsFromInstanceContext<#T extends core::Object* = dynamic>(final self::Class<self::Extension|getterCallsFromInstanceContext::#T*>* #this, self::Extension|getterCallsFromInstanceContext::#T* value) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/explicit_this.dart.outline.expect b/pkg/front_end/testcases/extensions/explicit_this.dart.outline.expect
index 6102ceb..0819186 100644
--- a/pkg/front_end/testcases/extensions/explicit_this.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/explicit_this.dart.outline.expect
@@ -1,32 +1,4 @@
 library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/extensions/explicit_this.dart:10:1: Error: This requires the 'extension-methods' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/explicit_this.dart:10:17: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension A2 on A1 {
-//                 ^^
-//
-// pkg/front_end/testcases/extensions/explicit_this.dart:10:17: Error: 'A1' is already declared in this scope.
-// extension A2 on A1 {
-//                 ^^
-// pkg/front_end/testcases/extensions/explicit_this.dart:5:7: Context: Previous declaration of 'A1'.
-// class A1 {
-//       ^^
-//
-// pkg/front_end/testcases/extensions/explicit_this.dart:10:1: Warning: Type 'extension' not found.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/explicit_this.dart:10:14: Warning: Type 'on' not found.
-// extension A2 on A1 {
-//              ^^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -37,6 +9,16 @@
   method method1() → void
     ;
 }
-static field invalid-type A2;
+extension A2 on self::A1* {
+  method method2 = self::A2|method2;
+  method method3 = self::A2|method3;
+  method method4 = self::A2|method4;
+}
+static method A2|method2(final self::A1* #this) → void
+  ;
+static method A2|method3(final self::A1* #this) → core::Object*
+  ;
+static method A2|method4(final self::A1* #this, core::Object* o) → void
+  ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/implicit_this.dart.outline.expect b/pkg/front_end/testcases/extensions/implicit_this.dart.outline.expect
index ba9ea5f..0819186 100644
--- a/pkg/front_end/testcases/extensions/implicit_this.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/implicit_this.dart.outline.expect
@@ -1,32 +1,4 @@
 library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/extensions/implicit_this.dart:10:1: Error: This requires the 'extension-methods' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/implicit_this.dart:10:17: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension A2 on A1 {
-//                 ^^
-//
-// pkg/front_end/testcases/extensions/implicit_this.dart:10:17: Error: 'A1' is already declared in this scope.
-// extension A2 on A1 {
-//                 ^^
-// pkg/front_end/testcases/extensions/implicit_this.dart:5:7: Context: Previous declaration of 'A1'.
-// class A1 {
-//       ^^
-//
-// pkg/front_end/testcases/extensions/implicit_this.dart:10:1: Warning: Type 'extension' not found.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/implicit_this.dart:10:14: Warning: Type 'on' not found.
-// extension A2 on A1 {
-//              ^^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -37,6 +9,16 @@
   method method1() → void
     ;
 }
-static field invalid-type A2;
+extension A2 on self::A1* {
+  method method2 = self::A2|method2;
+  method method3 = self::A2|method3;
+  method method4 = self::A2|method4;
+}
+static method A2|method2(final self::A1* #this) → void
+  ;
+static method A2|method3(final self::A1* #this) → core::Object*
+  ;
+static method A2|method4(final self::A1* #this, core::Object* o) → void
+  ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/instance_members.dart.outline.expect b/pkg/front_end/testcases/extensions/instance_members.dart.outline.expect
index f1182fb..c2ae0c9 100644
--- a/pkg/front_end/testcases/extensions/instance_members.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/instance_members.dart.outline.expect
@@ -1,61 +1,4 @@
 library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:7:1: Error: This requires the 'extension-methods' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:7:17: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension A2 on A1 {
-//                 ^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:7:17: Error: 'A1' is already declared in this scope.
-// extension A2 on A1 {
-//                 ^^
-// pkg/front_end/testcases/extensions/instance_members.dart:5:7: Context: Previous declaration of 'A1'.
-// class A1 {}
-//       ^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:30:11: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension B2<T> on B1<T> {
-//           ^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:30:17: Error: Expected '{' before this.
-// extension B2<T> on B1<T> {
-//                 ^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:30:20: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension B2<T> on B1<T> {
-//                    ^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:30:20: Error: 'B1' is already declared in this scope.
-// extension B2<T> on B1<T> {
-//                    ^^
-// pkg/front_end/testcases/extensions/instance_members.dart:28:7: Context: Previous declaration of 'B1'.
-// class B1<T> {}
-//       ^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:7:1: Warning: Type 'extension' not found.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:7:14: Warning: Type 'on' not found.
-// extension A2 on A1 {
-//              ^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:30:1: Warning: Type 'extension' not found.
-// extension B2<T> on B1<T> {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:30:17: Warning: Type 'on' not found.
-// extension B2<T> on B1<T> {
-//                 ^^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -67,8 +10,27 @@
   synthetic constructor •() → self::B1<self::B1::T*>*
     ;
 }
-static field invalid-type A2;
-static method B2<T extends core::Object* = dynamic>() → invalid-type
+extension A2 on self::A1* {
+  method method1 = self::A2|method1;
+  method method2 = self::A2|method2;
+  method method3 = self::A2|method3;
+  method method4 = self::A2|method4;
+}
+extension B2<T extends core::Object* = dynamic> on self::B1<T*>* {
+  method method1 = self::B2|method1;
+  method method2 = self::B2|method2;
+}
+static method A2|method1(final self::A1* #this) → self::A1*
+  ;
+static method A2|method2<T extends core::Object* = dynamic>(final self::A1* #this, self::A2|method2::T* o) → self::A1*
+  ;
+static method A2|method3<T extends core::Object* = dynamic>(final self::A1* #this, [self::A2|method3::T* o]) → self::A1*
+  ;
+static method A2|method4<T extends core::Object* = dynamic>(final self::A1* #this, {self::A2|method4::T* o}) → self::A1*
+  ;
+static method B2|method1<#T extends core::Object* = dynamic>(final self::B1<self::B2|method1::#T*>* #this) → self::B1<self::B2|method1::#T*>*
+  ;
+static method B2|method2<#T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::B1<self::B2|method2::#T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::#T*>*
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/other_kinds.dart.outline.expect b/pkg/front_end/testcases/extensions/other_kinds.dart.outline.expect
index a323fdb..48438c1 100644
--- a/pkg/front_end/testcases/extensions/other_kinds.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/other_kinds.dart.outline.expect
@@ -1,32 +1,4 @@
 library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/extensions/other_kinds.dart:18:1: Error: This requires the 'extension-methods' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/other_kinds.dart:18:17: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension A2 on A1 {
-//                 ^^
-//
-// pkg/front_end/testcases/extensions/other_kinds.dart:18:17: Error: 'A1' is already declared in this scope.
-// extension A2 on A1 {
-//                 ^^
-// pkg/front_end/testcases/extensions/other_kinds.dart:5:7: Context: Previous declaration of 'A1'.
-// class A1 {
-//       ^^
-//
-// pkg/front_end/testcases/extensions/other_kinds.dart:18:1: Warning: Type 'extension' not found.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/other_kinds.dart:18:14: Warning: Type 'on' not found.
-// extension A2 on A1 {
-//              ^^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -44,6 +16,24 @@
   static method setStaticField(core::int* value) → void
     ;
 }
-static field invalid-type A2;
+extension A2 on self::A1* {
+  get instanceProperty = self::A2|get#instanceProperty;
+  operator + = self::A2|+;
+  static field staticField = self::A2|staticField;
+  static get staticProperty = get self::A2|staticProperty;
+  set instanceProperty = self::A2|set#instanceProperty;
+  static set staticProperty = set self::A2|staticProperty;
+}
+static field core::int* A2|staticField;
+static method A2|get#instanceProperty(final self::A1* #this) → core::int*
+  ;
+static method A2|set#instanceProperty(final self::A1* #this, core::int* value) → void
+  ;
+static method A2|+(final self::A1* #this, core::int* value) → core::int*
+  ;
+static get A2|staticProperty() → core::int*
+  ;
+static set A2|staticProperty(core::int* value) → void
+  ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/static_access.dart.outline.expect b/pkg/front_end/testcases/extensions/static_access.dart.outline.expect
index 8334102..4e9dc86 100644
--- a/pkg/front_end/testcases/extensions/static_access.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/static_access.dart.outline.expect
@@ -1,32 +1,4 @@
 library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/extensions/static_access.dart:7:1: Error: This requires the 'extension-methods' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// extension Extension on Class {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/static_access.dart:7:24: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension Extension on Class {
-//                        ^^^^^
-//
-// pkg/front_end/testcases/extensions/static_access.dart:7:24: Error: 'Class' is already declared in this scope.
-// extension Extension on Class {
-//                        ^^^^^
-// pkg/front_end/testcases/extensions/static_access.dart:5:7: Context: Previous declaration of 'Class'.
-// class Class {}
-//       ^^^^^
-//
-// pkg/front_end/testcases/extensions/static_access.dart:7:1: Warning: Type 'extension' not found.
-// extension Extension on Class {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/static_access.dart:7:21: Warning: Type 'on' not found.
-// extension Extension on Class {
-//                     ^^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -34,6 +6,21 @@
   synthetic constructor •() → self::Class*
     ;
 }
-static field invalid-type Extension;
+extension Extension on self::Class* {
+  static method method = self::Extension|method;
+  static method genericMethod = self::Extension|genericMethod;
+  static get property = get self::Extension|property;
+  static field field = self::Extension|field;
+  static set property = set self::Extension|property;
+}
+static field dynamic Extension|field;
+static method Extension|method() → dynamic
+  ;
+static method Extension|genericMethod<T extends core::Object* = dynamic>(self::Extension|genericMethod::T* t) → dynamic
+  ;
+static get Extension|property() → dynamic
+  ;
+static set Extension|property(dynamic value) → void
+  ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/type_variables.dart.outline.expect b/pkg/front_end/testcases/extensions/type_variables.dart.outline.expect
index a6d69ea..3689d95 100644
--- a/pkg/front_end/testcases/extensions/type_variables.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/type_variables.dart.outline.expect
@@ -1,36 +1,4 @@
 library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/extensions/type_variables.dart:7:11: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension A2<T> on A1<T> {
-//           ^^
-//
-// pkg/front_end/testcases/extensions/type_variables.dart:7:17: Error: Expected '{' before this.
-// extension A2<T> on A1<T> {
-//                 ^^
-//
-// pkg/front_end/testcases/extensions/type_variables.dart:7:20: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension A2<T> on A1<T> {
-//                    ^^
-//
-// pkg/front_end/testcases/extensions/type_variables.dart:7:20: Error: 'A1' is already declared in this scope.
-// extension A2<T> on A1<T> {
-//                    ^^
-// pkg/front_end/testcases/extensions/type_variables.dart:5:7: Context: Previous declaration of 'A1'.
-// class A1<T> {}
-//       ^^
-//
-// pkg/front_end/testcases/extensions/type_variables.dart:7:1: Warning: Type 'extension' not found.
-// extension A2<T> on A1<T> {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/type_variables.dart:7:17: Warning: Type 'on' not found.
-// extension A2<T> on A1<T> {
-//                 ^^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -38,7 +6,13 @@
   synthetic constructor •() → self::A1<self::A1::T*>*
     ;
 }
-static method A2<T extends core::Object* = dynamic>() → invalid-type
+extension A2<T extends core::Object* = dynamic> on self::A1<T*>* {
+  method method1 = self::A2|method1;
+  method method2 = self::A2|method2;
+}
+static method A2|method1<#T extends core::Object* = dynamic, S extends self::A2|method1::#T = dynamic>(final self::A1<self::A2|method1::#T*>* #this) → self::A1<self::A2|method1::#T*>*
+  ;
+static method A2|method2<#T extends core::Object* = dynamic, S extends self::A1<self::A2|method2::#T>* = dynamic>(final self::A1<self::A2|method2::#T*>* #this, self::A2|method2::S* o) → self::A1<self::A2|method2::#T*>*
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/use_this.dart.outline.expect b/pkg/front_end/testcases/extensions/use_this.dart.outline.expect
index 9c0d4ca..dbd8b2e 100644
--- a/pkg/front_end/testcases/extensions/use_this.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/use_this.dart.outline.expect
@@ -1,61 +1,4 @@
 library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/extensions/use_this.dart:9:1: Error: This requires the 'extension-methods' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:9:17: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension A2 on A1 {
-//                 ^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:9:17: Error: 'A1' is already declared in this scope.
-// extension A2 on A1 {
-//                 ^^
-// pkg/front_end/testcases/extensions/use_this.dart:7:7: Context: Previous declaration of 'A1'.
-// class A1 {}
-//       ^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:22:11: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension B2<T> on B1<T> {
-//           ^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:22:17: Error: Expected '{' before this.
-// extension B2<T> on B1<T> {
-//                 ^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:22:20: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension B2<T> on B1<T> {
-//                    ^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:22:20: Error: 'B1' is already declared in this scope.
-// extension B2<T> on B1<T> {
-//                    ^^
-// pkg/front_end/testcases/extensions/use_this.dart:20:7: Context: Previous declaration of 'B1'.
-// class B1<T> {}
-//       ^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:9:1: Warning: Type 'extension' not found.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:9:14: Warning: Type 'on' not found.
-// extension A2 on A1 {
-//              ^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:22:1: Warning: Type 'extension' not found.
-// extension B2<T> on B1<T> {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:22:17: Warning: Type 'on' not found.
-// extension B2<T> on B1<T> {
-//                 ^^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -67,8 +10,21 @@
   synthetic constructor •() → self::B1<self::B1::T*>*
     ;
 }
-static field invalid-type A2;
-static method B2<T extends core::Object* = dynamic>() → invalid-type
+extension A2 on self::A1* {
+  method method1 = self::A2|method1;
+  method method2 = self::A2|method2;
+}
+extension B2<T extends core::Object* = dynamic> on self::B1<T*>* {
+  method method1 = self::B2|method1;
+  method method2 = self::B2|method2;
+}
+static method A2|method1(final self::A1* #this) → self::A1*
+  ;
+static method A2|method2<T extends core::Object* = dynamic>(final self::A1* #this, self::A2|method2::T* o) → self::A1*
+  ;
+static method B2|method1<#T extends core::Object* = dynamic>(final self::B1<self::B2|method1::#T*>* #this) → self::B1<self::B2|method1::#T*>*
+  ;
+static method B2|method2<#T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::B1<self::B2|method2::#T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::#T*>*
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart.outline.expect b/pkg/front_end/testcases/general/DeltaBlue.dart.outline.expect
index daecf9e..0d1797b 100644
--- a/pkg/front_end/testcases/general/DeltaBlue.dart.outline.expect
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart.outline.expect
@@ -183,13 +183,13 @@
   method execute() → void
     ;
 }
-static const field dynamic REQUIRED = const self::Strength::•(0, "required");
-static const field dynamic STRONG_PREFERRED = const self::Strength::•(1, "strongPreferred");
-static const field dynamic PREFERRED = const self::Strength::•(2, "preferred");
-static const field dynamic STRONG_DEFAULT = const self::Strength::•(3, "strongDefault");
-static const field dynamic NORMAL = const self::Strength::•(4, "normal");
-static const field dynamic WEAK_DEFAULT = const self::Strength::•(5, "weakDefault");
-static const field dynamic WEAKEST = const self::Strength::•(6, "weakest");
+static const field self::Strength* REQUIRED = const self::Strength::•(0, "required");
+static const field self::Strength* STRONG_PREFERRED = const self::Strength::•(1, "strongPreferred");
+static const field self::Strength* PREFERRED = const self::Strength::•(2, "preferred");
+static const field self::Strength* STRONG_DEFAULT = const self::Strength::•(3, "strongDefault");
+static const field self::Strength* NORMAL = const self::Strength::•(4, "normal");
+static const field self::Strength* WEAK_DEFAULT = const self::Strength::•(5, "weakDefault");
+static const field self::Strength* WEAKEST = const self::Strength::•(6, "weakest");
 static const field core::int* NONE = 1;
 static const field core::int* FORWARD = 2;
 static const field core::int* BACKWARD = 0;
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.outline.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.outline.expect
index 466c02c..4c54d2f 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.outline.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.outline.expect
@@ -14,7 +14,7 @@
   static const field core::List<self::Foo*>* values = const <self::Foo*>[self::Foo::bar, self::Foo::baz, self::Foo::cafebabe];
   @self::hest
   static const field self::Foo* bar = const self::Foo::•(0, "Foo.bar");
-  @self::Fisk::fisk<dynamic>(self::hest)
+  @self::Fisk::fisk<core::int*>(self::hest)
   static const field self::Foo* baz = const self::Foo::•(1, "Foo.baz");
   static const field self::Foo* cafebabe = const self::Foo::•(2, "Foo.cafebabe");
   const constructor •(core::int* index, core::String* _name) → self::Foo*
diff --git a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.outline.expect b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.outline.expect
index 60367e2..750b872 100644
--- a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.outline.expect
@@ -5,13 +5,13 @@
 class A<X extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::A<self::A::X*>*
     ;
-  method bar<generic-covariant-impl Y extends self::A::X* = dynamic>() → dynamic
+  method bar<generic-covariant-impl Y extends self::A::X* = self::A::X*>() → dynamic
     ;
 }
 class B extends core::Object {
   synthetic constructor •() → self::B*
     ;
-  static method foo<Y extends core::Object* = dynamic>() → self::A<self::B::foo::Y*>*
+  static method foo<Y extends core::Object* = core::Object*>() → self::A<self::B::foo::Y*>*
     ;
 }
 static method baz() → dynamic
diff --git a/pkg/front_end/testcases/general/bug30695.dart.outline.expect b/pkg/front_end/testcases/general/bug30695.dart.outline.expect
index bb6576d..8ab1586 100644
--- a/pkg/front_end/testcases/general/bug30695.dart.outline.expect
+++ b/pkg/front_end/testcases/general/bug30695.dart.outline.expect
@@ -13,7 +13,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field dynamic foo;
+  field core::int* foo;
   synthetic constructor •() → self::A*
     ;
 }
diff --git a/pkg/front_end/testcases/general/bug31124.dart.outline.expect b/pkg/front_end/testcases/general/bug31124.dart.outline.expect
index 8e65e77..7ac93d0 100644
--- a/pkg/front_end/testcases/general/bug31124.dart.outline.expect
+++ b/pkg/front_end/testcases/general/bug31124.dart.outline.expect
@@ -15,5 +15,6 @@
 //     ^
 //
 import self as self;
+import "dart:core" as core;
 
-static field dynamic a;
+static field () →* core::String* a;
diff --git a/pkg/front_end/testcases/general/bug32866.dart.outline.expect b/pkg/front_end/testcases/general/bug32866.dart.outline.expect
index cb6153c..6857612 100644
--- a/pkg/front_end/testcases/general/bug32866.dart.outline.expect
+++ b/pkg/front_end/testcases/general/bug32866.dart.outline.expect
@@ -9,9 +9,9 @@
 }
 class A extends core::Object implements self::B {
   final field core::String* f;
-  constructor •(dynamic f) → self::A*
+  constructor •(core::String* f) → self::A*
     ;
 }
-static field dynamic a;
+static field self::A* a;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/bug35470.dart.outline.expect b/pkg/front_end/testcases/general/bug35470.dart.outline.expect
index e3abe47..c18a369 100644
--- a/pkg/front_end/testcases/general/bug35470.dart.outline.expect
+++ b/pkg/front_end/testcases/general/bug35470.dart.outline.expect
@@ -5,7 +5,7 @@
 class A<X extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::A<self::A::X*>*
     ;
-  method foo<generic-covariant-impl Y extends self::A::X* = dynamic>() → dynamic
+  method foo<generic-covariant-impl Y extends self::A::X* = self::A::X*>() → dynamic
     ;
 }
 class B extends self::A<dynamic> {
diff --git a/pkg/front_end/testcases/general/bug37476.dart.outline.expect b/pkg/front_end/testcases/general/bug37476.dart.outline.expect
index 6c89350..50be2c0 100644
--- a/pkg/front_end/testcases/general/bug37476.dart.outline.expect
+++ b/pkg/front_end/testcases/general/bug37476.dart.outline.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num* = dynamic> extends core::Object {
+class A<T extends core::num* = core::num*> extends core::Object {
   synthetic constructor •() → self::A<self::A::T*>*
     ;
   method foo() → <S extends self::A::T* = dynamic>(S*) →* void
     ;
 }
-class B<T extends core::num* = dynamic> extends core::Object {
+class B<T extends core::num* = core::num*> extends core::Object {
   synthetic constructor •() → self::B<self::B::T*>*
     ;
   method foo() → (self::B::T*) →* void
diff --git a/pkg/front_end/testcases/general/check_deferred_allocation.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_allocation.dart.outline.expect
index 82269cd..37e88f3 100644
--- a/pkg/front_end/testcases/general/check_deferred_allocation.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_allocation.dart.outline.expect
@@ -19,6 +19,6 @@
   static method m() → core::int*
     ;
 }
-static field dynamic x;
+static field core::int* x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_as_check.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_as_check.dart.outline.expect
index a5d2ec8..efd56f1 100644
--- a/pkg/front_end/testcases/general/check_deferred_as_check.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_as_check.dart.outline.expect
@@ -19,6 +19,6 @@
   static method m() → core::int*
     ;
 }
-static field dynamic x;
+static field core::int* x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_before_args.dart.outline.expect
index a513a65..9871382 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args.dart.outline.expect
@@ -21,6 +21,6 @@
   static method m() → core::int*
     ;
 }
-static field dynamic x;
+static field core::int* x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.outline.expect
index 82269cd..37e88f3 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.outline.expect
@@ -19,6 +19,6 @@
   static method m() → core::int*
     ;
 }
-static field dynamic x;
+static field core::int* x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_call.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_before_call.dart.outline.expect
index 82269cd..37e88f3 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_call.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_call.dart.outline.expect
@@ -19,6 +19,6 @@
   static method m() → core::int*
     ;
 }
-static field dynamic x;
+static field core::int* x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_write.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_before_write.dart.outline.expect
index 82269cd..37e88f3 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_write.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_write.dart.outline.expect
@@ -19,6 +19,6 @@
   static method m() → core::int*
     ;
 }
-static field dynamic x;
+static field core::int* x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_is_check.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_is_check.dart.outline.expect
index a5d2ec8..efd56f1 100644
--- a/pkg/front_end/testcases/general/check_deferred_is_check.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_is_check.dart.outline.expect
@@ -19,6 +19,6 @@
   static method m() → core::int*
     ;
 }
-static field dynamic x;
+static field core::int* x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_read.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_read.dart.outline.expect
index 82269cd..37e88f3 100644
--- a/pkg/front_end/testcases/general/check_deferred_read.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read.dart.outline.expect
@@ -19,6 +19,6 @@
   static method m() → core::int*
     ;
 }
-static field dynamic x;
+static field core::int* x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.outline.expect
index 82269cd..37e88f3 100644
--- a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.outline.expect
@@ -19,6 +19,6 @@
   static method m() → core::int*
     ;
 }
-static field dynamic x;
+static field core::int* x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_read_type.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_read_type.dart.outline.expect
index 82269cd..37e88f3 100644
--- a/pkg/front_end/testcases/general/check_deferred_read_type.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read_type.dart.outline.expect
@@ -19,6 +19,6 @@
   static method m() → core::int*
     ;
 }
-static field dynamic x;
+static field core::int* x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.outline.expect
index 82269cd..37e88f3 100644
--- a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.outline.expect
@@ -19,6 +19,6 @@
   static method m() → core::int*
     ;
 }
-static field dynamic x;
+static field core::int* x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.outline.expect
index 82269cd..37e88f3 100644
--- a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.outline.expect
@@ -19,6 +19,6 @@
   static method m() → core::int*
     ;
 }
-static field dynamic x;
+static field core::int* x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.outline.expect b/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.outline.expect
index 297fe46..fb0387c 100644
--- a/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.outline.expect
+++ b/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.outline.expect
@@ -1,12 +1,20 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/circularity-via-initializing-formal.dart:15:3: Error: Can't infer the type of 'C._circular': circularity found during type inference.
+// Specify the type explicitly.
+//   C._circular(this.f);
+//   ^^^^^^^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field dynamic f;
-  constructor _circular(dynamic f) → self::C*
+  field self::C* f;
+  constructor _circular(self::C* f) → self::C*
     ;
 }
-static field dynamic x;
+static field self::C* x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/clone_function_type.dart.outline.expect b/pkg/front_end/testcases/general/clone_function_type.dart.outline.expect
index a2cf5b5..24bf6bc 100644
--- a/pkg/front_end/testcases/general/clone_function_type.dart.outline.expect
+++ b/pkg/front_end/testcases/general/clone_function_type.dart.outline.expect
@@ -26,6 +26,74 @@
 // class Ef1<X extends Function({int})> {
 //                                  ^
 //
+// pkg/front_end/testcases/general/clone_function_type.dart:67:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// Try changing type arguments so that they conform to the bounds.
+// class Bm2<Z> extends Object with Am2<Function(int), Z> {}
+//       ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+//           ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:70:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// Try changing type arguments so that they conform to the bounds.
+// class Cm2<Z> extends Object with Am2<Function(int x), Z> {}
+//       ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+//           ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:86:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+//  - 'Function' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// class Jm2<Z> extends Object with Am2<Function, Z> {}
+//       ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+//           ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:89:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+//  - 'Function' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// class Km2<Z> extends Object with Am2<Function(Function Function), Z> {}
+//       ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+//           ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:95:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Mm2'.
+// Try changing type arguments so that they conform to the bounds.
+// class Mm2<Z> = Object with Am2<Function(int), Z>;
+//       ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+//           ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:98:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Nm2'.
+// Try changing type arguments so that they conform to the bounds.
+// class Nm2<Z> = Object with Am2<Function(int x), Z>;
+//       ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+//           ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:114:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Um2'.
+//  - 'Function' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// class Um2<Z> = Object with Am2<Function, Z>;
+//       ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+//           ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:117:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Vm2'.
+//  - 'Function' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// class Vm2<Z> = Object with Am2<Function(Function Function), Z>;
+//       ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+//           ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -197,7 +265,7 @@
     : super core::Object::•()
     ;
 }
-class Am2<X extends () →* dynamic = dynamic, Y extends core::Object* = dynamic> extends core::Object {
+class Am2<X extends () →* dynamic = () →* dynamic, Y extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::Am2<self::Am2::X*, self::Am2::Y*>*
     ;
 }
@@ -449,87 +517,87 @@
   synthetic constructor •() → self::Km3<self::Km3::Z*>*
     ;
 }
-class Af1<X extends (core::int*) →* dynamic = dynamic> extends core::Object {
+class Af1<X extends (core::int*) →* dynamic = (core::int*) →* dynamic> extends core::Object {
   static factory foo<X extends (core::int*) →* dynamic = dynamic>() → self::Af1<self::Af1::foo::X*>*
     ;
 }
-class Bf1<X extends (core::int*) →* dynamic = dynamic> extends core::Object {
+class Bf1<X extends (core::int*) →* dynamic = (core::int*) →* dynamic> extends core::Object {
   static factory foo<X extends (core::int*) →* dynamic = dynamic>() → self::Bf1<self::Bf1::foo::X*>*
     ;
 }
-class Cf1<X extends () →* core::int* = dynamic> extends core::Object {
+class Cf1<X extends () →* core::int* = () →* core::int*> extends core::Object {
   static factory foo<X extends () →* core::int* = dynamic>() → self::Cf1<self::Cf1::foo::X*>*
     ;
 }
-class Df1<X extends () →* dynamic = dynamic> extends core::Object {
+class Df1<X extends () →* dynamic = () →* dynamic> extends core::Object {
   static factory foo<X extends () →* dynamic = dynamic>() → self::Df1<self::Df1::foo::X*>*
     ;
 }
-class Ef1<X extends () →* dynamic = dynamic> extends core::Object {
+class Ef1<X extends () →* dynamic = () →* dynamic> extends core::Object {
   static factory foo<X extends () →* dynamic = dynamic>() → self::Ef1<self::Ef1::foo::X*>*
     ;
 }
-class Ff1<X extends ({x: core::int*}) →* dynamic = dynamic> extends core::Object {
+class Ff1<X extends ({x: core::int*}) →* dynamic = ({x: core::int*}) →* dynamic> extends core::Object {
   static factory foo<X extends ({x: core::int*}) →* dynamic = dynamic>() → self::Ff1<self::Ff1::foo::X*>*
     ;
 }
-class Gf1<X extends ([core::int*]) →* dynamic = dynamic> extends core::Object {
+class Gf1<X extends ([core::int*]) →* dynamic = ([core::int*]) →* dynamic> extends core::Object {
   static factory foo<X extends ([core::int*]) →* dynamic = dynamic>() → self::Gf1<self::Gf1::foo::X*>*
     ;
 }
-class Hf1<X extends ([core::int*]) →* dynamic = dynamic> extends core::Object {
+class Hf1<X extends ([core::int*]) →* dynamic = ([core::int*]) →* dynamic> extends core::Object {
   static factory foo<X extends ([core::int*]) →* dynamic = dynamic>() → self::Hf1<self::Hf1::foo::X*>*
     ;
 }
-class If1<X extends core::Function* = dynamic> extends core::Object {
+class If1<X extends core::Function* = core::Function*> extends core::Object {
   static factory foo<X extends core::Function* = dynamic>() → self::If1<self::If1::foo::X*>*
     ;
 }
-class Jf1<X extends (core::Function*) →* dynamic = dynamic> extends core::Object {
+class Jf1<X extends (core::Function*) →* dynamic = (core::Function*) →* dynamic> extends core::Object {
   static factory foo<X extends (core::Function*) →* dynamic = dynamic>() → self::Jf1<self::Jf1::foo::X*>*
     ;
 }
-class Kf1<X extends () →* (() →* core::Function*) →* dynamic = dynamic> extends core::Object {
+class Kf1<X extends () →* (() →* core::Function*) →* dynamic = () →* (() →* core::Function*) →* dynamic> extends core::Object {
   static factory foo<X extends () →* (() →* core::Function*) →* dynamic = dynamic>() → self::Kf1<self::Kf1::foo::X*>*
     ;
 }
-class Bf2<X extends (core::int*) →* dynamic = dynamic> extends core::Object {
+class Bf2<X extends (core::int*) →* dynamic = (core::int*) →* dynamic> extends core::Object {
   static factory foo<X extends (core::int*) →* dynamic = dynamic>() → self::Bf2<self::Bf2::foo::X*>*
     ;
 }
-class Cf2<X extends (core::int*) →* dynamic = dynamic> extends core::Object {
+class Cf2<X extends (core::int*) →* dynamic = (core::int*) →* dynamic> extends core::Object {
   static factory foo<X extends (core::int*) →* dynamic = dynamic>() → self::Cf2<self::Cf2::foo::X*>*
     ;
 }
-class Df2<X extends () →* core::int* = dynamic> extends core::Object {
+class Df2<X extends () →* core::int* = () →* core::int*> extends core::Object {
   static factory foo<X extends () →* core::int* = dynamic>() → self::Df2<self::Df2::foo::X*>*
     ;
 }
-class Ef2<X extends () →* dynamic = dynamic> extends core::Object {
+class Ef2<X extends () →* dynamic = () →* dynamic> extends core::Object {
   static factory foo<X extends () →* dynamic = dynamic>() → self::Ef2<self::Ef2::foo::X*>*
     ;
 }
-class Ff2<X extends () →* dynamic = dynamic> extends core::Object {
+class Ff2<X extends () →* dynamic = () →* dynamic> extends core::Object {
   static factory foo<X extends () →* dynamic = dynamic>() → self::Ff2<self::Ff2::foo::X*>*
     ;
 }
-class Gf2<X extends ({x: core::int*}) →* dynamic = dynamic> extends core::Object {
+class Gf2<X extends ({x: core::int*}) →* dynamic = ({x: core::int*}) →* dynamic> extends core::Object {
   static factory foo<X extends ({x: core::int*}) →* dynamic = dynamic>() → self::Gf2<self::Gf2::foo::X*>*
     ;
 }
-class Hf2<X extends ([core::int*]) →* dynamic = dynamic> extends core::Object {
+class Hf2<X extends ([core::int*]) →* dynamic = ([core::int*]) →* dynamic> extends core::Object {
   static factory foo<X extends ([core::int*]) →* dynamic = dynamic>() → self::Hf2<self::Hf2::foo::X*>*
     ;
 }
-class If2<X extends ([core::int*]) →* dynamic = dynamic> extends core::Object {
+class If2<X extends ([core::int*]) →* dynamic = ([core::int*]) →* dynamic> extends core::Object {
   static factory foo<X extends ([core::int*]) →* dynamic = dynamic>() → self::If2<self::If2::foo::X*>*
     ;
 }
-class Jf2<X extends (core::Function*) →* dynamic = dynamic> extends core::Object {
+class Jf2<X extends (core::Function*) →* dynamic = (core::Function*) →* dynamic> extends core::Object {
   static factory foo<X extends (core::Function*) →* dynamic = dynamic>() → self::Jf2<self::Jf2::foo::X*>*
     ;
 }
-class Kf2<X extends () →* (() →* core::Function*) →* dynamic = dynamic> extends core::Object {
+class Kf2<X extends () →* (() →* core::Function*) →* dynamic = () →* (() →* core::Function*) →* dynamic> extends core::Object {
   static factory foo<X extends () →* (() →* core::Function*) →* dynamic = dynamic>() → self::Kf2<self::Kf2::foo::X*>*
     ;
 }
diff --git a/pkg/front_end/testcases/general/closure.dart.outline.expect b/pkg/front_end/testcases/general/closure.dart.outline.expect
index 0f97df6..4f62ce2 100644
--- a/pkg/front_end/testcases/general/closure.dart.outline.expect
+++ b/pkg/front_end/testcases/general/closure.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  field dynamic _field;
+  field self::Bar* _field;
   synthetic constructor •() → self::Foo*
     ;
 }
diff --git a/pkg/front_end/testcases/general/complex_class_hierarchy.dart.outline.expect b/pkg/front_end/testcases/general/complex_class_hierarchy.dart.outline.expect
index 901ca71..73716f7 100644
--- a/pkg/front_end/testcases/general/complex_class_hierarchy.dart.outline.expect
+++ b/pkg/front_end/testcases/general/complex_class_hierarchy.dart.outline.expect
@@ -18,7 +18,7 @@
   synthetic constructor •() → self::D*
     ;
 }
-class G<T extends self::A* = dynamic> extends core::Object {
+class G<T extends self::A* = self::A*> extends core::Object {
   synthetic constructor •() → self::G<self::G::T*>*
     ;
 }
diff --git a/pkg/front_end/testcases/general/deferred_type_annotation.dart.outline.expect b/pkg/front_end/testcases/general/deferred_type_annotation.dart.outline.expect
index 7640695..1446703 100644
--- a/pkg/front_end/testcases/general/deferred_type_annotation.dart.outline.expect
+++ b/pkg/front_end/testcases/general/deferred_type_annotation.dart.outline.expect
@@ -20,6 +20,6 @@
   static method m() → core::int*
     ;
 }
-static field dynamic x;
+static field core::int* x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.outline.expect b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.outline.expect
index bedeadd..42a79f3 100644
--- a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.outline.expect
@@ -9,11 +9,11 @@
 // class Dupe {}
 //       ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:13:3: Warning: Type 'Dupe.a' not found.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:13:3: Error: Type 'Dupe.a' not found.
 //   Dupe.a b;
 //   ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:6:45: Warning: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:6:45: Error: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
 // import 'duplicated_bad_prefix_lib2.dart' as dupe;
 //                                             ^
 //
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.outline.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.outline.expect
index 6764ff8..1b8f882 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.outline.expect
@@ -299,7 +299,7 @@
 // typedef Typedef = Object Function();
 //         ^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:65:19: Warning: 'C' isn't a type.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:65:19: Error: 'C' isn't a type.
 // class Sub extends C {
 //                   ^
 // pkg/front_end/testcases/general/duplicated_declarations.dart:65:19: Context: This isn't a type.
@@ -332,7 +332,7 @@
     ;
 }
 class C#2 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  field dynamic field;
+  field core::String* field;
   constructor •(dynamic a) → self::C#2*
     ;
   method m() → dynamic
@@ -347,7 +347,7 @@
     ;
 }
 class C extends core::Object {
-  field dynamic field;
+  field core::String* field;
   constructor •(dynamic a) → self::C*
     ;
   method m() → dynamic
@@ -439,7 +439,7 @@
   method toString() → core::String*
     return this.{=self::AnotherEnum::_name};
 }
-static field dynamic field;
+static field core::String* field;
 static method main() → dynamic
   ;
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.outline.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.outline.expect
index 8e9604a..96aece8 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.outline.expect
@@ -14,7 +14,7 @@
 
 class A extends core::Object {
   field core::int* a;
-  constructor •(dynamic a) → self::A*
+  constructor •(core::int* a) → self::A*
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/general/dynamic_and_void.dart.outline.expect b/pkg/front_end/testcases/general/dynamic_and_void.dart.outline.expect
index 4327762..9583c9b 100644
--- a/pkg/front_end/testcases/general/dynamic_and_void.dart.outline.expect
+++ b/pkg/front_end/testcases/general/dynamic_and_void.dart.outline.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/dynamic_and_void.dart:10:27: Warning: Type 'dynamic' not found.
+// pkg/front_end/testcases/general/dynamic_and_void.dart:10:27: Error: Type 'dynamic' not found.
 // /*@warning=TypeNotFound*/ dynamic testDynamic() => 0;
 //                           ^^^^^^^
 //
diff --git a/pkg/front_end/testcases/general/extension_methods.dart.outline.expect b/pkg/front_end/testcases/general/extension_methods.dart.outline.expect
index 5fcae20..98495a1 100644
--- a/pkg/front_end/testcases/general/extension_methods.dart.outline.expect
+++ b/pkg/front_end/testcases/general/extension_methods.dart.outline.expect
@@ -1,32 +1,4 @@
 library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/general/extension_methods.dart:13:1: Error: This requires the 'extension-methods' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// extension E on C {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/general/extension_methods.dart:13:16: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension E on C {
-//                ^
-//
-// pkg/front_end/testcases/general/extension_methods.dart:13:16: Error: 'C' is already declared in this scope.
-// extension E on C {
-//                ^
-// pkg/front_end/testcases/general/extension_methods.dart:9:7: Context: Previous declaration of 'C'.
-// class C {
-//       ^
-//
-// pkg/front_end/testcases/general/extension_methods.dart:13:1: Warning: Type 'extension' not found.
-// extension E on C {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/general/extension_methods.dart:13:13: Warning: Type 'on' not found.
-// extension E on C {
-//             ^^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -38,6 +10,10 @@
   get one() → core::int*
     ;
 }
-static field invalid-type E;
+extension E on self::C* {
+  get two = self::E|get#two;
+}
+static method E|get#two(final self::C* #this) → core::int*
+  ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/function_in_field.dart.outline.expect b/pkg/front_end/testcases/general/function_in_field.dart.outline.expect
index 3470a7a..9f1148b 100644
--- a/pkg/front_end/testcases/general/function_in_field.dart.outline.expect
+++ b/pkg/front_end/testcases/general/function_in_field.dart.outline.expect
@@ -1,6 +1,7 @@
 library;
 import self as self;
+import "dart:core" as core;
 
-static field dynamic x;
+static field () →* core::int* x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/function_type_assignments.dart.outline.expect b/pkg/front_end/testcases/general/function_type_assignments.dart.outline.expect
index 055c6c8..3edc43d 100644
--- a/pkg/front_end/testcases/general/function_type_assignments.dart.outline.expect
+++ b/pkg/front_end/testcases/general/function_type_assignments.dart.outline.expect
@@ -7,9 +7,9 @@
 static field core::String* z;
 static method identity<T extends core::Object* = dynamic>(self::identity::T* t) → self::identity::T*
   ;
-static method identityObject<T extends core::Object* = dynamic>(self::identityObject::T* t) → self::identityObject::T*
+static method identityObject<T extends core::Object* = core::Object*>(self::identityObject::T* t) → self::identityObject::T*
   ;
-static method identityList<T extends core::List<self::identityList::T>* = dynamic>(self::identityList::T* t) → self::identityList::T*
+static method identityList<T extends core::List<self::identityList::T>* = core::List<dynamic>*>(self::identityList::T* t) → self::identityList::T*
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/function_type_default_value.dart.outline.expect b/pkg/front_end/testcases/general/function_type_default_value.dart.outline.expect
index 9bfb098..9d451cd 100644
--- a/pkg/front_end/testcases/general/function_type_default_value.dart.outline.expect
+++ b/pkg/front_end/testcases/general/function_type_default_value.dart.outline.expect
@@ -10,7 +10,7 @@
 // void Function({obj: Object}) x;
 //                   ^
 //
-// pkg/front_end/testcases/general/function_type_default_value.dart:5:16: Warning: Type 'obj' not found.
+// pkg/front_end/testcases/general/function_type_default_value.dart:5:16: Error: Type 'obj' not found.
 // void Function({obj: Object}) x;
 //                ^^^
 //
diff --git a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.outline.expect b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.outline.expect
index 07147d2..55f17dd 100644
--- a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.outline.expect
+++ b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static const field dynamic constField = 87;
+  static const field core::int* constField = 87;
   const constructor •(dynamic x) → self::C*
     : super core::Object::•()
     ;
 }
-static const field dynamic constTopLevelField = 42;
+static const field core::int* constTopLevelField = 42;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.outline.expect b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.outline.expect
new file mode 100644
index 0000000..5494096
--- /dev/null
+++ b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.outline.expect
@@ -0,0 +1,41 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:6:11: Error: Expected '.' before this.
+//   C.a(this);
+//           ^
+//
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:6:11: Error: Expected an identifier, but got ')'.
+//   C.a(this);
+//           ^
+//
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:7:12: Error: Expected an identifier, but got ')'.
+//   C.b(this.);
+//            ^
+//
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:8:11: Error: Expected '.' before this.
+//   C.c(this, p);
+//           ^
+//
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:8:11: Error: Expected an identifier, but got ','.
+//   C.c(this, p);
+//           ^
+//
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:9:12: Error: Expected an identifier, but got ','.
+//   C.d(this., p);
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  constructor a() → self::C*
+    ;
+  constructor b() → self::C*
+    ;
+  constructor c() → self::C*
+    ;
+  constructor d() → self::C*
+    ;
+}
diff --git a/pkg/front_end/testcases/general/many_errors.dart.outline.expect b/pkg/front_end/testcases/general/many_errors.dart.outline.expect
index 27f485d..8485710 100644
--- a/pkg/front_end/testcases/general/many_errors.dart.outline.expect
+++ b/pkg/front_end/testcases/general/many_errors.dart.outline.expect
@@ -15,7 +15,7 @@
 //   const A.named2() : x = new Object();
 //                          ^^^
 //
-// pkg/front_end/testcases/general/many_errors.dart:10:24: Warning: 'x' is a final instance variable that has already been initialized.
+// pkg/front_end/testcases/general/many_errors.dart:10:24: Error: 'x' is a final instance variable that has already been initialized.
 //   const A.named2() : x = new Object();
 //                        ^
 // pkg/front_end/testcases/general/many_errors.dart:6:9: Context: 'x' was initialized here.
diff --git a/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect b/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect
index fd825b0..c8bbb73 100644
--- a/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
 //   foo() {}
 //   ^
 // pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -12,7 +12,7 @@
 // class A0 = S with M;
 //       ^^
 //
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
 //   foo() {}
 //   ^
 // pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -22,7 +22,7 @@
 // class A1 = S with M1, M;
 //       ^^
 //
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
 //   foo() {}
 //   ^
 // pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -32,7 +32,7 @@
 // class A2 = S with M1, M2, M;
 //       ^^
 //
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
 //   foo() {}
 //   ^
 // pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -42,7 +42,7 @@
 // class A0X = S with M, MX;
 //       ^^^
 //
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
 //   foo() {}
 //   ^
 // pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -52,7 +52,7 @@
 // class A1X = S with M1, M, MX;
 //       ^^^
 //
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
 //   foo() {}
 //   ^
 // pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -62,7 +62,7 @@
 // class A2X = S with M1, M2, M, MX;
 //       ^^^
 //
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
 //   foo() {}
 //   ^
 // pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -72,7 +72,7 @@
 // class B0 extends S with M {}
 //       ^^
 //
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
 //   foo() {}
 //   ^
 // pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -82,7 +82,7 @@
 // class B1 extends S with M1, M {}
 //       ^^
 //
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
 //   foo() {}
 //   ^
 // pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -92,7 +92,7 @@
 // class B2 extends S with M1, M2, M {}
 //       ^^
 //
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
 //   foo() {}
 //   ^
 // pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -102,7 +102,7 @@
 // class B0X extends S with M, MX {}
 //       ^^^
 //
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
 //   foo() {}
 //   ^
 // pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -112,7 +112,7 @@
 // class B1X extends S with M1, M, MX {}
 //       ^^^
 //
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
 //   foo() {}
 //   ^
 // pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.outline.expect b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.outline.expect
index 485f78a..5d68397 100644
--- a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.outline.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A*
     ;
 }
-class C<T extends self::A* = dynamic> extends core::Object {
+class C<T extends self::A* = self::A*> extends core::Object {
   generic-covariant-impl field self::C::T* _field;
   synthetic constructor •() → self::C<self::C::T*>*
     ;
diff --git a/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.outline.expect b/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.outline.expect
index d28f088..2da0b47 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.outline.expect
@@ -1,4 +1,27 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:26:9: Error: The return type of the method 'F.y' is 'A', which does not match the return type, 'B', of the overridden method, 'D.y'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
+// Change to a subtype of 'B'.
+//   A get y => null;
+//         ^
+// pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:16:7: Context: This is the overridden method ('y').
+//   get y => null; // Inferred type: B
+//       ^
+//
+// pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:25:16: Error: The parameter 'value' of the method 'F.x' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'D.x'.
+//  - 'B' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void set x(B value) {}
+//                ^
+// pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:15:12: Context: This is the overridden method ('x').
+//   void set x(value) {} // Inferred type: A
+//            ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/override_check_accessor_basic.dart.outline.expect b/pkg/front_end/testcases/general/override_check_accessor_basic.dart.outline.expect
index ba70391..5e1469f 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_basic.dart.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_accessor_basic.dart.outline.expect
@@ -1,4 +1,27 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_check_accessor_basic.dart:21:14: Error: The return type of the method 'E.y' is 'Object', which does not match the return type, 'A', of the overridden method, 'C.y'.
+//  - 'Object' is from 'dart:core'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_basic.dart'.
+// Change to a subtype of 'A'.
+//   Object get y => null;
+//              ^
+// pkg/front_end/testcases/general/override_check_accessor_basic.dart:11:9: Context: This is the overridden method ('y').
+//   A get y => null;
+//         ^
+//
+// pkg/front_end/testcases/general/override_check_accessor_basic.dart:20:16: Error: The parameter 'value' of the method 'E.x' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.x'.
+//  - 'B' is from 'pkg/front_end/testcases/general/override_check_accessor_basic.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_basic.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void set x(B value) {}
+//                ^
+// pkg/front_end/testcases/general/override_check_accessor_basic.dart:10:12: Context: This is the overridden method ('x').
+//   void set x(A value) {}
+//            ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.outline.expect b/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.outline.expect
index a3eaa5e..c042245 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.outline.expect
@@ -1,4 +1,26 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart:22:17: Error: The parameter 'value' of the method 'D.x4' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.x4'.
+//  - 'B' is from 'pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void set x4(B value) {} // Not covariant
+//                 ^
+// pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart:13:12: Context: This is the overridden method ('x4').
+//   void set x4(A value) {}
+//            ^
+//
+// pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart:23:32: Error: The parameter 'value' of the method 'D.x5' has type 'String', which does not match the corresponding type, 'A', in the overridden method, 'C.x5'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void set x5(covariant String value) {}
+//                                ^
+// pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart:14:12: Context: This is the overridden method ('x5').
+//   void set x5(covariant A value) {}
+//            ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/override_check_after_inference.dart.outline.expect b/pkg/front_end/testcases/general/override_check_after_inference.dart.outline.expect
index 3f00110..a04839a 100644
--- a/pkg/front_end/testcases/general/override_check_after_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_after_inference.dart.outline.expect
@@ -1,4 +1,17 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_check_after_inference.dart:22:12: Error: The parameter 'x' of the method 'F.f' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'D.f'.
+//  - 'B' is from 'pkg/front_end/testcases/general/override_check_after_inference.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_after_inference.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void f(B x) {}
+//            ^
+// pkg/front_end/testcases/general/override_check_after_inference.dart:14:8: Context: This is the overridden method ('f').
+//   void f(x) {} // Inferred type: (A) -> void
+//        ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/override_check_basic.dart.outline.expect b/pkg/front_end/testcases/general/override_check_basic.dart.outline.expect
index aa8593d..82a45c2 100644
--- a/pkg/front_end/testcases/general/override_check_basic.dart.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_basic.dart.outline.expect
@@ -1,4 +1,47 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_check_basic.dart:27:10: Error: The return type of the method 'E.f4' is 'Object', which does not match the return type, 'A', of the overridden method, 'C.f4'.
+//  - 'Object' is from 'dart:core'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+// Change to a subtype of 'A'.
+//   Object f4() {}
+//          ^
+// pkg/front_end/testcases/general/override_check_basic.dart:13:5: Context: This is the overridden method ('f4').
+//   A f4() {}
+//     ^
+//
+// pkg/front_end/testcases/general/override_check_basic.dart:26:14: Error: The parameter 'x' of the method 'E.f3' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f3'.
+//  - 'B' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void f3({B x}) {}
+//              ^
+// pkg/front_end/testcases/general/override_check_basic.dart:12:8: Context: This is the overridden method ('f3').
+//   void f3({A x}) {}
+//        ^
+//
+// pkg/front_end/testcases/general/override_check_basic.dart:24:13: Error: The parameter 'x' of the method 'E.f1' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f1'.
+//  - 'B' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void f1(B x) {}
+//             ^
+// pkg/front_end/testcases/general/override_check_basic.dart:10:8: Context: This is the overridden method ('f1').
+//   void f1(A x) {}
+//        ^
+//
+// pkg/front_end/testcases/general/override_check_basic.dart:25:14: Error: The parameter 'x' of the method 'E.f2' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f2'.
+//  - 'B' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void f2([B x]) {}
+//              ^
+// pkg/front_end/testcases/general/override_check_basic.dart:11:8: Context: This is the overridden method ('f2').
+//   void f2([A x]) {}
+//        ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.outline.expect b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.outline.expect
index 6865779..193f75c 100644
--- a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.outline.expect
@@ -2,20 +2,20 @@
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends self::Foo<self::Foo::T>* = dynamic> extends core::Object {
+class Foo<T extends self::Foo<self::Foo::T>* = self::Foo<dynamic>*> extends core::Object {
   synthetic constructor •() → self::Foo<self::Foo::T*>*
     ;
 }
 abstract class Bar extends core::Object {
   synthetic constructor •() → self::Bar*
     ;
-  abstract method fisk<S extends self::Foo<self::Bar::fisk::S>* = dynamic>() → void;
+  abstract method fisk<S extends self::Foo<self::Bar::fisk::S>* = self::Foo<dynamic>*>() → void;
 }
 class Hest extends core::Object implements self::Bar {
   synthetic constructor •() → self::Hest*
     ;
   @core::override
-  method fisk<U extends self::Foo<self::Hest::fisk::U>* = dynamic>() → void
+  method fisk<U extends self::Foo<self::Hest::fisk::U>* = self::Foo<dynamic>*>() → void
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.outline.expect b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.outline.expect
index a65975c..4c08082 100644
--- a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.outline.expect
@@ -1,4 +1,26 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart:23:28: Error: The parameter 'x' of the method 'D.f5' has type 'String', which does not match the corresponding type, 'A', in the overridden method, 'C.f5'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void f5(covariant String x) {}
+//                            ^
+// pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart:14:8: Context: This is the overridden method ('f5').
+//   void f5(covariant A x) {}
+//        ^
+//
+// pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart:22:13: Error: The parameter 'x' of the method 'D.f4' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f4'.
+//  - 'B' is from 'pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void f4(B x) {} // Not covariant
+//             ^
+// pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart:13:8: Context: This is the overridden method ('f4').
+//   void f4(A x) {}
+//        ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.outline.expect b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.outline.expect
index 6cf04c8..65071a6 100644
--- a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.outline.expect
+++ b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.outline.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart:8:6: Warning: Using 'pkg/front_end/testcases/general/part_not_part_of_same_named_library_lib1.dart' as part of 'pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart' but its 'part of' declaration says 'foo'.
+// pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart:8:6: Error: Using 'pkg/front_end/testcases/general/part_not_part_of_same_named_library_lib1.dart' as part of 'pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart' but its 'part of' declaration says 'foo'.
 // Try changing the 'part of' declaration to use a relative file name.
 // part 'part_not_part_of_same_named_library_lib1.dart';
 //      ^
diff --git a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.outline.expect b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.outline.expect
index de523ea..bcd74cd 100644
--- a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.outline.expect
+++ b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.outline.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart:8:6: Warning: Using 'pkg/front_end/testcases/general/part_part_of_different_unnamed_library_lib1.dart' as part of 'pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart' but its 'part of' declaration says 'pkg/front_end/testcases/general/part_part_of_different_unnamed_library_lib2.dart'.
+// pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart:8:6: Error: Using 'pkg/front_end/testcases/general/part_part_of_different_unnamed_library_lib1.dart' as part of 'pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart' but its 'part of' declaration says 'pkg/front_end/testcases/general/part_part_of_different_unnamed_library_lib2.dart'.
 // part 'part_part_of_different_unnamed_library_lib1.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.outline.expect b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.outline.expect
index 886001a..4f277c37 100644
--- a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.outline.expect
+++ b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.outline.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/part_part_of_differently_named_library.dart:10:6: Warning: Using 'pkg/front_end/testcases/general/part_part_of_differently_named_library_lib1.dart' as part of 'foo' but its 'part of' declaration says 'bar'.
+// pkg/front_end/testcases/general/part_part_of_differently_named_library.dart:10:6: Error: Using 'pkg/front_end/testcases/general/part_part_of_differently_named_library_lib1.dart' as part of 'foo' but its 'part of' declaration says 'bar'.
 // part 'part_part_of_differently_named_library_lib1.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/general/qualified.dart.outline.expect b/pkg/front_end/testcases/general/qualified.dart.outline.expect
index 08d37e9..c8750b5 100644
--- a/pkg/front_end/testcases/general/qualified.dart.outline.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.outline.expect
@@ -9,18 +9,14 @@
 // class Bad extends lib.Missing {
 //       ^^^
 //
-// pkg/front_end/testcases/general/qualified.dart:11:19: Warning: Type 'lib.Missing' not found.
-// class Bad extends lib.Missing {
-//                   ^^^^^^^^^^^
-//
-// pkg/front_end/testcases/general/qualified.dart:12:3: Warning: Type 'lib.Missing' not found.
-//   lib.Missing method() {}
-//   ^^^^^^^^^^^
-//
 // pkg/front_end/testcases/general/qualified.dart:11:19: Error: Type 'lib.Missing' not found.
 // class Bad extends lib.Missing {
 //                   ^^^^^^^^^^^
 //
+// pkg/front_end/testcases/general/qualified.dart:12:3: Error: Type 'lib.Missing' not found.
+//   lib.Missing method() {}
+//   ^^^^^^^^^^^
+//
 // pkg/front_end/testcases/general/qualified.dart:18:7: Error: The type 'lib.VoidFunction' can't be used as supertype.
 // class IllegalSupertype extends lib.VoidFunction {}
 //       ^
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.outline.expect
index c4b1096..ba037f1 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.outline.expect
@@ -1,4 +1,13 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+//  - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+//   factory FooBase(int x) = Foo<Tf>;
+//                            ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.outline.expect
index c5cbd80..b81eb59 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.outline.expect
@@ -3,10 +3,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •() → void
+  static field dynamic _redirecting# = <dynamic>[self::A::first, self::A::second];
+  constructor •() → self::A*
     ;
-  redirecting_factory first() = self::A::•;
-  redirecting_factory second() = self::A::first;
+  static factory first() → self::A*
+    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+  static factory second() → self::A*
+    let dynamic #redirecting_factory = self::A::first in invalid-expression;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.outline.expect
index 8d1d812..636af62 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.outline.expect
@@ -10,8 +10,8 @@
   static factory •(dynamic p) → self::Foo*
     let dynamic #redirecting_factory = self::Foo::named in invalid-expression;
 }
-static const field dynamic forParameter = 1;
-static const field dynamic forFactoryItself = 2;
-static const field dynamic anotherForParameter = 3;
+static const field core::int* forParameter = 1;
+static const field core::int* forFactoryItself = 2;
+static const field core::int* anotherForParameter = 3;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.outline.expect
index f14f820..fc62503 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.outline.expect
@@ -3,9 +3,11 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •() → void
+  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  constructor •() → self::A*
     ;
-  redirecting_factory redir() = self::A::•;
+  static factory redir() → self::A*
+    let dynamic #redirecting_factory = self::A::• in invalid-expression;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.outline.expect
index e691673..caf6826 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.outline.expect
@@ -3,20 +3,22 @@
 import "dart:core" as core;
 
 class X extends core::Object {
-  synthetic constructor •() → void
+  synthetic constructor •() → self::X*
     ;
 }
 class Y extends self::X {
-  synthetic constructor •() → void
+  synthetic constructor •() → self::Y*
     ;
 }
 class A extends core::Object {
-  constructor •() → void
+  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  constructor •() → self::A*
     ;
-  redirecting_factory redir() = self::B::•<self::Y>;
+  static factory redir() → self::A*
+    let dynamic #redirecting_factory = self::B::• in let self::Y* #typeArg0 = null in invalid-expression;
 }
-class B<T extends self::X> extends self::A {
-  constructor •() → void
+class B<T extends self::X* = self::X*> extends self::A {
+  constructor •() → self::B<self::B::T*>*
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.outline.expect
index 8e9ac92..4526c6e 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.outline.expect
@@ -2,10 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object, S extends core::Object> extends core::Object {
-  constructor •(self::A::T t, self::A::S s) → void
+class A<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
+  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     ;
-  redirecting_factory redir<T extends core::Object, S extends core::Object>(T t, S s) = self::A::•<T, S>;
+  static factory redir<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
+    let dynamic #redirecting_factory = self::A::• in let self::A::redir::T* #typeArg0 = null in let self::A::redir::S* #typeArg1 = null in invalid-expression;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.outline.expect
index 01df3c7..5c26d8c 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.outline.expect
@@ -3,17 +3,19 @@
 import "dart:core" as core;
 
 class X extends core::Object {
-  synthetic constructor •() → void
+  synthetic constructor •() → self::X*
     ;
 }
 class Y extends self::X {
-  synthetic constructor •() → void
+  synthetic constructor •() → self::Y*
     ;
 }
-class A<T extends core::Object, S extends self::A::T> extends core::Object {
-  constructor •(self::A::T t, self::A::S s) → void
+class A<T extends core::Object* = dynamic, S extends self::A::T* = dynamic> extends core::Object {
+  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     ;
-  redirecting_factory redir<T extends core::Object, S extends T>(T t, S s) = self::A::•<T, S>;
+  static factory redir<T extends core::Object* = dynamic, S extends self::A::redir::T* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
+    let dynamic #redirecting_factory = self::A::• in let self::A::redir::T* #typeArg0 = null in let self::A::redir::S* #typeArg1 = null in invalid-expression;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.outline.expect
index f130ab6..0974ead 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.outline.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::X*
     ;
 }
-class Foo<T extends self::X* = dynamic> extends core::Object {
+class Foo<T extends self::X* = self::X*> extends core::Object {
   generic-covariant-impl field self::Foo::T* x;
   constructor fromX(self::X* _init) → self::Foo<self::Foo::T*>*
     ;
diff --git a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.outline.expect b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.outline.expect
index af53cce..2160bc2 100644
--- a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.outline.expect
+++ b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.outline.expect
@@ -1,4 +1,11 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart:8:12: Error: Type variables can't have generic function types in their bounds.
+// class Hest<TypeX extends TypeY Function<TypeY>(TypeY)> {}
+//            ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/stringliteral.dart.outline.expect b/pkg/front_end/testcases/general/stringliteral.dart.outline.expect
index a46e629..0c2680f 100644
--- a/pkg/front_end/testcases/general/stringliteral.dart.outline.expect
+++ b/pkg/front_end/testcases/general/stringliteral.dart.outline.expect
@@ -1,11 +1,12 @@
 library;
 import self as self;
+import "dart:core" as core;
 
-static field dynamic color;
-static field dynamic thing;
-static field dynamic phrase;
-static field dynamic adjacent;
-static field dynamic linebreaks;
-static field dynamic other;
+static field core::String* color;
+static field core::String* thing;
+static field core::String* phrase;
+static field core::String* adjacent;
+static field core::String* linebreaks;
+static field core::String* other;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/type_variable_prefix.dart.outline.expect b/pkg/front_end/testcases/general/type_variable_prefix.dart.outline.expect
index 8174b6c..519578a 100644
--- a/pkg/front_end/testcases/general/type_variable_prefix.dart.outline.expect
+++ b/pkg/front_end/testcases/general/type_variable_prefix.dart.outline.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_prefix.dart:8:3: Warning: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
+// pkg/front_end/testcases/general/type_variable_prefix.dart:8:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
 //   T.String method() => "Hello, World!";
 //   ^^^^^^^^
 //
diff --git a/pkg/front_end/testcases/general/type_variable_uses.dart.outline.expect b/pkg/front_end/testcases/general/type_variable_uses.dart.outline.expect
index 9bdf117..6de5e4c 100644
--- a/pkg/front_end/testcases/general/type_variable_uses.dart.outline.expect
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart.outline.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:7:15: Warning: Can only use type variables in instance methods.
+// pkg/front_end/testcases/general/type_variable_uses.dart:7:15: Error: Can only use type variables in instance methods.
 //   static C<T> staticMethod() {
 //               ^
 //
diff --git a/pkg/front_end/testcases/general/unsound_promotion.dart.outline.expect b/pkg/front_end/testcases/general/unsound_promotion.dart.outline.expect
index 45f6ecf..9a8c9d9 100644
--- a/pkg/front_end/testcases/general/unsound_promotion.dart.outline.expect
+++ b/pkg/front_end/testcases/general/unsound_promotion.dart.outline.expect
@@ -15,7 +15,7 @@
     ;
 }
 static field core::List<self::A*>* list;
-static method g<T extends self::A* = dynamic>(self::g::T* t) → core::List<self::g::T*>*
+static method g<T extends self::A* = self::A*>(self::g::T* t) → core::List<self::g::T*>*
   ;
 static method f<S extends core::Object* = dynamic>(self::f::S* s) → core::List<self::f::S*>*
   ;
diff --git a/pkg/front_end/testcases/general/var_as_type_name.dart.outline.expect b/pkg/front_end/testcases/general/var_as_type_name.dart.outline.expect
index 421073f..6da5c74 100644
--- a/pkg/front_end/testcases/general/var_as_type_name.dart.outline.expect
+++ b/pkg/front_end/testcases/general/var_as_type_name.dart.outline.expect
@@ -6,7 +6,7 @@
 //   Map<String, var> m;
 //               ^^^
 //
-// pkg/front_end/testcases/general/var_as_type_name.dart:6:15: Warning: Type 'var' not found.
+// pkg/front_end/testcases/general/var_as_type_name.dart:6:15: Error: Type 'var' not found.
 //   Map<String, var> m;
 //               ^^^
 //
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.outline.expect b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.outline.expect
new file mode 100644
index 0000000..2582eae
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static field asy::Future<core::int*>* futureInt;
+static field () →* asy::Future<core::int*>* f;
+static field () →* asy::Future<core::int*>* g;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.outline.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.outline.expect
new file mode 100644
index 0000000..0231dd0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+static field () →* asy::Future<core::int*>* f;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.outline.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.outline.expect
new file mode 100644
index 0000000..d290a5b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static field asy::FutureOr<core::int*>* futureOrInt;
+static field () →* asy::FutureOr<core::int*>* f;
+static field () →* asy::Future<core::int*>* g;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.outline.expect
new file mode 100644
index 0000000..49da2ef
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+
+import "dart:async";
+import "dart:math";
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.outline.expect
new file mode 100644
index 0000000..49da2ef
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+
+import "dart:async";
+import "dart:math";
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.outline.expect
new file mode 100644
index 0000000..49da2ef
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+
+import "dart:async";
+import "dart:math";
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.outline.expect
new file mode 100644
index 0000000..666bc54
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+
+import "dart:async";
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.outline.expect
new file mode 100644
index 0000000..3619892
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test1() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.outline.expect
new file mode 100644
index 0000000..d08afaa
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field () →* core::String* g;
+static method f() → core::String*
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.outline.expect
new file mode 100644
index 0000000..55e2ed1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+import "dart:async";
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.outline.expect
new file mode 100644
index 0000000..55e2ed1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+import "dart:async";
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.outline.expect
new file mode 100644
index 0000000..672fbfb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field dynamic h;
+static method foo((core::Object*) →* core::int* f) → void
+  ;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.outline.expect
new file mode 100644
index 0000000..0a623d0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+
+import "dart:math";
+
+static method test2() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.outline.expect
new file mode 100644
index 0000000..3619892
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test1() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.outline.expect
new file mode 100644
index 0000000..8e85697
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/bottom.dart.outline.expect b/pkg/front_end/testcases/inference/bottom.dart.outline.expect
new file mode 100644
index 0000000..0387d83
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bottom.dart.outline.expect
@@ -0,0 +1,6 @@
+library test;
+import self as self;
+
+static field dynamic v;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/bottom_in_closure.dart.outline.expect b/pkg/front_end/testcases/inference/bottom_in_closure.dart.outline.expect
new file mode 100644
index 0000000..5497bda
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bottom_in_closure.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field () →* core::Null* v;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.outline.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.outline.expect
new file mode 100644
index 0000000..97b8e80
--- /dev/null
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/circular_reference_via_closures.dart:8:5: Error: Can't infer the type of 'x': circularity found during type inference.
+// Specify the type explicitly.
+// var x = /*@ returnType=() ->* invalid-type */ () => y;
+//     ^
+//
+import self as self;
+
+static field invalid-type x;
+static field () →* invalid-type y;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.outline.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.outline.expect
new file mode 100644
index 0000000..947182a0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:8:5: Error: Can't infer the type of 'x': circularity found during type inference.
+// Specify the type explicitly.
+// var x = /*@ returnType=() ->* invalid-type */ () => y;
+//     ^
+//
+import self as self;
+
+static field invalid-type x;
+static field () →* invalid-type y;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/conditional_lub.dart.outline.expect b/pkg/front_end/testcases/inference/conditional_lub.dart.outline.expect
index caf7760..a57d812 100644
--- a/pkg/front_end/testcases/inference/conditional_lub.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/conditional_lub.dart.outline.expect
@@ -5,6 +5,6 @@
 static field core::bool* b;
 static field core::int* x;
 static field core::double* y;
-static field dynamic z;
+static field core::num* z;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.outline.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.outline.expect
new file mode 100644
index 0000000..10031dd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.outline.expect
@@ -0,0 +1,51 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
+// Try adding an explicit type.
+//   get a => null;
+//       ^
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:30:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
+// Try adding an explicit type.
+//   get a => null;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class I1 extends core::Object {
+  field core::int* x;
+  synthetic constructor •() → self::I1*
+    ;
+}
+class I2 extends self::I1 {
+  field core::int* y;
+  synthetic constructor •() → self::I2*
+    ;
+}
+class A extends core::Object {
+  final field self::I1* a;
+  synthetic constructor •() → self::A*
+    ;
+}
+class B extends core::Object {
+  final field self::I2* a;
+  synthetic constructor •() → self::B*
+    ;
+}
+class C1 extends core::Object implements self::A, self::B {
+  synthetic constructor •() → self::C1*
+    ;
+  get a() → invalid-type
+    ;
+}
+class C2 extends core::Object implements self::B, self::A {
+  synthetic constructor •() → self::C2*
+    ;
+  get a() → invalid-type
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.outline.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.outline.expect
new file mode 100644
index 0000000..f509791
--- /dev/null
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.outline.expect
@@ -0,0 +1,52 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
+// Try adding an explicit type.
+//   get a => null;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class I1 extends core::Object {
+  field core::int* x;
+  synthetic constructor •() → self::I1*
+    ;
+}
+class I2 extends core::Object {
+  field core::int* y;
+  synthetic constructor •() → self::I2*
+    ;
+}
+class I3 extends core::Object implements self::I1, self::I2 {
+  field core::int* x;
+  field core::int* y;
+  synthetic constructor •() → self::I3*
+    ;
+}
+class A extends core::Object {
+  final field self::I1* a;
+  synthetic constructor •() → self::A*
+    ;
+}
+class B extends core::Object {
+  final field self::I2* a;
+  synthetic constructor •() → self::B*
+    ;
+}
+class C1 extends core::Object implements self::A, self::B {
+  synthetic constructor •() → self::C1*
+    ;
+  get a() → self::I3*
+    ;
+}
+class C2 extends core::Object implements self::A, self::B {
+  synthetic constructor •() → self::C2*
+    ;
+  get a() → invalid-type
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.outline.expect
new file mode 100644
index 0000000..be7aa62
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    ;
+}
+class Foo<T extends self::A* = self::A*> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T*>*
+    ;
+}
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.outline.expect
new file mode 100644
index 0000000..704851c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  generic-covariant-impl field self::C::T* t;
+  constructor •(self::C::T* t) → self::C<self::C::T*>*
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.outline.expect
index a195c85..0a07ab4 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.outline.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → self::A*
     ;
 }
-class C<T extends self::A* = dynamic> extends core::Object {
+class C<T extends self::A* = self::A*> extends core::Object {
   constructor •(() →* self::C::T* f) → self::C<self::C::T*>*
     ;
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.outline.expect
new file mode 100644
index 0000000..da1258f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  final field self::C::T* t;
+  const constructor •(self::C::T* t) → self::C<self::C::T*>*
+    : self::C::t = t, super core::Object::•()
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.outline.expect
new file mode 100644
index 0000000..cbb70eb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.outline.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num* = core::num*> extends core::Object {
+  final field self::C::T* x;
+  const constructor •(self::C::T* x) → self::C<self::C::T*>*
+    : self::C::x = x, super core::Object::•()
+    ;
+}
+class D<T extends core::num* = core::num*> extends core::Object {
+  const constructor •() → self::D<self::D::T*>*
+    : super core::Object::•()
+    ;
+}
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.outline.expect
new file mode 100644
index 0000000..1936950
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(core::List<self::C::T*>* list) → self::C<self::C::T*>*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.outline.expect
new file mode 100644
index 0000000..c33e3cc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  generic-covariant-impl field self::C::T* t;
+  constructor _() → self::C<self::C::T*>*
+    ;
+  static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.outline.expect
new file mode 100644
index 0000000..9bb0a3d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  generic-covariant-impl field self::A<self::A::T*>* f;
+  constructor •() → self::A<self::A::T*>*
+    ;
+  static factory factory<T extends core::Object* = dynamic>() → self::A<self::A::factory::T*>*
+    ;
+  method m() → self::A<self::A::T*>*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.outline.expect
new file mode 100644
index 0000000..ba86a01
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  generic-covariant-impl field self::C::T* t;
+  constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.outline.expect
new file mode 100644
index 0000000..28ffdec
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  generic-covariant-impl field self::C::T* t;
+  constructor •() → self::C<self::C::T*>*
+    ;
+  static factory named<T extends core::Object* = dynamic>(self::C::named::T* t) → self::C<self::C::named::T*>*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.outline.expect
new file mode 100644
index 0000000..306987f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  generic-covariant-impl field self::C::T* t;
+  constructor •(self::C::T* t) → self::C<self::C::T*>*
+    ;
+  constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.outline.expect
new file mode 100644
index 0000000..b66d0d6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+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 self::C::T* x) → void;
+  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* = dynamic> extends core::Object implements self::C<self::CImpl::T*> {
+  generic-covariant-impl field self::CImpl::T* t;
+  constructor •(self::CImpl::T* t) → self::CImpl<self::CImpl::T*>*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.outline.expect
index ee4e32e..4d266f4 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.outline.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Cloneable<self::Cloneable::T*>*
     ;
 }
-class Pair<T extends self::Cloneable<self::Pair::T>* = dynamic, U extends self::Cloneable<self::Pair::U>* = dynamic> extends core::Object {
+class Pair<T extends self::Cloneable<self::Pair::T>* = self::Cloneable<dynamic>*, U extends self::Cloneable<self::Pair::U>* = self::Cloneable<dynamic>*> extends core::Object {
   generic-covariant-impl field self::Pair::T* t;
   generic-covariant-impl field self::Pair::U* u;
   constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.outline.expect
new file mode 100644
index 0000000..f1f5c5d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.outline.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Pair<T extends core::Object* = dynamic, U extends core::Object* = dynamic> extends core::Object {
+  generic-covariant-impl field self::Pair::T* t;
+  generic-covariant-impl field self::Pair::U* u;
+  constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
+    ;
+  get reversed() → self::Pair<self::Pair::U*, self::Pair::T*>*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.outline.expect
new file mode 100644
index 0000000..38f29cd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.outline.expect b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.outline.expect
new file mode 100644
index 0000000..908d36a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.outline.expect
@@ -0,0 +1,30 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart:13:49: Error: The return type of the method 'B.x' is 'dynamic', which does not match the return type, 'int', of the overridden method, 'A.x'.
+// Change to a subtype of 'int'.
+//   /*error:INVALID_METHOD_OVERRIDE*/ dynamic get x => 3;
+//                                                 ^
+// pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart:9:13: Context: This is the overridden method ('x').
+//   final int x = 2;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::int* x;
+  synthetic constructor •() → self::A*
+    ;
+}
+class B extends core::Object implements self::A {
+  synthetic constructor •() → self::B*
+    ;
+  get x() → dynamic
+    ;
+}
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.outline.expect b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.outline.expect
new file mode 100644
index 0000000..13d8894
--- /dev/null
+++ b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.outline.expect
@@ -0,0 +1,16 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static field dynamic x;
+  static field core::int* y;
+  field dynamic x2;
+  field core::int* y2;
+  synthetic constructor •() → self::A*
+    ;
+}
+static field dynamic x;
+static field core::int* y;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.outline.expect b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.outline.expect
new file mode 100644
index 0000000..8e85697
--- /dev/null
+++ b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.outline.expect b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.outline.expect
new file mode 100644
index 0000000..8e85697
--- /dev/null
+++ b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.outline.expect b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.outline.expect
new file mode 100644
index 0000000..5df14ed
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+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 field (self::A::T*) →* self::A::T* x;
+  constructor •((self::A::T*) →* self::A::T* x) → self::A<self::A::T*>*
+    ;
+}
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.outline.expect
index 14bb442..2aa6d59 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.outline.expect
@@ -10,12 +10,12 @@
     : super core::Object::•()
     ;
 }
-@self::Foo::•(const <dynamic>[])
+@self::Foo::•(const <core::String*>[])
 class Bar extends core::Object {
   synthetic constructor •() → self::Bar*
     ;
 }
-@self::Foo::named(const <dynamic>[])
+@self::Foo::named(const <core::String*>[])
 class Baz extends core::Object {
   synthetic constructor •() → self::Baz*
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.outline.expect
index 779bc69..5b2f604 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.outline.expect
@@ -8,12 +8,12 @@
     ;
 }
 abstract class Bar extends core::Object {
-  @self::Foo::•(const <dynamic>[])
+  @self::Foo::•(const <core::String*>[])
   field dynamic x;
-  @self::Foo::•(const <dynamic>[])
+  @self::Foo::•(const <core::String*>[])
   constructor •() → self::Bar*
     ;
-  @self::Foo::•(const <dynamic>[])
+  @self::Foo::•(const <core::String*>[])
   abstract method f() → void;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.outline.expect
new file mode 100644
index 0000000..c74ce2b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.outline.expect
new file mode 100644
index 0000000..7554b7c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static method main() → asy::Future<dynamic>*
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.outline.expect
new file mode 100644
index 0000000..3d473dc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.outline.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+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 F<T extends core::Object* = dynamic>() → self::F::T*
+  ;
+static method f() → asy::Future<dynamic>*
+  ;
+static method main() → asy::Future<dynamic>*
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.outline.expect
new file mode 100644
index 0000000..e0a7edc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.outline.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+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]) → self::Foo*
+    ;
+  constructor named([core::List<core::int*>* x]) → self::Foo*
+    ;
+}
+static field ([core::List<core::int*>*]) →* core::String* g;
+static method f([core::List<core::int*>* l]) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.outline.expect
new file mode 100644
index 0000000..6794a5c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.outline.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field self::B<core::int*>* b;
+  synthetic constructor •() → self::A*
+    ;
+}
+class B<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(self::B::T* x) → self::B<self::B::T*>*
+    ;
+}
+static field self::A* t1;
+static field core::List<self::B<core::int*>*>* t2;
+static method main() → dynamic
+  ;
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 e341531..9d0ad6f 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
@@ -6,6 +6,6 @@
   constructor •(self::A::T* x) → self::A<self::A::T*>*
     ;
 }
-static field dynamic t1;
+static field core::List<self::A<core::int*>*>* t1;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.outline.expect
new file mode 100644
index 0000000..3ec491b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.outline.expect
@@ -0,0 +1,28 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class F0 extends core::Object {
+  constructor •(core::List<core::int*>* a) → self::F0*
+    ;
+}
+class F1 extends core::Object {
+  constructor •({core::List<core::int*>* a}) → self::F1*
+    ;
+}
+class F2 extends core::Object {
+  constructor •(core::Iterable<core::int*>* a) → self::F2*
+    ;
+}
+class F3 extends core::Object {
+  constructor •(core::Iterable<core::Iterable<core::int*>*>* a) → self::F3*
+    ;
+}
+class F4 extends core::Object {
+  constructor •({core::Iterable<core::Iterable<core::int*>*>* a}) → self::F4*
+    ;
+}
+static method test() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.outline.expect
new file mode 100644
index 0000000..2037825
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method f0(core::List<core::int*>* a) → void
+  ;
+static method f1({core::List<core::int*>* a}) → void
+  ;
+static method f2(core::Iterable<core::int*>* a) → void
+  ;
+static method f3(core::Iterable<core::Iterable<core::int*>*>* a) → void
+  ;
+static method f4({core::Iterable<core::Iterable<core::int*>*>* a}) → void
+  ;
+static method test() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.outline.expect
new file mode 100644
index 0000000..3539aa7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef Function2<S extends core::Object* = dynamic, T extends core::Object* = dynamic> = (S*) →* T*;
+static method test() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.outline.expect
new file mode 100644
index 0000000..27b374a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.outline.expect
new file mode 100644
index 0000000..ba76888
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.outline.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class F3<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(core::Iterable<core::Iterable<self::F3::T*>*>* a) → self::F3<self::F3::T*>*
+    ;
+}
+class F4<T extends core::Object* = dynamic> extends core::Object {
+  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a}) → self::F4<self::F4::T*>*
+    ;
+}
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.outline.expect
new file mode 100644
index 0000000..c651d5f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.outline.expect
@@ -0,0 +1,28 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class F0<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(core::List<self::F0::T*>* a) → self::F0<self::F0::T*>*
+    ;
+}
+class F1<T extends core::Object* = dynamic> extends core::Object {
+  constructor •({core::List<self::F1::T*>* a}) → self::F1<self::F1::T*>*
+    ;
+}
+class F2<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(core::Iterable<self::F2::T*>* a) → self::F2<self::F2::T*>*
+    ;
+}
+class F3<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(core::Iterable<core::Iterable<self::F3::T*>*>* a) → self::F3<self::F3::T*>*
+    ;
+}
+class F4<T extends core::Object* = dynamic> extends core::Object {
+  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a}) → self::F4<self::F4::T*>*
+    ;
+}
+static method test() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.outline.expect
new file mode 100644
index 0000000..c74ce2b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.outline.expect
new file mode 100644
index 0000000..2bf3613
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.outline.expect
@@ -0,0 +1,44 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends core::Object {
+  generic-covariant-impl field self::A::S* x;
+  generic-covariant-impl field self::A::T* y;
+  constructor •(self::A::S* x, self::A::T* y) → self::A<self::A::S*, self::A::T*>*
+    ;
+  constructor named(self::A::S* x, self::A::T* y) → self::A<self::A::S*, self::A::T*>*
+    ;
+}
+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) → self::B<self::B::S*, self::B::T*>*
+    ;
+  constructor named(self::B::S* y, self::B::T* x) → self::B<self::B::S*, self::B::T*>*
+    ;
+}
+class C<S extends core::Object* = dynamic> extends self::B<self::C::S*, self::C::S*> {
+  constructor •(self::C::S* a) → self::C<self::C::S*>*
+    ;
+  constructor named(self::C::S* a) → self::C<self::C::S*>*
+    ;
+}
+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) → self::D<self::D::S*, self::D::T*>*
+    ;
+  constructor named(self::D::T* a) → self::D<self::D::S*, self::D::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) → self::E<self::E::S*, self::E::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, core::List<self::F::T*>* b}) → self::F<self::F::S*, self::F::T*>*
+    ;
+  constructor named(self::F::S* x, self::F::T* y, [self::F::S* a, self::F::T* b]) → self::F<self::F::S*, self::F::T*>*
+    ;
+}
+static method test() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.outline.expect
new file mode 100644
index 0000000..a92d585
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method foo([core::List<core::String*>* list1, core::List<core::String*>* list2]) → void
+  ;
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.outline.expect
new file mode 100644
index 0000000..57c5b68
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.outline.expect
@@ -0,0 +1,38 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+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 •() → self::DartType*
+    ;
+}
+abstract class C extends core::Object {
+  static field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertBOf;
+  field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf;
+  synthetic constructor •() → self::C*
+    ;
+  static get assertCOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void
+    ;
+  abstract get assertDOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void;
+  method method((core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertEOf) → dynamic
+    ;
+}
+abstract class G<T extends core::Object* = dynamic> extends core::Object {
+  field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf;
+  synthetic constructor •() → self::G<self::G::T*>*
+    ;
+  abstract get assertDOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void;
+  method method((core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertEOf) → dynamic
+    ;
+}
+static field (self::DartType*) →* void _isInt;
+static field (self::DartType*) →* void _isString;
+static field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertBOf;
+static get assertCOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void
+  ;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.outline.expect
new file mode 100644
index 0000000..2456a4af
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method foo([core::Map<core::int*, core::String*>* m1, core::Map<core::int*, core::String*>* m2]) → void
+  ;
+static method test() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.outline.expect
new file mode 100644
index 0000000..e1e83f3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.outline.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+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 foo() → asy::Stream<core::List<core::int*>*>*
+  ;
+static method bar() → core::Iterable<core::Map<core::int*, core::int*>*>*
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.outline.expect b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.outline.expect
new file mode 100644
index 0000000..0ac31d4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  final field core::int* x;
+  synthetic constructor •() → self::C*
+    ;
+  static get _x() → core::int*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.outline.expect b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.outline.expect
new file mode 100644
index 0000000..2df00b8e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  final field core::int* x;
+  synthetic constructor •() → self::C*
+    ;
+}
+static get y() → core::int*
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/future_or_subtyping.dart.outline.expect b/pkg/front_end/testcases/inference/future_or_subtyping.dart.outline.expect
new file mode 100644
index 0000000..c763edf
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_or_subtyping.dart.outline.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method add(core::int* x) → void
+  ;
+static method add2(core::int* y) → dynamic
+  ;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.outline.expect b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.outline.expect
new file mode 100644
index 0000000..c410a31
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef ToValue<T extends core::Object* = dynamic> = (T*) →* void;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.outline.expect
new file mode 100644
index 0000000..9f34989
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method f<S extends core::Object* = dynamic, T extends core::Object* = dynamic>(self::f::S* s) → self::f::T*
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.outline.expect
index 464dcd7..1a8b966 100644
--- a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.outline.expect
@@ -2,10 +2,10 @@
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends core::Pattern* = dynamic> extends core::Object {
+class Foo<T extends core::Pattern* = core::Pattern*> extends core::Object {
   synthetic constructor •() → self::Foo<self::Foo::T*>*
     ;
-  method method<generic-covariant-impl U extends self::Foo::T* = dynamic>(self::Foo::method::U* u) → self::Foo::method::U*
+  method method<generic-covariant-impl U extends self::Foo::T* = self::Foo::T*>(self::Foo::method::U* u) → self::Foo::method::U*
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.outline.expect
new file mode 100644
index 0000000..47b4040
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.outline.expect
@@ -0,0 +1,16 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "dart:math";
+
+static method printInt(core::int* x) → void
+  ;
+static method printDouble(core::double* x) → void
+  ;
+static method myMax(core::num* x, core::num* y) → core::num*
+  ;
+static method f() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.outline.expect
new file mode 100644
index 0000000..07bf679
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.outline.expect
@@ -0,0 +1,36 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:13:3: Error: Declared type variables of 'D.m' doesn't match those on overridden method 'C.m'.
+//   m(x) => x;
+//   ^
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:9:5: Context: This is the overridden method ('m').
+//   T m<T>(T x) => x;
+//     ^
+//
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:13:3: Error: The return type of the method 'D.m' is 'dynamic', which does not match the return type, 'T', of the overridden method, 'C.m'.
+// Change to a subtype of 'T'.
+//   m(x) => x;
+//   ^
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:9:5: Context: This is the overridden method ('m').
+//   T m<T>(T x) => x;
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+    ;
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    ;
+  method m(dynamic x) → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.outline.expect
new file mode 100644
index 0000000..649bb11
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object* = dynamic>(core::List<self::f::T*>* s) → self::f::T*
+  ;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.outline.expect
new file mode 100644
index 0000000..b3ae44d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+
+static method test() → void
+  ;
+static method functionExpressionInvocation() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.outline.expect
new file mode 100644
index 0000000..9bbf070
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.outline.expect
@@ -0,0 +1,55 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:14:5: Error: Declared type variables of 'D.m' doesn't match those on overridden method 'C.m'.
+//   T m<T>(T x) => x;
+//     ^
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:9:3: Context: This is the overridden method ('m').
+//   m(x) => x;
+//   ^
+//
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:14:12: Error: The parameter 'x' of the method 'D.m' has type 'T', which does not match the corresponding type, 'dynamic', in the overridden method, 'C.m'.
+// Change to a supertype of 'dynamic', or, for a covariant parameter, a subtype.
+//   T m<T>(T x) => x;
+//            ^
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:9:3: Context: This is the overridden method ('m').
+//   m(x) => x;
+//   ^
+//
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:15:5: Error: Declared type variables of 'D.g' doesn't match those on overridden method 'C.g'.
+//   T g<T>(T x) => x;
+//     ^
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:10:11: Context: This is the overridden method ('g').
+//   dynamic g(int x) => x;
+//           ^
+//
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:15:12: Error: The parameter 'x' of the method 'D.g' has type 'T', which does not match the corresponding type, 'int', in the overridden method, 'C.g'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   T g<T>(T x) => x;
+//            ^
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:10:11: Context: This is the overridden method ('g').
+//   dynamic g(int x) => x;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  method m(dynamic x) → dynamic
+    ;
+  method g(core::int* x) → dynamic
+    ;
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    ;
+  method m<T extends core::Object* = dynamic>(self::D::m::T* x) → self::D::m::T*
+    ;
+  method g<T extends core::Object* = dynamic>(self::D::g::T* x) → self::D::g::T*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.outline.expect
new file mode 100644
index 0000000..465372c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.outline.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<V extends core::Object* = dynamic> = (V*) →* void;
+class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
+  synthetic constructor •() → self::C<self::C::T*>*
+    ;
+  method f<U extends core::Object* = dynamic>(self::C::f::U* x) → (self::C::f::U*) →* void
+    ;
+}
+class D<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T*>*
+    ;
+  method f<U extends core::Object* = dynamic>(self::D::f::U* u) → (self::D::f::U*) →* void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.outline.expect
new file mode 100644
index 0000000..cd56022
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+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 •() → self::C<self::C::T*>*
+    ;
+  method f<U extends core::Object* = dynamic>(() →* core::List<self::C::f::U*>* g) → void
+    ;
+}
+abstract class D<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T*>*
+    ;
+  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.outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.outline.expect
new file mode 100644
index 0000000..0a73a00
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.outline.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<V extends core::Object* = dynamic> = () →* V*;
+class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
+  synthetic constructor •() → self::C<self::C::T*>*
+    ;
+  method f<U extends core::Object* = dynamic>(self::C::f::U* x) → () →* self::C::f::U*
+    ;
+}
+class D<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T*>*
+    ;
+  method f<U extends core::Object* = dynamic>(self::D::f::U* u) → () →* self::D::f::U*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.outline.expect
new file mode 100644
index 0000000..e19be4b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.outline.expect
@@ -0,0 +1,45 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "dart:math" as math;
+import "dart:math";
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  method m<T extends core::num* = core::num*>(self::C::m::T* x, self::C::m::T* y) → self::C::m::T*
+    ;
+}
+static method test() → dynamic
+  ;
+static method takeIII((core::int*, core::int*) →* core::int* fn) → void
+  ;
+static method takeDDD((core::double*, core::double*) →* core::double* fn) → void
+  ;
+static method takeIDI((core::double*, core::int*) →* core::int* fn) → void
+  ;
+static method takeDID((core::int*, core::double*) →* core::double* fn) → void
+  ;
+static method takeIDN((core::double*, core::int*) →* core::num* fn) → void
+  ;
+static method takeDIN((core::int*, core::double*) →* core::num* fn) → void
+  ;
+static method takeIIN((core::int*, core::int*) →* core::num* fn) → void
+  ;
+static method takeDDN((core::double*, core::double*) →* core::num* fn) → void
+  ;
+static method takeNNN((core::num*, core::num*) →* core::num* fn) → void
+  ;
+static method takeOON((core::Object*, core::Object*) →* core::num* fn) → void
+  ;
+static method takeOOO((core::Object*, core::Object*) →* core::num* fn) → void
+  ;
+static method takeOOI((core::Object*, core::Object*) →* core::int* fn) → void
+  ;
+static method takeIIO((core::int*, core::int*) →* core::Object* fn) → void
+  ;
+static method takeDDO((core::double*, core::double*) →* core::Object* fn) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.outline.expect
new file mode 100644
index 0000000..45f2f2b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+    ;
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    ;
+  method m<S extends core::Object* = dynamic>(self::D::m::S* x) → self::D::m::S*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.outline.expect
new file mode 100644
index 0000000..824697a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method f() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.outline.expect
new file mode 100644
index 0000000..abf425d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static method make(core::int* x) → asy::Future<core::int*>*
+  ;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.outline.expect
new file mode 100644
index 0000000..41b11c5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "dart:math" as math;
+
+class Trace extends core::Object {
+  field core::List<self::Frame*>* frames;
+  synthetic constructor •() → self::Trace*
+    ;
+}
+class Frame extends core::Object {
+  field core::String* location;
+  synthetic constructor •() → self::Frame*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.outline.expect
new file mode 100644
index 0000000..2afc98d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F = (core::int*) →* core::Iterable<core::num*>*;
+typedef G = (core::double*) →* core::List<core::int*>*;
+static method generic<T extends core::Object* = dynamic>((self::generic::T*) →* dynamic a, (self::generic::T*) →* dynamic b) → self::generic::T*
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.outline.expect b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.outline.expect
index 4046a6c..1374798 100644
--- a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.outline.expect
@@ -5,13 +5,13 @@
 class A extends core::Object implements self::B {
   synthetic constructor •() → self::A*
     ;
-  get x() → dynamic
+  get x() → core::int*
     ;
-  set x(dynamic value) → void
+  set x(core::int* value) → void
     ;
 }
 class B extends core::Object {
-  field dynamic x;
+  field core::int* x;
   synthetic constructor •() → self::B*
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.outline.expect
new file mode 100644
index 0000000..7971d4a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* f;
+  synthetic constructor •() → self::A*
+    ;
+}
+static field self::A* a;
+static field core::int* c;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_binary_custom.dart.outline.expect b/pkg/front_end/testcases/inference/infer_binary_custom.dart.outline.expect
new file mode 100644
index 0000000..f9000f4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_binary_custom.dart.outline.expect
@@ -0,0 +1,16 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    ;
+  operator +(dynamic other) → core::int*
+    ;
+  operator -(dynamic other) → core::double*
+    ;
+}
+static field core::int* v_add;
+static field core::double* v_minus;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.outline.expect b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.outline.expect
new file mode 100644
index 0000000..fc1ae00
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* a_equal;
+static field core::bool* a_notEqual;
+static field core::double* a_add;
+static field core::double* a_subtract;
+static field core::double* a_multiply;
+static field core::double* a_divide;
+static field core::int* a_floorDivide;
+static field core::bool* a_greater;
+static field core::bool* a_less;
+static field core::bool* a_greaterEqual;
+static field core::bool* a_lessEqual;
+static field core::double* a_modulo;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.outline.expect b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.outline.expect
new file mode 100644
index 0000000..fc1ae00
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* a_equal;
+static field core::bool* a_notEqual;
+static field core::double* a_add;
+static field core::double* a_subtract;
+static field core::double* a_multiply;
+static field core::double* a_divide;
+static field core::int* a_floorDivide;
+static field core::bool* a_greater;
+static field core::bool* a_less;
+static field core::bool* a_greaterEqual;
+static field core::bool* a_lessEqual;
+static field core::double* a_modulo;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.outline.expect b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.outline.expect
new file mode 100644
index 0000000..fc1ae00
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* a_equal;
+static field core::bool* a_notEqual;
+static field core::double* a_add;
+static field core::double* a_subtract;
+static field core::double* a_multiply;
+static field core::double* a_divide;
+static field core::int* a_floorDivide;
+static field core::bool* a_greater;
+static field core::bool* a_less;
+static field core::bool* a_greaterEqual;
+static field core::bool* a_lessEqual;
+static field core::double* a_modulo;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.outline.expect b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.outline.expect
new file mode 100644
index 0000000..cc7c479
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.outline.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* a_equal;
+static field core::bool* a_notEqual;
+static field core::int* a_bitXor;
+static field core::int* a_bitAnd;
+static field core::int* a_bitOr;
+static field core::int* a_bitShiftRight;
+static field core::int* a_bitShiftLeft;
+static field core::int* a_add;
+static field core::int* a_subtract;
+static field core::int* a_multiply;
+static field core::double* a_divide;
+static field core::int* a_floorDivide;
+static field core::bool* a_greater;
+static field core::bool* a_less;
+static field core::bool* a_greaterEqual;
+static field core::bool* a_lessEqual;
+static field core::int* a_modulo;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_conditional.dart.outline.expect b/pkg/front_end/testcases/inference/infer_conditional.dart.outline.expect
new file mode 100644
index 0000000..6ea6d78
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_conditional.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::num* a;
+static field core::num* b;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.outline.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.outline.expect
new file mode 100644
index 0000000..d58d84f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.outline.expect
@@ -0,0 +1,35 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "infer_consts_transitively_2_a.dart" as inf;
+
+import "org-dartlang-testcase:///infer_consts_transitively_2_a.dart";
+
+static const field core::int* m1 = inf::a1;
+static const field core::int* m2 = inf::a2;
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+library;
+import self as inf;
+import "dart:core" as core;
+import "infer_consts_transitively_2.dart" as self;
+import "infer_consts_transitively_2_b.dart" as inf2;
+
+import "org-dartlang-testcase:///infer_consts_transitively_2.dart";
+import "org-dartlang-testcase:///infer_consts_transitively_2_b.dart";
+
+static const field core::int* a1 = self::m2;
+static const field core::int* a2 = inf2::b1;
+static method main() → dynamic
+  ;
+
+library;
+import self as inf2;
+import "dart:core" as core;
+
+static const field core::int* b1 = 2;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.outline.expect
new file mode 100644
index 0000000..cb88599
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.outline.expect
@@ -0,0 +1,35 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "infer_consts_transitively_2.dart" as test;
+import "infer_consts_transitively_2_b.dart" as inf;
+
+import "org-dartlang-testcase:///infer_consts_transitively_2.dart";
+import "org-dartlang-testcase:///infer_consts_transitively_2_b.dart";
+
+static const field core::int* a1 = test::m2;
+static const field core::int* a2 = inf::b1;
+static method main() → dynamic
+  ;
+
+library test;
+import self as test;
+import "dart:core" as core;
+import "infer_consts_transitively_2_a.dart" as self;
+
+import "org-dartlang-testcase:///infer_consts_transitively_2_a.dart";
+
+static const field core::int* m1 = self::a1;
+static const field core::int* m2 = self::a2;
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+library;
+import self as inf;
+import "dart:core" as core;
+
+static const field core::int* b1 = 2;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.outline.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.outline.expect
new file mode 100644
index 0000000..afdd6d7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.outline.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static const field core::int* b1 = 2;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.outline.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.outline.expect
new file mode 100644
index 0000000..afdd6d7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.outline.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static const field core::int* b1 = 2;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.outline.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.outline.expect
new file mode 100644
index 0000000..dfad962
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.outline.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field dynamic x;
+  field core::int* y;
+  field core::String* z;
+  synthetic constructor •() → self::A*
+    ;
+}
+class B extends core::Object implements self::A {
+  field dynamic x;
+  field core::int* y;
+  field core::String* z;
+  field core::int* w;
+  synthetic constructor •() → self::B*
+    ;
+}
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.outline.expect
index 218f5e9..4f999da 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.outline.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field dynamic x;
+  field core::int* x;
   synthetic constructor •() → self::A*
     ;
 }
 class B extends core::Object {
-  field dynamic x;
+  field core::int* x;
   synthetic constructor •() → self::B*
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.outline.expect
index b917227..915eb44 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.outline.expect
@@ -11,7 +11,7 @@
 }
 class B extends self::A {
   final field core::int* x;
-  constructor •(dynamic x) → self::B*
+  constructor •(core::int* x) → self::B*
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.outline.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.outline.expect
index 167fce8..b79c1b0 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.outline.expect
@@ -9,7 +9,7 @@
 }
 class B extends self::A {
   final field core::int* x;
-  constructor •(dynamic x) → self::B*
+  constructor •(core::int* x) → self::B*
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.outline.expect b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.outline.expect
index afb8687..9e5258a 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.outline.expect
@@ -10,7 +10,7 @@
 }
 class B extends self::A {
   final field core::double* x;
-  constructor •(dynamic x) → self::B*
+  constructor •(core::double* x) → self::B*
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.outline.expect
new file mode 100644
index 0000000..1a5ccea
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.outline.expect
@@ -0,0 +1,41 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Getter not found: 'x'.
+// var b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
+//                                              ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Getter not found: 'x'.
+//   /*error:UNDEFINED_IDENTIFIER*/ x
+//                                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* x;
+  synthetic constructor •() → self::A*
+    ;
+  operator +(dynamic other) → self::B*
+    ;
+}
+class B extends self::A {
+  constructor •(dynamic ignore) → self::B*
+    ;
+}
+static field self::A* a;
+static field self::B* b;
+static field core::List<dynamic>* c1;
+static field core::List<dynamic>* c2;
+static field core::Map<dynamic, dynamic>* d;
+static field self::A* e;
+static field core::int* f;
+static field core::int* g;
+static field self::B* h;
+static field dynamic i;
+static field self::B* j;
+static method test1() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.outline.expect
new file mode 100644
index 0000000..c17611a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field dynamic x;
+  synthetic constructor •() → self::A*
+    ;
+}
+class B extends core::Object implements self::A {
+  field dynamic x;
+  synthetic constructor •() → self::B*
+    ;
+}
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.outline.expect
new file mode 100644
index 0000000..8b9dd44
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field dynamic x;
+  synthetic constructor •() → self::A*
+    ;
+}
+class B extends core::Object implements self::A {
+  final field dynamic x;
+  synthetic constructor •() → self::B*
+    ;
+}
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.outline.expect
new file mode 100644
index 0000000..6a7760a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.outline.expect
@@ -0,0 +1,51 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart";
+
+static field core::int* y;
+static method test1() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
+
+static field core::int* x;
+static method main() → dynamic
+  ;
+
+library test;
+import self as self3;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
+
+class B extends core::Object {
+  static field core::int* y;
+  synthetic constructor •() → self3::B*
+    ;
+}
+static method test1() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+library;
+import self as self4;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
+
+class A extends core::Object {
+  static field core::int* x;
+  synthetic constructor •() → self4::A*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.outline.expect
new file mode 100644
index 0000000..e70d202
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.outline.expect
@@ -0,0 +1,29 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
+
+class B extends core::Object {
+  static field core::int* y;
+  synthetic constructor •() → self::B*
+    ;
+}
+static method test1() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
+
+class A extends core::Object {
+  static field core::int* x;
+  synthetic constructor •() → self2::A*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.outline.expect
new file mode 100644
index 0000000..6cdbef6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.outline.expect
@@ -0,0 +1,29 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
+
+class A extends core::Object {
+  static field core::int* x;
+  synthetic constructor •() → self::A*
+    ;
+}
+static method main() → dynamic
+  ;
+
+library test;
+import self as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
+
+class B extends core::Object {
+  static field core::int* y;
+  synthetic constructor •() → self2::B*
+    ;
+}
+static method test1() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.outline.expect
new file mode 100644
index 0000000..7a1dac1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.outline.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
+
+static field core::int* x;
+static method main() → dynamic
+  ;
+
+library test;
+import self as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
+
+class B extends core::Object {
+  static field core::int* y;
+  synthetic constructor •() → self2::B*
+    ;
+}
+static method test1() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+library;
+import self as self3;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
+
+class A extends core::Object {
+  static field core::int* x;
+  synthetic constructor •() → self3::A*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.outline.expect
new file mode 100644
index 0000000..a618e67
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.outline.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_non_cycle_imports_with_flag_a.dart";
+
+static field core::int* y;
+static method test1() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+static field core::int* x;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.outline.expect
new file mode 100644
index 0000000..07b69ed
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.outline.expect
@@ -0,0 +1,27 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_non_cycle_imports_with_flag2_a.dart";
+
+class B extends core::Object {
+  static field core::int* y;
+  synthetic constructor •() → self::B*
+    ;
+}
+static method test1() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static field core::int* x;
+  synthetic constructor •() → self2::A*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.outline.expect
new file mode 100644
index 0000000..9aa0236
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.outline.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static field core::int* x;
+  synthetic constructor •() → self::A*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.outline.expect
new file mode 100644
index 0000000..59f6600
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.outline.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static field core::int* x;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.outline.expect
new file mode 100644
index 0000000..dc27164
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  method m<T extends core::Object* = dynamic>(core::int* a, {core::String* b, self::C::m::T* c}) → self::C::m::T*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.outline.expect
new file mode 100644
index 0000000..fab9845
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  method m<T extends core::Object* = dynamic>(core::int* a, [self::C::m::T* b]) → self::C::m::T*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.outline.expect
new file mode 100644
index 0000000..da0aacf
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  method m<T extends core::Object* = dynamic>(core::int* a, [core::String* b, self::C::m::T* c]) → self::C::m::T*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.outline.expect
new file mode 100644
index 0000000..2798d5a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.outline.expect b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.outline.expect
new file mode 100644
index 0000000..1421f70
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.outline.expect
@@ -0,0 +1,20 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Resource extends core::Object {
+  synthetic constructor •() → self::Resource*
+    ;
+}
+class Folder extends self::Resource {
+  synthetic constructor •() → self::Folder*
+    ;
+}
+class Foo<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(self::Foo::T* t) → self::Foo<self::Foo::T*>*
+    ;
+}
+static method getResource(core::String* str) → self::Resource*
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.outline.expect b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.outline.expect
new file mode 100644
index 0000000..8e85697
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.outline.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.outline.expect
new file mode 100644
index 0000000..f87eb4f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.outline.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends self::D {
+  synthetic constructor •() → self::C*
+    ;
+  set foo(core::int* x) → void
+    ;
+}
+class D extends core::Object {
+  field core::int* foo;
+  synthetic constructor •() → self::D*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.outline.expect
new file mode 100644
index 0000000..8d523c6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends self::D {
+  synthetic constructor •() → self::C*
+    ;
+  set foo(core::int* x) → void
+    ;
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D*
+    ;
+  set foo(core::int* x) → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.outline.expect b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.outline.expect
new file mode 100644
index 0000000..5594f99
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* a_not;
+static field core::int* a_complement;
+static field core::int* a_negate;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.outline.expect b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.outline.expect
new file mode 100644
index 0000000..264d18b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.outline.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •() → self::A*
+    ;
+  operator ~() → core::int*
+    ;
+  operator unary-() → core::double*
+    ;
+}
+static field self::A* a;
+static field core::int* v_complement;
+static field core::double* v_negate;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.outline.expect b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.outline.expect
new file mode 100644
index 0000000..628cf39
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method strings() → core::List<core::String*>*
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively.dart.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.outline.expect
new file mode 100644
index 0000000..531005e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.outline.expect
@@ -0,0 +1,36 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
+
+static final field core::int* m1;
+static final field core::int* m2;
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_statics_transitively.dart";
+import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
+
+class A extends core::Object {
+  static final field core::int* a2;
+  synthetic constructor •() → self2::A*
+    ;
+}
+static final field core::int* a1;
+static method main() → dynamic
+  ;
+
+library;
+import self as self3;
+import "dart:core" as core;
+
+static final field core::int* b1;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.outline.expect
new file mode 100644
index 0000000..376e563
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static const field core::int* x1 = 1;
+static final field core::int* x2;
+static final field core::int* y1;
+static final field core::int* y2;
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.outline.expect
new file mode 100644
index 0000000..992d62b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.outline.expect
@@ -0,0 +1,32 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "infer_statics_transitively3_a.dart" as inf;
+
+import "org-dartlang-testcase:///infer_statics_transitively3_a.dart";
+import "org-dartlang-testcase:///infer_statics_transitively3_a.dart" as p;
+
+static const field core::int* t1 = 1;
+static const field core::int* t2 = self::t1;
+static const field core::int* t3 = inf::a1;
+static const field core::int* t4 = inf::a2;
+static const field dynamic t5 = inf::A::a3;
+static const field dynamic t6 = inf::A::a3;
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+library;
+import self as inf;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static const field dynamic a3 = null;
+  synthetic constructor •() → inf::A*
+    ;
+}
+static const field core::int* a1 = 3;
+static const field core::int* a2 = 4;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.outline.expect
new file mode 100644
index 0000000..7eda95a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.outline.expect
@@ -0,0 +1,13 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static const field dynamic a3 = null;
+  synthetic constructor •() → self::A*
+    ;
+}
+static const field core::int* a1 = 3;
+static const field core::int* a2 = 4;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.outline.expect
new file mode 100644
index 0000000..b62ec89
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.outline.expect
@@ -0,0 +1,52 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_statics_transitively.dart";
+import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
+
+class A extends core::Object {
+  static final field core::int* a2;
+  synthetic constructor •() → self::A*
+    ;
+}
+static final field core::int* a1;
+static method main() → dynamic
+  ;
+
+library test;
+import self as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
+
+static final field core::int* m1;
+static final field core::int* m2;
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+library;
+import self as self3;
+import "dart:core" as core;
+
+static final field core::int* b1;
+static method main() → dynamic
+  ;
+
+library;
+import self as self4;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_statics_transitively.dart";
+import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
+
+class A extends core::Object {
+  static final field core::int* a2;
+  synthetic constructor •() → self4::A*
+    ;
+}
+static final field core::int* a1;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.outline.expect
new file mode 100644
index 0000000..54f49cbb7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.outline.expect
@@ -0,0 +1,36 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_statics_transitively.dart";
+import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
+
+class A extends core::Object {
+  static final field core::int* a2;
+  synthetic constructor •() → self::A*
+    ;
+}
+static final field core::int* a1;
+static method main() → dynamic
+  ;
+
+library test;
+import self as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
+
+static final field core::int* m1;
+static final field core::int* m2;
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+library;
+import self as self3;
+import "dart:core" as core;
+
+static final field core::int* b1;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.outline.expect
new file mode 100644
index 0000000..1634bbb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.outline.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static final field core::int* b1;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.outline.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.outline.expect
new file mode 100644
index 0000000..82eac85
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.outline.expect
@@ -0,0 +1,26 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_statics_with_method_invocations_a.dart";
+
+class T extends core::Object {
+  static final field self::T* foo;
+  synthetic constructor •() → self::T*
+    ;
+  static method m1(core::String* m) → self::T*
+    ;
+  static method m2(dynamic e) → core::String*
+    ;
+}
+static method main() → dynamic
+  ;
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+static method m3(core::String* a, core::String* b, [dynamic a1, dynamic a2]) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.outline.expect
new file mode 100644
index 0000000..92e6635
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.outline.expect
@@ -0,0 +1,8 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method m3(core::String* a, core::String* b, [dynamic a1, dynamic a2]) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_throw.dart.outline.expect b/pkg/front_end/testcases/inference/infer_throw.dart.outline.expect
new file mode 100644
index 0000000..a26c77f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_throw.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* t;
+static field dynamic a;
+static field core::int* b;
+static field core::int* c;
+static field core::int* d;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.outline.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.outline.expect
new file mode 100644
index 0000000..fdad487
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.outline.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* x;
+  synthetic constructor •() → self::A*
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    ;
+  get x() → core::int*
+    ;
+}
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.outline.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.outline.expect
new file mode 100644
index 0000000..740163e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.outline.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::int* x;
+  synthetic constructor •() → self::A*
+    ;
+}
+class B extends core::Object implements self::A {
+  synthetic constructor •() → self::B*
+    ;
+  get x() → core::int*
+    ;
+}
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.outline.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.outline.expect
new file mode 100644
index 0000000..3619892
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test1() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.outline.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.outline.expect
new file mode 100644
index 0000000..59396ab
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test2() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.outline.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.outline.expect
new file mode 100644
index 0000000..556acab
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* x;
+  field core::int* y;
+  final field core::int* z;
+  synthetic constructor •() → self::A*
+    ;
+  method test1() → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.outline.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.outline.expect
new file mode 100644
index 0000000..818f5f5e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::int* x;
+static field core::int* y;
+static final field core::int* z;
+static method test1() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.outline.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.outline.expect
new file mode 100644
index 0000000..6e632b8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.outline.expect
@@ -0,0 +1,36 @@
+library test;
+import self as self;
+import "infer_type_regardless_of_declaration_order_or_cycles_b.dart" as inf;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles_b.dart";
+
+class C extends inf::B {
+  synthetic constructor •() → self::C*
+    ;
+  get x() → core::int*
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    ;
+  get x() → core::int*
+    ;
+}
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+library;
+import self as inf;
+import "infer_type_regardless_of_declaration_order_or_cycles.dart" as self;
+
+import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles.dart";
+
+class B extends self::A {
+  synthetic constructor •() → inf::B*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.outline.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.outline.expect
new file mode 100644
index 0000000..3dc6858
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.outline.expect
@@ -0,0 +1,36 @@
+library;
+import self as self;
+import "infer_type_regardless_of_declaration_order_or_cycles.dart" as test;
+
+import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles.dart";
+
+class B extends test::A {
+  synthetic constructor •() → self::B*
+    ;
+}
+static method main() → dynamic
+  ;
+
+library test;
+import self as test;
+import "infer_type_regardless_of_declaration_order_or_cycles_b.dart" as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles_b.dart";
+
+class C extends self::B {
+  synthetic constructor •() → test::C*
+    ;
+  get x() → core::int*
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → test::A*
+    ;
+  get x() → core::int*
+    ;
+}
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.outline.expect b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.outline.expect
new file mode 100644
index 0000000..de41e4b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::Map<core::int*, core::String*>* a;
+static field core::Map<core::double*, core::int*>* b;
+static field core::Map<core::List<core::int*>*, core::Map<core::String*, core::double*>*>* c;
+static field core::Map<core::int*, dynamic>* d;
+static field core::Map<dynamic, core::int*>* e;
+static field core::Map<dynamic, dynamic>* f;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.outline.expect
new file mode 100644
index 0000000..fd0db16
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.outline.expect
@@ -0,0 +1,22 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  final field self::A::T* x;
+  final field self::A::T* w;
+  synthetic constructor •() → self::A<self::A::T*>*
+    ;
+}
+class B extends core::Object implements self::A<core::int*> {
+  synthetic constructor •() → self::B*
+    ;
+  get x() → core::int*
+    ;
+  get w() → core::int*
+    ;
+}
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.outline.expect
new file mode 100644
index 0000000..42d4b2e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.outline.expect
@@ -0,0 +1,20 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  generic-covariant-impl field self::A::T* x;
+  synthetic constructor •() → self::A<self::A::T*>*
+    ;
+}
+class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> {
+  generic-covariant-impl field self::B::E* y;
+  synthetic constructor •() → self::B<self::B::E*>*
+    ;
+  get x() → self::B::E*
+    ;
+}
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.outline.expect
new file mode 100644
index 0000000..f7f66a7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.outline.expect
@@ -0,0 +1,33 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class I<E extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::E*>*
+    ;
+  abstract method m(dynamic a, (dynamic, self::I::E*) →* core::String* f) → core::String*;
+}
+abstract class A<E extends core::Object* = dynamic> extends core::Object implements self::I<self::A::E*> {
+  const constructor •() → self::A<self::A::E*>*
+    : super core::Object::•()
+    ;
+  abstract method m(dynamic a, (dynamic, self::A::E*) →* core::String* f) → core::String*;
+}
+abstract class M extends core::Object {
+  final field core::int* y;
+  synthetic constructor •() → self::M*
+    ;
+}
+class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> implements self::M {
+  const constructor •() → self::B<self::B::E*>*
+    : super self::A::•()
+    ;
+  get y() → core::int*
+    ;
+  method m(dynamic a, (dynamic, self::B::E*) →* dynamic f) → core::String*
+    ;
+}
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.outline.expect
new file mode 100644
index 0000000..d10152ae
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.outline.expect
@@ -0,0 +1,46 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "infer_types_on_generic_instantiations_in_library_cycle_a.dart" as inf;
+
+import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle_a.dart";
+
+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 •() → self::A<self::A::E*>*
+    : super core::Object::•()
+    ;
+}
+abstract class M extends core::Object {
+  final field core::int* y;
+  synthetic constructor •() → self::M*
+    ;
+}
+class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> implements self::M {
+  const constructor •() → self::B<self::B::E*>*
+    : super self::A::•()
+    ;
+  get y() → core::int*
+    ;
+  method m(dynamic a, (dynamic, core::int*) →* dynamic f) → self::A<self::B::E*>*
+    ;
+}
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+library;
+import self as inf;
+import "dart:core" as core;
+import "infer_types_on_generic_instantiations_in_library_cycle.dart" as self;
+
+import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle.dart";
+
+abstract class I<E extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → inf::I<inf::I::E*>*
+    ;
+  abstract method m(dynamic a, (dynamic, core::int*) →* core::String* f) → self::A<inf::I::E*>*;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.outline.expect
new file mode 100644
index 0000000..4b3a052
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.outline.expect
@@ -0,0 +1,46 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "infer_types_on_generic_instantiations_in_library_cycle.dart" as test;
+
+import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle.dart";
+
+abstract class I<E extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::E*>*
+    ;
+  abstract method m(dynamic a, (dynamic, core::int*) →* core::String* f) → test::A<self::I::E*>*;
+}
+static method main() → dynamic
+  ;
+
+library test;
+import self as test;
+import "dart:core" as core;
+import "infer_types_on_generic_instantiations_in_library_cycle_a.dart" as self;
+
+import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle_a.dart";
+
+abstract class A<E extends core::Object* = dynamic> extends core::Object implements self::I<test::A::E*> {
+  final field test::A::E* value = null;
+  const constructor •() → test::A<test::A::E*>*
+    : super core::Object::•()
+    ;
+}
+abstract class M extends core::Object {
+  final field core::int* y;
+  synthetic constructor •() → test::M*
+    ;
+}
+class B<E extends core::Object* = dynamic> extends test::A<test::B::E*> implements test::M {
+  const constructor •() → test::B<test::B::E*>*
+    : super test::A::•()
+    ;
+  get y() → core::int*
+    ;
+  method m(dynamic a, (dynamic, core::int*) →* dynamic f) → test::A<test::B::E*>*
+    ;
+}
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.outline.expect
new file mode 100644
index 0000000..6186c9d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.outline.expect
@@ -0,0 +1,30 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart:13:49: Error: The return type of the method 'B.x' is 'dynamic', which does not match the return type, 'int', of the overridden method, 'A.x'.
+// Change to a subtype of 'int'.
+//   /*error:INVALID_METHOD_OVERRIDE*/ dynamic get x => 3;
+//                                                 ^
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart:9:11: Context: This is the overridden method ('x').
+//   final T x = null;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  final field self::A::T* x;
+  synthetic constructor •() → self::A<self::A::T*>*
+    ;
+}
+class B extends core::Object implements self::A<core::int*> {
+  synthetic constructor •() → self::B*
+    ;
+  get x() → dynamic
+    ;
+}
+static method foo() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.outline.expect
new file mode 100644
index 0000000..2ecbacc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.outline.expect
@@ -0,0 +1,25 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  field core::int* bar;
+  synthetic constructor •() → self::Foo*
+    ;
+}
+class Bar<T extends core::Iterable<core::String*>* = core::Iterable<core::String*>*> extends core::Object {
+  synthetic constructor •() → self::Bar<self::Bar::T*>*
+    ;
+  method foo(generic-covariant-impl self::Bar::T* t) → void
+    ;
+}
+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 •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
+    ;
+  method foo(generic-covariant-impl self::Baz::S* t) → void
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
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 15b2a4d..43bc546 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
@@ -10,13 +10,13 @@
   synthetic constructor •() → self::Foo*
     ;
 }
-class Bar<T extends asy::Stream<core::String*>* = dynamic> extends core::Object {
+class Bar<T extends asy::Stream<core::String*>* = asy::Stream<core::String*>*> extends core::Object {
   synthetic constructor •() → self::Bar<self::Bar::T*>*
     ;
   method foo(generic-covariant-impl self::Bar::T* t) → dynamic
     ;
 }
-class Baz<T extends core::Object* = dynamic, E extends asy::Stream<self::Baz::T*>* = dynamic, S extends self::Baz::E* = dynamic> 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 •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
     ;
   method foo(generic-covariant-impl self::Baz::S* t) → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.outline.expect
new file mode 100644
index 0000000..8e85697
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_variable_void.dart.outline.expect b/pkg/front_end/testcases/inference/infer_variable_void.dart.outline.expect
new file mode 100644
index 0000000..3c20c2d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_variable_void.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+
+static field void x;
+static method f() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.outline.expect
new file mode 100644
index 0000000..e484bfb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  field core::int* x;
+  constructor •([core::int* x]) → self::Foo*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.outline.expect
new file mode 100644
index 0000000..10e00b4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static field core::String* x;
+  field core::Map<core::String*, core::Map<core::String*, core::String*>*>* y;
+  synthetic constructor •() → self::C*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.outline.expect
new file mode 100644
index 0000000..546284f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::String* y;
+  synthetic constructor •() → self::C*
+    ;
+}
+static field core::String* x;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.outline.expect
new file mode 100644
index 0000000..558a097
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* a;
+  field core::List<core::int*>* b;
+  synthetic constructor •() → self::A*
+    ;
+  method m() → void
+    ;
+}
+static field self::A* v;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.outline.expect
new file mode 100644
index 0000000..023351f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.outline.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  operator *(self::C* other) → core::bool*
+    ;
+}
+static field self::C* c;
+static field core::bool* x;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.outline.expect
new file mode 100644
index 0000000..e63cff7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class I extends core::Object {
+  synthetic constructor •() → self::I*
+    ;
+  operator *(self::C* other) → core::bool*
+    ;
+}
+abstract class C extends core::Object implements self::I {
+  synthetic constructor •() → self::C*
+    ;
+}
+static field self::C* c;
+static field core::bool* x;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.outline.expect
new file mode 100644
index 0000000..0bc720e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  operator [](core::int* index) → core::bool*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.outline.expect
new file mode 100644
index 0000000..071abaa
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class I extends core::Object {
+  synthetic constructor •() → self::I*
+    ;
+  operator [](core::int* index) → core::bool*
+    ;
+}
+abstract class C extends core::Object implements self::I {
+  synthetic constructor •() → self::C*
+    ;
+}
+static method f() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.outline.expect
new file mode 100644
index 0000000..4c4ec52
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.outline.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  operator unary-() → core::bool*
+    ;
+}
+static field self::C* c;
+static field core::bool* x;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.outline.expect
new file mode 100644
index 0000000..01d1040
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class I extends core::Object {
+  synthetic constructor •() → self::I*
+    ;
+  operator unary-() → core::bool*
+    ;
+}
+abstract class C extends core::Object implements self::I {
+  synthetic constructor •() → self::C*
+    ;
+}
+static field self::C* c;
+static field core::bool* x;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.outline.expect
new file mode 100644
index 0000000..7f7e2d3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  method g() → core::bool*
+    ;
+}
+static field () →* core::bool* x;
+static method f() → self::C*
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.outline.expect
new file mode 100644
index 0000000..dd6d6c5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.outline.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class I extends core::Object {
+  synthetic constructor •() → self::I*
+    ;
+  method g() → core::bool*
+    ;
+}
+abstract class C extends core::Object implements self::I {
+  synthetic constructor •() → self::C*
+    ;
+}
+static field () →* core::bool* x;
+static method f() → self::C*
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.outline.expect
new file mode 100644
index 0000000..093165a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field (core::Object*) →* void v;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.outline.expect
new file mode 100644
index 0000000..64a0c83
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  method g() → core::bool*
+    ;
+}
+static field core::bool* x;
+static method f() → self::C*
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.outline.expect
new file mode 100644
index 0000000..1dc5beb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.outline.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class I extends core::Object {
+  synthetic constructor •() → self::I*
+    ;
+  method g() → core::bool*
+    ;
+}
+abstract class C extends core::Object implements self::I {
+  synthetic constructor •() → self::C*
+    ;
+}
+static field core::bool* x;
+static method f() → self::C*
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.outline.expect
new file mode 100644
index 0000000..f34fca1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::Object {
+  final field core::int* index;
+  final field core::String* _name;
+  static const field core::List<self::E*>* values = const <self::E*>[self::E::v1];
+  static const field self::E* v1 = const self::E::•(0, "E.v1");
+  const constructor •(core::int* index, core::String* _name) → self::E*
+    : self::E::index = index, self::E::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String*
+    return this.{=self::E::_name};
+}
+static final field self::E* x;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.outline.expect
new file mode 100644
index 0000000..c337f19
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::Object {
+  final field core::int* index;
+  final field core::String* _name;
+  static const field core::List<self::E*>* values = const <self::E*>[self::E::v1];
+  static const field self::E* v1 = const self::E::•(0, "E.v1");
+  const constructor •(core::int* index, core::String* _name) → self::E*
+    : self::E::index = index, self::E::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String*
+    return this.{=self::E::_name};
+}
+static final field core::List<self::E*>* x;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.outline.expect
new file mode 100644
index 0000000..8c72258
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F = () →* void;
+static final field core::Map<core::String*, () →* void>* x;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.outline.expect
new file mode 100644
index 0000000..41a8e7b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<T extends core::Object* = dynamic> = () →* T*;
+static final field core::Map<core::String*, () →* core::int*>* x;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.outline.expect
new file mode 100644
index 0000000..022fc54
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<() →* core::Object*>* v;
+static method f() → core::int*
+  ;
+static method g() → core::String*
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.outline.expect
new file mode 100644
index 0000000..19ea551
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<((core::String*) →* core::int*) →* core::Object*>* v;
+static method f((core::String*) →* core::int* x) → core::int*
+  ;
+static method g((core::String*) →* core::int* x) → core::String*
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.outline.expect
new file mode 100644
index 0000000..13063fa5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<({x: core::int*}) →* core::Object*>* v;
+static method f({core::int* x}) → core::int*
+  ;
+static method g({core::int* x}) → core::String*
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.outline.expect
new file mode 100644
index 0000000..bd37456
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<([core::int*]) →* core::Object*>* v;
+static method f([core::int* x]) → core::int*
+  ;
+static method g([core::int* x]) → core::String*
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.outline.expect
new file mode 100644
index 0000000..4de588f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<(core::int*) →* core::Object*>* v;
+static method f(core::int* x) → core::int*
+  ;
+static method g(core::int* x) → core::String*
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.outline.expect
new file mode 100644
index 0000000..4673ba3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static final field (core::bool*) →* (core::int*) →* core::Map<core::int*, core::bool*>* f;
+  synthetic constructor •() → self::C*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.outline.expect
new file mode 100644
index 0000000..a4ec082
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static final field (core::bool*) →* core::bool* f;
+  synthetic constructor •() → self::C*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.outline.expect
new file mode 100644
index 0000000..40aeb8e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static final field (core::bool*) →* core::int* f;
+  synthetic constructor •() → self::C*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.outline.expect
new file mode 100644
index 0000000..d303dfc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static final field (core::bool*) →* core::int* f;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.outline.expect b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.outline.expect
index 3a1211f..d0bd559 100644
--- a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class I1 extends core::Object {
-  final field dynamic x;
+  final field core::int* x;
   synthetic constructor •() → self::I1*
     ;
 }
@@ -18,6 +18,6 @@
   get x() → core::int*
     ;
 }
-static field dynamic y;
+static field core::int* y;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.outline.expect
new file mode 100644
index 0000000..6aa475b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B<T extends self::A<core::int*>* = self::A<core::int*>*> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    ;
+}
+class A<T extends core::int* = core::int*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    ;
+}
+static field self::B<self::A<core::int*>*>* v;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.outline.expect
new file mode 100644
index 0000000..90698fa
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::int* = core::int*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    ;
+}
+class B<T extends self::A<core::int*>* = self::A<core::int*>*> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    ;
+}
+static field self::B<self::A<core::int*>*>* v;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.outline.expect
new file mode 100644
index 0000000..0a2734e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    ;
+}
+class B<T extends self::A<dynamic>* = self::A<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    ;
+}
+static field self::B<self::A<dynamic>*>* v;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.outline.expect
new file mode 100644
index 0000000..34b5179
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::int* = core::int*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    ;
+}
+static field self::A<core::int*>* v;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.outline.expect
new file mode 100644
index 0000000..34b5179
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::int* = core::int*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    ;
+}
+static field self::A<core::int*>* v;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.outline.expect
new file mode 100644
index 0000000..fc54b7b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.outline.expect
new file mode 100644
index 0000000..2d88b5d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num* = core::num*> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    ;
+}
+static field self::C<core::int*>* x;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.outline.expect
new file mode 100644
index 0000000..8f0c87e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    ;
+}
+class B<T extends self::A* = self::A*> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    ;
+}
+static field self::B<self::A*>* v;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.outline.expect b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.outline.expect
new file mode 100644
index 0000000..a021f96
--- /dev/null
+++ b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method getListOfString() → core::List<core::String*>*
+  ;
+static method foo() → void
+  ;
+static method bar() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/list_literal_typed.dart.outline.expect b/pkg/front_end/testcases/inference/list_literal_typed.dart.outline.expect
index ecd13b6..683fac8 100644
--- a/pkg/front_end/testcases/inference/list_literal_typed.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/list_literal_typed.dart.outline.expect
@@ -1,9 +1,10 @@
 library test;
 import self as self;
+import "dart:core" as core;
 
-static field dynamic a;
-static field dynamic b;
-static field dynamic c;
-static field dynamic d;
+static field core::List<core::int*>* a;
+static field core::List<core::double*>* b;
+static field core::List<core::List<core::int*>*>* c;
+static field core::List<dynamic>* d;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.outline.expect b/pkg/front_end/testcases/inference/list_literals.dart.outline.expect
new file mode 100644
index 0000000..893540e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/list_literals.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+
+static method test1() → dynamic
+  ;
+static method test2() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.outline.expect b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.outline.expect
new file mode 100644
index 0000000..3619892
--- /dev/null
+++ b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test1() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.outline.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.outline.expect
new file mode 100644
index 0000000..24cab9d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<core::int*>* x1;
+static field core::List<core::num*>* x2;
+static method test1() → dynamic
+  ;
+static method test2() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.outline.expect b/pkg/front_end/testcases/inference/map_literals.dart.outline.expect
new file mode 100644
index 0000000..893540e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/map_literals.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+
+static method test1() → dynamic
+  ;
+static method test2() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.outline.expect b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.outline.expect
new file mode 100644
index 0000000..3619892
--- /dev/null
+++ b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test1() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.outline.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.outline.expect
new file mode 100644
index 0000000..f63db32
--- /dev/null
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::Map<core::int*, core::String*>* x1;
+static field core::Map<core::num*, core::Pattern*>* x2;
+static method test1() → dynamic
+  ;
+static method test2() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.outline.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.outline.expect
new file mode 100644
index 0000000..9bfb5d5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.outline.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
+    ;
+}
+class D<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T*>*
+    ;
+}
+static field self::D<core::int*>* f;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.outline.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.outline.expect
new file mode 100644
index 0000000..26e19b2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
+    ;
+}
+class D<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T*>*
+    ;
+}
+static field self::C* c;
+static field self::D<core::int*>* f;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.outline.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.outline.expect
new file mode 100644
index 0000000..ee571a5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.outline.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  static method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
+    ;
+}
+class D<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T*>*
+    ;
+}
+static field self::D<core::int*>* f;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.outline.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.outline.expect
new file mode 100644
index 0000000..5edbaf7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class D<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T*>*
+    ;
+}
+static field self::D<core::int*>* g;
+static method f<T extends core::Object* = dynamic>() → self::D<self::f::T*>*
+  ;
+static method main() → dynamic
+  ;
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 a7ce02f..07c3f61 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
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::I<self::I::X*>*
     ;
 }
-class M0<X extends core::Object* = dynamic, Y extends core::String* = dynamic> 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 •() → self::M0<self::M0::X*, self::M0::Y*>*
     ;
 }
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 6af70be..f952fac 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
@@ -1,4 +1,16 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:7: Error: Type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<Y>' of the type variable 'Y' on 'M0' in the supertype 'M0' of class 'M1 with M0'.
+//  - 'Comparable' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// class A extends M1 with M0 {}
+//       ^
+// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:7:13: Context: This is the type variable whose bound isn't conformed to.
+// class M0<X, Y extends Comparable<Y>> extends I<X> {}
+//             ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -6,7 +18,7 @@
   synthetic constructor •() → self::I<self::I::X*>*
     ;
 }
-class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y>* = dynamic> 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 •() → self::M0<self::M0::X*, self::M0::Y*>*
     ;
 }
diff --git a/pkg/front_end/testcases/inference/no_error_when_declared_type_is_num_and_assigned_null.dart.outline.expect b/pkg/front_end/testcases/inference/no_error_when_declared_type_is_num_and_assigned_null.dart.outline.expect
new file mode 100644
index 0000000..3619892
--- /dev/null
+++ b/pkg/front_end/testcases/inference/no_error_when_declared_type_is_num_and_assigned_null.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test1() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.outline.expect b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.outline.expect b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.outline.expect b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.outline.expect
new file mode 100644
index 0000000..672fbfb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field dynamic h;
+static method foo((core::Object*) →* core::int* f) → void
+  ;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.outline.expect b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.outline.expect
index 583e980..3c44d0cc 100644
--- a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.outline.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class A<X extends core::Object* = dynamic> extends core::Object {
-  final field dynamic foo;
+  final field core::String* foo;
   synthetic constructor •() → self::A<self::A::X*>*
     ;
 }
 class B<Y extends core::Object* = dynamic> extends self::A<self::B::Y*> {
-  final field dynamic foo;
-  constructor •(dynamic foo) → self::B<self::B::Y*>*
+  final field core::String* foo;
+  constructor •(core::String* foo) → self::B<self::B::Y*>*
     ;
 }
 static method main() → dynamic
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 2efb122..6bd3591 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* = dynamic>(self::f::T* a) → void
+static method f<T extends self::B* = self::B*>(self::f::T* a) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.outline.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.outline.expect
new file mode 100644
index 0000000..24a81b6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* x;
+  synthetic constructor •() → self::A*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.outline.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.outline.expect
new file mode 100644
index 0000000..24a81b6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* x;
+  synthetic constructor •() → self::A*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.outline.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.outline.expect
new file mode 100644
index 0000000..630505e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* x;
+  synthetic constructor •() → self::A*
+    ;
+}
+static method test5() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.outline.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.outline.expect
new file mode 100644
index 0000000..b31847d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.outline.expect
@@ -0,0 +1,26 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* x;
+  synthetic constructor •() → self::A*
+    ;
+}
+class B extends core::Object {
+  field self::A* a;
+  synthetic constructor •() → self::B*
+    ;
+}
+class C extends core::Object {
+  field self::B* b;
+  synthetic constructor •() → self::C*
+    ;
+}
+class D extends core::Object {
+  field self::C* c;
+  synthetic constructor •() → self::D*
+    ;
+}
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/inference/property_get_toplevel.dart.outline.expect b/pkg/front_end/testcases/inference/property_get_toplevel.dart.outline.expect
index 1ec74b1..b1da205 100644
--- a/pkg/front_end/testcases/inference/property_get_toplevel.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/property_get_toplevel.dart.outline.expect
@@ -12,7 +12,7 @@
     ;
 }
 static field self::C* c;
-static field dynamic function_ref;
-static field dynamic function_ref_list;
+static field () →* core::int* function_ref;
+static field core::List<() →* core::int*>* function_ref_list;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/reference_to_typedef.dart.outline.expect b/pkg/front_end/testcases/inference/reference_to_typedef.dart.outline.expect
new file mode 100644
index 0000000..a1ba81e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/reference_to_typedef.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F = () →* void;
+static final field core::Type* x;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.outline.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.outline.expect
new file mode 100644
index 0000000..4b7a850
--- /dev/null
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num* = core::num*> extends core::Object {
+  generic-covariant-impl field self::C::T* a;
+  synthetic constructor •() → self::C<self::C::T*>*
+    ;
+  method op(core::double* b) → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.outline.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.outline.expect
new file mode 100644
index 0000000..c8572b5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num* = core::num*> extends core::Object {
+  generic-covariant-impl field self::C::T* a;
+  synthetic constructor •() → self::C<self::C::T*>*
+    ;
+  method op(core::int* b) → void
+    ;
+  method opEq(core::int* b) → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.outline.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.outline.expect
new file mode 100644
index 0000000..5050ee5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num* = core::num*> extends core::Object {
+  generic-covariant-impl field self::C::T* a;
+  synthetic constructor •() → self::C<self::C::T*>*
+    ;
+  method op(generic-covariant-impl self::C::T* b) → void
+    ;
+  method opEq(generic-covariant-impl self::C::T* b) → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/simple_literal_bool.dart.outline.expect b/pkg/front_end/testcases/inference/simple_literal_bool.dart.outline.expect
index 7e1ab76..7cc78f5 100644
--- a/pkg/front_end/testcases/inference/simple_literal_bool.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_bool.dart.outline.expect
@@ -1,6 +1,7 @@
 library test;
 import self as self;
+import "dart:core" as core;
 
-static field dynamic a;
+static field core::bool* a;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/simple_literal_double.dart.outline.expect b/pkg/front_end/testcases/inference/simple_literal_double.dart.outline.expect
index 7e1ab76..ce3f6d5 100644
--- a/pkg/front_end/testcases/inference/simple_literal_double.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_double.dart.outline.expect
@@ -1,6 +1,7 @@
 library test;
 import self as self;
+import "dart:core" as core;
 
-static field dynamic a;
+static field core::double* a;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/simple_literal_int.dart.outline.expect b/pkg/front_end/testcases/inference/simple_literal_int.dart.outline.expect
index 7e1ab76..0596698 100644
--- a/pkg/front_end/testcases/inference/simple_literal_int.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_int.dart.outline.expect
@@ -1,6 +1,7 @@
 library test;
 import self as self;
+import "dart:core" as core;
 
-static field dynamic a;
+static field core::int* a;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/static_method_tear_off.dart.outline.expect b/pkg/front_end/testcases/inference/static_method_tear_off.dart.outline.expect
new file mode 100644
index 0000000..74e9791
--- /dev/null
+++ b/pkg/front_end/testcases/inference/static_method_tear_off.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  static method f(core::String* s) → core::int*
+    ;
+}
+static const field (core::String*) →* core::int* v = self::C::f;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/string_literal.dart.outline.expect b/pkg/front_end/testcases/inference/string_literal.dart.outline.expect
index b10c845..506fd95 100644
--- a/pkg/front_end/testcases/inference/string_literal.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/string_literal.dart.outline.expect
@@ -1,9 +1,10 @@
 library test;
 import self as self;
+import "dart:core" as core;
 
-static field dynamic x;
-static field dynamic a;
-static field dynamic b;
-static field dynamic c;
+static field core::int* x;
+static field core::String* a;
+static field core::String* b;
+static field core::String* c;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/super_property_get.dart.outline.expect b/pkg/front_end/testcases/inference/super_property_get.dart.outline.expect
index b8b9db0..2148ea4 100644
--- a/pkg/front_end/testcases/inference/super_property_get.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  field dynamic x;
+  field core::int* x;
   synthetic constructor •() → self::C*
     ;
 }
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.outline.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.outline.expect
index 4752269..50d69f8 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  field dynamic f;
+  field () →* core::int* f;
   synthetic constructor •() → self::C*
     ;
 }
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.outline.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.outline.expect
index ec6089a..93be11a 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.outline.expect
@@ -9,7 +9,7 @@
     ;
 }
 class C extends core::Object {
-  field dynamic f;
+  field self::CallableClass* f;
   synthetic constructor •() → self::C*
     ;
 }
diff --git a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.outline.expect b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.outline.expect
index 3b44c95..e393ff8 100644
--- a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.outline.expect
@@ -1,6 +1,7 @@
 library test;
 import self as self;
+import "dart:core" as core;
 
-static field dynamic i;
+static field core::int* i;
 static method main() → dynamic
   ;
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 0cf1b92..32f2f1d 100644
--- a/pkg/front_end/testcases/inference/type_cast.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/type_cast.dart.outline.expect
@@ -13,6 +13,6 @@
     ;
 }
 static field self::A<core::num*>* a;
-static field dynamic b;
+static field self::B<core::int*>* b;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.outline.expect
new file mode 100644
index 0000000..bd31fbd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+    ;
+}
+static field self::C<dynamic>* v;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.outline.expect
new file mode 100644
index 0000000..19474ef
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+    ;
+}
+static field self::C<core::int*>* v;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.outline.expect
new file mode 100644
index 0000000..be2806f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.outline.expect
new file mode 100644
index 0000000..db56dbb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  constructor •(() →* dynamic x) → self::C*
+    ;
+}
+static field self::C* v;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.outline.expect
new file mode 100644
index 0000000..10eb51f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<dynamic>* v;
+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/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.outline.expect
new file mode 100644
index 0000000..10eb51f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<dynamic>* v;
+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/unsafe_block_closure_inference_function_call_explicit_type_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.outline.expect
new file mode 100644
index 0000000..f0dd2fa
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<core::int*>* v;
+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/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.outline.expect
new file mode 100644
index 0000000..f0dd2fa
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<core::int*>* v;
+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/unsafe_block_closure_inference_function_call_implicit_type_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.outline.expect
new file mode 100644
index 0000000..c7133df
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic
+  ;
+static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.outline.expect
new file mode 100644
index 0000000..c7133df
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic
+  ;
+static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.outline.expect
new file mode 100644
index 0000000..8c0f7c6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic
+  ;
+static method f(dynamic x) → core::double*
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.outline.expect
new file mode 100644
index 0000000..8c0f7c6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic
+  ;
+static method f(dynamic x) → core::double*
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.outline.expect
new file mode 100644
index 0000000..87c776d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F = () →* core::int*;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.outline.expect
new file mode 100644
index 0000000..87c776d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F = () →* core::int*;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.outline.expect
new file mode 100644
index 0000000..a207fbd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.outline.expect
new file mode 100644
index 0000000..a207fbd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.outline.expect
new file mode 100644
index 0000000..a207fbd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.outline.expect
new file mode 100644
index 0000000..2579e0a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  method f(dynamic x) → core::double*
+    ;
+}
+static field core::double* v;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.outline.expect b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.outline.expect
new file mode 100644
index 0000000..24086b1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field dynamic x;
+static method run<T extends core::Object* = dynamic>(() →* self::run::T* f) → self::run::T*
+  ;
+static method printRunning() → void
+  ;
+static method main() → dynamic
+  ;
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 a833221..7ba11cd 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
@@ -1,4 +1,12 @@
 library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:18:5: Error: Can't infer the type of 'b': circularity found during type inference.
+// Specify the type explicitly.
+// var b = /*@ returnType=() ->* invalid-type */ () =>
+//     ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -10,10 +18,10 @@
   method g(dynamic i) → core::int*
     ;
 }
-static field dynamic a;
-static field dynamic b;
-static field dynamic c;
-static field dynamic d;
-static field dynamic e;
+static field self::A* a;
+static field invalid-type b;
+static field () →* invalid-type c;
+static field () →* () →* core::int* d;
+static field () →* core::int* e;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.outline.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.outline.expect
index 078aa97..c44763e 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.outline.expect
@@ -1,15 +1,23 @@
 library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:15:5: Error: Can't infer the type of 'a': circularity found during type inference.
+// Specify the type explicitly.
+// var a = /*@ returnType=num* */ () => intValue /*@target=num::+*/ + b;
+//     ^
+//
 import self as self;
 import "dart:core" as core;
 
 static field core::int* intValue;
 static field core::num* numValue;
 static field core::double* doubleValue;
-static field dynamic a;
+static field invalid-type a;
 static field dynamic b;
-static field dynamic c;
-static field dynamic d;
-static field dynamic e;
-static field dynamic f;
+static field () →* core::num* c;
+static field core::num* d;
+static field () →* core::double* e;
+static field core::double* f;
 static method main() → dynamic
   ;
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 7322015..f42e8b5 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
@@ -11,6 +11,6 @@
   constructor •(self::B::T* x) → self::B<self::B::T*>*
     ;
 }
-static field dynamic t3;
+static field core::List<self::B<core::int*>*>* t3;
 static method main() → dynamic
   ;
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 7ce484e..382933c 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
@@ -6,6 +6,6 @@
   constructor •(self::A::T* x) → self::A<self::A::T*>*
     ;
 }
-static field dynamic t2;
+static field core::List<self::A<core::int*>*>* t2;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.outline.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.outline.expect
index 93bd955..c95d0de 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.outline.expect
@@ -1,16 +1,24 @@
 library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/field_inference_circularity.dart:12:7: Error: Can't infer the type of 'x': circularity found during type inference.
+// Specify the type explicitly.
+//   var x = /*@returnType=invalid-type*/ () => new B(). /*@target=B::x*/ x;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field dynamic x;
-  field dynamic y;
+  field invalid-type x;
+  field () →* invalid-type y;
   synthetic constructor •() → self::A*
     ;
 }
 class B extends self::A {
-  field dynamic x;
-  field dynamic y;
+  field invalid-type x;
+  field () →* invalid-type y;
   synthetic constructor •() → self::B*
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.outline.expect
index 4f84fb6..b3128a3 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.outline.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 static field core::List<core::double*>* a;
-static field dynamic b;
+static field core::double* b;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.outline.expect
index 30d498e..e5e9410 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.outline.expect
@@ -7,13 +7,13 @@
   synthetic constructor •() → self::A*
     ;
 }
-static field dynamic v_assign;
-static field dynamic v_plus;
-static field dynamic v_minus;
-static field dynamic v_multiply;
-static field dynamic v_prefix_pp;
-static field dynamic v_prefix_mm;
-static field dynamic v_postfix_pp;
-static field dynamic v_postfix_mm;
+static field core::int* v_assign;
+static field core::int* v_plus;
+static field core::int* v_minus;
+static field core::int* v_multiply;
+static field core::int* v_prefix_pp;
+static field core::int* v_prefix_mm;
+static field core::int* v_postfix_pp;
+static field core::int* v_postfix_mm;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.outline.expect
index abd1782..f0cfbcc 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.outline.expect
@@ -15,9 +15,9 @@
   synthetic constructor •() → self::B*
     ;
 }
-static field dynamic v_prefix_pp;
-static field dynamic v_prefix_mm;
-static field dynamic v_postfix_pp;
-static field dynamic v_postfix_mm;
+static field core::int* v_prefix_pp;
+static field core::double* v_prefix_mm;
+static field self::A* v_postfix_pp;
+static field self::A* v_postfix_mm;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.outline.expect
index 1e6470c..454ab6d 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.outline.expect
@@ -8,8 +8,8 @@
     ;
 }
 static field self::A* a;
-static field dynamic b;
-static field dynamic c;
-static field dynamic d;
+static field core::int* b;
+static field core::int* c;
+static field core::int* d;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.outline.expect
index fe43c76..a468053 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.outline.expect
@@ -23,8 +23,8 @@
   synthetic constructor •() → self::D*
     ;
 }
-static field dynamic a;
-static field dynamic x;
-static field dynamic y;
+static field self::A* a;
+static field self::C* x;
+static field self::C* y;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.outline.expect
index f51db36..8c060c2 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.outline.expect
@@ -20,8 +20,8 @@
   synthetic constructor •() → self::D*
     ;
 }
-static field dynamic a;
-static field dynamic x;
-static field dynamic y;
+static field self::A* a;
+static field self::C* x;
+static field self::C* y;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.outline.expect
index aae5d7d..fee3471 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.outline.expect
@@ -1,15 +1,23 @@
 library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:11:7: Error: Can't infer the type of 'b': circularity found during type inference.
+// Specify the type explicitly.
+//   var b = /*@ returnType=() ->* invalid-type */ () => x;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field dynamic b;
-  field dynamic c;
+  field invalid-type b;
+  field () →* () →* invalid-type c;
   synthetic constructor •() → self::A*
     ;
 }
-static field dynamic a;
-static field dynamic x;
-static field dynamic y;
+static field self::A* a;
+static field () →* invalid-type x;
+static field () →* () →* () →* invalid-type y;
 static method main() → 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 2f9d5ce..13732dc 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
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-static field dynamic x;
-static field dynamic y;
+static field core::bool* x;
+static field core::bool* y;
 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_use_of_void.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.outline.expect
index 093da51..2013872 100644
--- a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.outline.expect
@@ -14,6 +14,6 @@
   method f() → void
     ;
 }
-static field dynamic x;
+static field void x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.outline.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.outline.expect
index 2c1f8c3..51cd968 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.outline.expect
@@ -4,6 +4,6 @@
 
 static field core::int* i;
 static field core::String* s;
-static field dynamic x;
+static field core::String* x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.outline.expect b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.outline.expect
index cbf3089..efecb76 100644
--- a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.outline.expect
@@ -1,6 +1,7 @@
 library test;
 import self as self;
+import "dart:core" as core;
 
-static field dynamic x;
+static field core::List<core::Null*>* x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.outline.expect b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.outline.expect
index cbf3089..0f28e73 100644
--- a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.outline.expect
@@ -1,6 +1,7 @@
 library test;
 import self as self;
+import "dart:core" as core;
 
-static field dynamic x;
+static field core::Map<core::Null*, core::Null*>* x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.outline.expect b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.outline.expect
index c49eaef..ea79db2 100644
--- a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.outline.expect
@@ -12,11 +12,11 @@
     ;
 }
 static field self::C* c;
-static field dynamic field_ref;
-static field dynamic getter_ref;
-static field dynamic function_ref;
-static field dynamic field_ref_list;
-static field dynamic getter_ref_list;
-static field dynamic function_ref_list;
+static field core::int* field_ref;
+static field core::int* getter_ref;
+static field () →* core::int* function_ref;
+static field core::List<core::int*>* field_ref_list;
+static field core::List<core::int*>* getter_ref_list;
+static field core::List<() →* core::int*>* function_ref_list;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.outline.expect b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.outline.expect
index 34725d5..e14b203 100644
--- a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.outline.expect
@@ -1,10 +1,18 @@
 library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/strongly_connected_component.dart:17:5: Error: Can't infer the type of 'x': circularity found during type inference.
+// Specify the type explicitly.
+// var x = /*@ returnType=() ->* invalid-type */ () => f() ? y : z;
+//     ^
+//
 import self as self;
 import "dart:core" as core;
 
-static field dynamic x;
-static field dynamic y;
-static field dynamic z;
+static field invalid-type x;
+static field () →* invalid-type y;
+static field () →* invalid-type z;
 static method f() → core::bool*
   ;
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect
index 3e04860..d517114 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect
@@ -40,7 +40,7 @@
   method foo() → self::C*
     ;
 }
-static field dynamic x;
+static field self::B* x;
 static method bar() → self::G*
   ;
 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.outline.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.outline.expect
index 81dff1f..f0dd2fa 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
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static field dynamic v;
+static field core::List<core::int*>* v;
 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.outline.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.outline.expect
index 81dff1f..f0dd2fa 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
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static field dynamic v;
+static field core::List<core::int*>* v;
 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/void_return_type_subtypes_dynamic.dart.outline.expect b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.outline.expect
index abbb66b..46dad28 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
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static field dynamic y;
+static field void y;
 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/instantiate_to_bound/all_steps.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.outline.expect
index 773a50f..b3d2329 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
@@ -10,7 +10,7 @@
   synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
     ;
 }
-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 {
+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 •() → self::D<self::D::X*, self::D::Y*, self::D::Z*, self::D::W*>*
     ;
 }
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 1c9866f..ddec6fc 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* = dynamic> extends core::Object {
+class A<T extends core::num* = core::num*> extends core::Object {
   synthetic constructor •() → self::A<self::A::T*>*
     ;
 }
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 1c9866f..ddec6fc 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* = dynamic> extends core::Object {
+class A<T extends core::num* = core::num*> extends core::Object {
   synthetic constructor •() → self::A<self::A::T*>*
     ;
 }
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 a44d4e1..b719a1c 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>* = dynamic> extends core::Object {
+class A<T extends self::A<self::A::T>* = self::A<dynamic>*> extends core::Object {
   synthetic constructor •() → self::A<self::A::T*>*
     ;
 }
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 44ba958..3d491c7 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* = dynamic> = (T*) →* dynamic;
+typedef A<T extends core::num* = core::num*> = (T*) →* dynamic;
 class B extends core::Object {
   synthetic constructor •() → self::B*
     ;
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 44ba958..3d491c7 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* = dynamic> = (T*) →* dynamic;
+typedef A<T extends core::num* = core::num*> = (T*) →* dynamic;
 class B extends core::Object {
   synthetic constructor •() → self::B*
     ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.outline.expect
new file mode 100644
index 0000000..9038ebd
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.outline.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef B<U extends (U) →* dynamic = (dynamic) →* dynamic> = (U*) →* dynamic;
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  method foo() → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
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 5a9d18f..941b9b6 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,10 +2,10 @@
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num* = dynamic, Y extends (self::C::X*) →* void = dynamic> 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 •() → self::C<self::C::X*, self::C::Y*>*
     ;
 }
-static field self::C<dynamic, dynamic>* c;
+static field self::C<core::num*, (core::Null*) →* void>* c;
 static method main() → dynamic
   ;
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 38c128d..28f1f4b 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,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num* = dynamic, Y extends (self::C::X*) →* void = dynamic> 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 •() → self::C<self::C::X*, self::C::Y*>*
     ;
 }
-static field dynamic lc;
-static field dynamic mc;
+static field core::List<self::C<core::num*, (core::Null*) →* void>*>* lc;
+static field core::Map<self::C<core::num*, (core::Null*) →* void>*, self::C<core::num*, (core::Null*) →* void>*>* mc;
 static method main() → dynamic
   ;
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 42b3335..543c453 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,15 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-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 {
+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 •() → self::D<self::D::X*, self::D::Y*>*
     ;
 }
-class E<X extends (self::E::X) →* void = dynamic> extends core::Object {
+class E<X extends (self::E::X) →* void = (core::Null*) →* void> extends core::Object {
   synthetic constructor •() → self::E<self::E::X*>*
     ;
 }
-static field self::D<dynamic, dynamic>* d;
-static field self::E<dynamic>* e;
+static field self::D<(core::Null*, core::Null*) →* void, (core::Null*, core::Null*) →* void>* d;
+static field self::E<(core::Null*) →* void>* e;
 static method main() → dynamic
   ;
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 b75263b..bcf89d2 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,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-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 {
+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 •() → self::D<self::D::X*, self::D::Y*>*
     ;
 }
-class E<X extends (self::E::X) →* void = dynamic> extends core::Object {
+class E<X extends (self::E::X) →* void = (core::Null*) →* void> extends core::Object {
   synthetic constructor •() → self::E<self::E::X*>*
     ;
 }
-static field dynamic ld;
-static field dynamic md;
-static field dynamic le;
-static field dynamic me;
+static field core::List<self::D<(core::Null*, core::Null*) →* void, (core::Null*, core::Null*) →* void>*>* ld;
+static field core::Map<self::D<(core::Null*, core::Null*) →* void, (core::Null*, core::Null*) →* void>*, self::D<(core::Null*, core::Null*) →* void, (core::Null*, core::Null*) →* void>*>* md;
+static field core::List<self::E<(core::Null*) →* void>*>* le;
+static field core::Map<self::E<(core::Null*) →* void>*, self::E<(core::Null*) →* void>*>* me;
 static method main() → dynamic
   ;
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 06bc06a..e6c39b1 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
@@ -6,25 +6,25 @@
   synthetic constructor •() → self::A<self::A::X*>*
     ;
 }
-class C<X extends core::Object* = dynamic, Y extends self::A<self::C::X*>* = dynamic> 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 •() → self::C<self::C::X*, self::C::Y*>*
     ;
 }
-class D<X extends core::num* = dynamic, Y extends self::A<self::D::X*>* = dynamic> 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 •() → self::D<self::D::X*, self::D::Y*>*
     ;
 }
-class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = dynamic> extends core::Object {
+class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
   synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
     ;
 }
-class F<X extends core::num* = dynamic, Y extends () →* self::F::X* = dynamic> extends core::Object {
+class F<X extends core::num* = core::num*, Y extends () →* self::F::X* = () →* core::num*> extends core::Object {
   synthetic constructor •() → self::F<self::F::X*, self::F::Y*>*
     ;
 }
-static field self::C<dynamic, dynamic>* c;
-static field self::D<dynamic, dynamic>* d;
-static field self::E<dynamic, dynamic>* e;
-static field self::F<dynamic, dynamic>* f;
+static field self::C<dynamic, self::A<dynamic>*>* c;
+static field self::D<core::num*, self::A<core::num*>*>* d;
+static field self::E<dynamic, () →* dynamic>* e;
+static field self::F<core::num*, () →* core::num*>* f;
 static method main() → dynamic
   ;
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 32d8cdb..3bf392c8 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
@@ -6,29 +6,29 @@
   synthetic constructor •() → self::A<self::A::X*>*
     ;
 }
-class C<X extends core::Object* = dynamic, Y extends self::A<self::C::X*>* = dynamic> 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 •() → self::C<self::C::X*, self::C::Y*>*
     ;
 }
-class D<X extends core::num* = dynamic, Y extends self::A<self::D::X*>* = dynamic> 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 •() → self::D<self::D::X*, self::D::Y*>*
     ;
 }
-class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = dynamic> extends core::Object {
+class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
   synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
     ;
 }
-class F<X extends core::num* = dynamic, Y extends () →* self::F::X* = dynamic> extends core::Object {
+class F<X extends core::num* = core::num*, Y extends () →* self::F::X* = () →* core::num*> extends core::Object {
   synthetic constructor •() → self::F<self::F::X*, self::F::Y*>*
     ;
 }
-static field dynamic lc;
-static field dynamic mc;
-static field dynamic ld;
-static field dynamic md;
-static field dynamic le;
-static field dynamic me;
-static field dynamic lf;
-static field dynamic mf;
+static field core::List<self::C<dynamic, self::A<dynamic>*>*>* lc;
+static field core::Map<self::C<dynamic, self::A<dynamic>*>*, self::C<dynamic, self::A<dynamic>*>*>* mc;
+static field core::List<self::D<core::num*, self::A<core::num*>*>*>* ld;
+static field core::Map<self::D<core::num*, self::A<core::num*>*>*, self::D<core::num*, self::A<core::num*>*>*>* md;
+static field core::List<self::E<dynamic, () →* dynamic>*>* le;
+static field core::Map<self::E<dynamic, () →* dynamic>*, self::E<dynamic, () →* dynamic>*>* me;
+static field core::List<self::F<core::num*, () →* core::num*>*>* lf;
+static field core::Map<self::F<core::num*, () →* core::num*>*, self::F<core::num*, () →* core::num*>*>* mf;
 static method main() → dynamic
   ;
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 2c04aba..ab32947 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
@@ -10,20 +10,20 @@
   synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
     ;
 }
-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 {
+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 •() → self::D<self::D::X*, self::D::Y*>*
     ;
 }
-class E<X extends self::B<self::E::X, self::E::Y>* = dynamic, Y extends () →* self::E::X* = dynamic> 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 •() → self::E<self::E::X*, self::E::Y*>*
     ;
 }
-class F<X extends () →* self::F::X = dynamic> extends core::Object {
+class F<X extends () →* self::F::X = () →* dynamic> extends core::Object {
   synthetic constructor •() → self::F<self::F::X*>*
     ;
 }
-static field self::D<dynamic, dynamic>* d;
-static field self::E<dynamic, dynamic>* e;
-static field self::F<dynamic>* f;
+static field self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>* d;
+static field self::E<self::B<dynamic, dynamic>*, () →* dynamic>* e;
+static field self::F<() →* dynamic>* f;
 static method main() → dynamic
   ;
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 6cfd9f5..e9f5ac1 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
@@ -10,23 +10,23 @@
   synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
     ;
 }
-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 {
+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 •() → self::D<self::D::X*, self::D::Y*>*
     ;
 }
-class E<X extends self::B<self::E::X, self::E::Y>* = dynamic, Y extends () →* self::E::X* = dynamic> 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 •() → self::E<self::E::X*, self::E::Y*>*
     ;
 }
-class F<X extends () →* self::F::X = dynamic> extends core::Object {
+class F<X extends () →* self::F::X = () →* dynamic> extends core::Object {
   synthetic constructor •() → self::F<self::F::X*>*
     ;
 }
-static field dynamic ld;
-static field dynamic md;
-static field dynamic le;
-static field dynamic me;
-static field dynamic lf;
-static field dynamic mf;
+static field core::List<self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>* ld;
+static field core::Map<self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>* md;
+static field core::List<self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>* le;
+static field core::Map<self::E<self::B<dynamic, dynamic>*, () →* dynamic>*, self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>* me;
+static field core::List<self::F<() →* dynamic>*>* lf;
+static field core::Map<self::F<() →* dynamic>*, self::F<() →* dynamic>*>* mf;
 static method main() → dynamic
   ;
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 1a94d9d..e767b17 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
@@ -6,15 +6,15 @@
   synthetic constructor •() → self::A<self::A::X*>*
     ;
 }
-class C<X extends core::Object* = dynamic, Y extends (self::C::X*) →* self::C::X* = dynamic> 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 •() → self::C<self::C::X*, self::C::Y*>*
     ;
 }
-class D<X extends core::num* = dynamic, Y extends (self::D::X*) →* self::D::X* = dynamic> 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 •() → self::D<self::D::X*, self::D::Y*>*
     ;
 }
-static field self::C<dynamic, dynamic>* c;
-static field self::D<dynamic, dynamic>* d;
+static field self::C<dynamic, (core::Null*) →* dynamic>* c;
+static field self::D<core::num*, (core::Null*) →* core::num*>* d;
 static method main() → dynamic
   ;
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 e27f41f..04e5fdf 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
@@ -6,17 +6,17 @@
   synthetic constructor •() → self::A<self::A::X*>*
     ;
 }
-class C<X extends core::Object* = dynamic, Y extends (self::C::X*) →* self::C::X* = dynamic> 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 •() → self::C<self::C::X*, self::C::Y*>*
     ;
 }
-class D<X extends core::num* = dynamic, Y extends (self::D::X*) →* self::D::X* = dynamic> 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 •() → self::D<self::D::X*, self::D::Y*>*
     ;
 }
-static field dynamic lc;
-static field dynamic mc;
-static field dynamic ld;
-static field dynamic md;
+static field core::List<self::C<dynamic, (core::Null*) →* dynamic>*>* lc;
+static field core::Map<self::C<dynamic, (core::Null*) →* dynamic>*, self::C<dynamic, (core::Null*) →* dynamic>*>* mc;
+static field core::List<self::D<core::num*, (core::Null*) →* core::num*>*>* ld;
+static field core::Map<self::D<core::num*, (core::Null*) →* core::num*>*, self::D<core::num*, (core::Null*) →* core::num*>*>* md;
 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 a014cc8..053b62f 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
@@ -4,6 +4,6 @@
 
 import "dart:collection";
 
-static field col::LinkedListEntry<dynamic>* y;
+static field col::LinkedListEntry<col::LinkedListEntry<dynamic>*>* y;
 static method main() → dynamic
   ;
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 b01dcf6..86fbb12 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* = dynamic> extends core::Object {
+class A<T extends core::num* = core::num*> extends core::Object {
   synthetic constructor •() → self::A<self::A::T*>*
     ;
 }
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 b01dcf6..86fbb12 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* = dynamic> extends core::Object {
+class A<T extends core::num* = core::num*> extends core::Object {
   synthetic constructor •() → self::A<self::A::T*>*
     ;
 }
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 8db9fc1..1a8907a 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
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::T*>*
     ;
 }
-class B<T extends core::num* = dynamic, S extends core::List<self::B::T*>* = dynamic> 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]) → self::B<self::B::T*, self::B::S*>*
     ;
 }
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 dafb049..4b449c4 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,10 +2,10 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Comparable<self::B::T>* = dynamic> extends core::Object {
+class B<T extends core::Comparable<self::B::T>* = core::Comparable<dynamic>*> extends core::Object {
   synthetic constructor •() → self::B<self::B::T*>*
     ;
 }
-static field dynamic y;
+static field self::B<core::Comparable<dynamic>*>* y;
 static method main() → dynamic
   ;
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 4db0df2..7bd7cea 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,16 +2,16 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num* = dynamic> extends core::Object {
+class A<T extends core::num* = core::num*> extends core::Object {
   synthetic constructor •() → self::A<self::A::T*>*
     ;
 }
 class B extends core::Object {
   synthetic constructor •() → self::B*
     ;
-  method foo(self::A<dynamic>* a) → dynamic
+  method foo(self::A<core::num*>* a) → dynamic
     ;
-  method bar() → self::A<dynamic>*
+  method bar() → self::A<core::num*>*
     ;
 }
 static method main() → dynamic
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 c7fd878..048cb6e 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,10 +2,10 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num* = dynamic> extends core::Object {
+class A<T extends core::num* = core::num*> extends core::Object {
   synthetic constructor •() → self::A<self::A::T*>*
     ;
 }
-static field dynamic a;
+static field core::List<self::A<core::num*>*>* a;
 static method main() → dynamic
   ;
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 c7fd878..1fef771 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,10 +2,10 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num* = dynamic> extends core::Object {
+class A<T extends core::num* = core::num*> extends core::Object {
   synthetic constructor •() → self::A<self::A::T*>*
     ;
 }
-static field dynamic a;
+static field core::Map<self::A<core::num*>*, self::A<core::num*>*>* a;
 static method main() → dynamic
   ;
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 81409aa..556a2ee 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
@@ -37,40 +37,40 @@
   synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
     ;
 }
-class D<X extends self::A<self::D::X>* = dynamic, Y extends self::A<self::D::Y>* = dynamic> 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 •() → self::D<self::D::X*, self::D::Y*>*
     ;
 }
-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 {
+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 •() → self::E<self::E::W*, self::E::X*, self::E::Y*, self::E::Z*>*
     ;
 }
-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 {
+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 •() → self::F<self::F::V*, self::F::W*, self::F::X*, self::F::Y*, self::F::Z*>*
     ;
 }
-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 {
+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 •() → self::G<self::G::V*, self::G::W*, self::G::X*, self::G::Y*, self::G::Z*>*
     ;
 }
-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 {
+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 •() → self::H<self::H::S*, self::H::T*, self::H::U*, self::H::V*, self::H::W*, self::H::X*, self::H::Y*, self::H::Z*>*
     ;
 }
-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 {
+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 •() → self::I<self::I::T, self::I::U, self::I::V*, self::I::W*, self::I::X*, self::I::Y, self::I::Z>*
     ;
 }
-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 {
+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 •() → self::J<self::J::S*, self::J::T*, self::J::U*, self::J::V, self::J::W, self::J::X*, self::J::Y, self::J::Z*>*
     ;
 }
-static field self::D<dynamic, dynamic>* d;
-static field self::E<dynamic, dynamic, dynamic, dynamic>* e;
-static field self::F<dynamic, dynamic, dynamic, dynamic, dynamic>* f;
-static field self::G<dynamic, dynamic, dynamic, dynamic, dynamic>* g;
-static field self::H<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>* h;
-static field self::I<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>* i;
-static field self::J<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>* j;
+static field self::D<self::A<dynamic>*, self::A<dynamic>*>* d;
+static field self::E<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>* e;
+static field self::F<core::num*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, self::C<self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, dynamic>*>* f;
+static field self::G<core::num*, self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*, self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, self::C<self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, dynamic>*>* g;
+static field self::H<self::A<dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::A<dynamic>*, self::A<dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::A<dynamic>*>* h;
+static field self::I<dynamic, dynamic, (core::Null*) →* dynamic, (core::Null*) →* dynamic, (core::Null*) →* dynamic, dynamic, dynamic>* i;
+static field self::J<(core::Null*) →* dynamic, (core::Null*) →* dynamic, (core::Null*) →* dynamic, dynamic, dynamic, (core::Null*) →* dynamic, dynamic, dynamic>* j;
 static method main() → dynamic
   ;
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 8c2fc53..78b6d1c 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
@@ -6,50 +6,50 @@
   synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
     ;
 }
-class C1<X extends (self::C1::Y) →* self::C1::X = dynamic, Y extends (self::C1::Y) →* self::C1::X* = dynamic> 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 •() → self::C1<self::C1::X*, self::C1::Y*>*
     ;
 }
-class C2<X extends (self::C2::Y) →* self::C2::X = dynamic, Y extends (self::C2::X*) →* self::C2::Y = dynamic> 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 •() → self::C2<self::C2::X*, self::C2::Y*>*
     ;
 }
-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 {
+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 •() → self::C3<self::C3::X*, self::C3::Y*>*
     ;
 }
-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 {
+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 •() → self::C4<self::C4::X*, self::C4::Y*>*
     ;
 }
-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 {
+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 •() → self::D1<self::D1::X*, self::D1::Y*>*
     ;
 }
-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 {
+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 •() → self::D2<self::D2::X*, self::D2::Y*>*
     ;
 }
-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 {
+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 •() → self::D3<self::D3::X*, self::D3::Y*>*
     ;
 }
-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 {
+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 •() → self::D4<self::D4::X*, self::D4::Y*>*
     ;
 }
-class E<X extends (self::E::X) →* self::E::X = dynamic> extends core::Object {
+class E<X extends (self::E::X) →* self::E::X = (core::Null*) →* dynamic> extends core::Object {
   synthetic constructor •() → self::E<self::E::X*>*
     ;
 }
-static field self::C1<dynamic, dynamic>* c1;
-static field self::C2<dynamic, dynamic>* c2;
-static field self::C3<dynamic, dynamic>* c3;
-static field self::C4<dynamic, dynamic>* c4;
-static field self::D1<dynamic, dynamic>* d1;
-static field self::D2<dynamic, dynamic>* d2;
-static field self::D3<dynamic, dynamic>* d3;
-static field self::D4<dynamic, dynamic>* d4;
-static field self::E<dynamic>* e;
+static field self::C1<(core::Null*) →* dynamic, (core::Null*) →* dynamic>* c1;
+static field self::C2<(core::Null*) →* dynamic, (core::Null*) →* dynamic>* c2;
+static field self::C3<(core::Null*, core::Null*) →* dynamic, (core::Null*, core::Null*) →* dynamic>* c3;
+static field self::C4<(core::Null*, core::Null*) →* dynamic, (core::Null*, core::Null*) →* dynamic>* c4;
+static field self::D1<self::B<dynamic, dynamic>*, (core::Null*) →* dynamic>* d1;
+static field self::D2<self::B<dynamic, dynamic>*, (core::Null*) →* dynamic>* d2;
+static field self::D3<self::B<dynamic, dynamic>*, (core::Null*, core::Null*) →* dynamic>* d3;
+static field self::D4<self::B<dynamic, dynamic>*, (core::Null*, core::Null*) →* dynamic>* d4;
+static field self::E<(core::Null*) →* dynamic>* e;
 static method main() → dynamic
   ;
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 b742990..0db7d67 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
@@ -6,59 +6,59 @@
   synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
     ;
 }
-class C1<X extends (self::C1::Y) →* self::C1::X = dynamic, Y extends (self::C1::Y) →* self::C1::X* = dynamic> 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 •() → self::C1<self::C1::X*, self::C1::Y*>*
     ;
 }
-class C2<X extends (self::C2::Y) →* self::C2::X = dynamic, Y extends (self::C2::X*) →* self::C2::Y = dynamic> 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 •() → self::C2<self::C2::X*, self::C2::Y*>*
     ;
 }
-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 {
+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 •() → self::C3<self::C3::X*, self::C3::Y*>*
     ;
 }
-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 {
+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 •() → self::C4<self::C4::X*, self::C4::Y*>*
     ;
 }
-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 {
+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 •() → self::D1<self::D1::X*, self::D1::Y*>*
     ;
 }
-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 {
+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 •() → self::D2<self::D2::X*, self::D2::Y*>*
     ;
 }
-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 {
+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 •() → self::D3<self::D3::X*, self::D3::Y*>*
     ;
 }
-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 {
+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 •() → self::D4<self::D4::X*, self::D4::Y*>*
     ;
 }
-class E<X extends (self::E::X) →* self::E::X = dynamic> extends core::Object {
+class E<X extends (self::E::X) →* self::E::X = (core::Null*) →* dynamic> extends core::Object {
   synthetic constructor •() → self::E<self::E::X*>*
     ;
 }
-static field dynamic lc1;
-static field dynamic mc1;
-static field dynamic lc2;
-static field dynamic mc2;
-static field dynamic lc3;
-static field dynamic mc3;
-static field dynamic lc4;
-static field dynamic mc4;
-static field dynamic ld1;
-static field dynamic md1;
-static field dynamic ld2;
-static field dynamic md2;
-static field dynamic ld3;
-static field dynamic md3;
-static field dynamic ld4;
-static field dynamic md4;
-static field dynamic le;
-static field dynamic me;
+static field core::List<self::C1<(core::Null*) →* dynamic, (core::Null*) →* dynamic>*>* lc1;
+static field core::Map<self::C1<(core::Null*) →* dynamic, (core::Null*) →* dynamic>*, self::C1<(core::Null*) →* dynamic, (core::Null*) →* dynamic>*>* mc1;
+static field core::List<self::C2<(core::Null*) →* dynamic, (core::Null*) →* dynamic>*>* lc2;
+static field core::Map<self::C2<(core::Null*) →* dynamic, (core::Null*) →* dynamic>*, self::C2<(core::Null*) →* dynamic, (core::Null*) →* dynamic>*>* mc2;
+static field core::List<self::C3<(core::Null*, core::Null*) →* dynamic, (core::Null*, core::Null*) →* dynamic>*>* lc3;
+static field core::Map<self::C3<(core::Null*, core::Null*) →* dynamic, (core::Null*, core::Null*) →* dynamic>*, self::C3<(core::Null*, core::Null*) →* dynamic, (core::Null*, core::Null*) →* dynamic>*>* mc3;
+static field core::List<self::C4<(core::Null*, core::Null*) →* dynamic, (core::Null*, core::Null*) →* dynamic>*>* lc4;
+static field core::Map<self::C4<(core::Null*, core::Null*) →* dynamic, (core::Null*, core::Null*) →* dynamic>*, self::C4<(core::Null*, core::Null*) →* dynamic, (core::Null*, core::Null*) →* dynamic>*>* mc4;
+static field core::List<self::D1<self::B<dynamic, dynamic>*, (core::Null*) →* dynamic>*>* ld1;
+static field core::Map<self::D1<self::B<dynamic, dynamic>*, (core::Null*) →* dynamic>*, self::D1<self::B<dynamic, dynamic>*, (core::Null*) →* dynamic>*>* md1;
+static field core::List<self::D2<self::B<dynamic, dynamic>*, (core::Null*) →* dynamic>*>* ld2;
+static field core::Map<self::D2<self::B<dynamic, dynamic>*, (core::Null*) →* dynamic>*, self::D2<self::B<dynamic, dynamic>*, (core::Null*) →* dynamic>*>* md2;
+static field core::List<self::D3<self::B<dynamic, dynamic>*, (core::Null*, core::Null*) →* dynamic>*>* ld3;
+static field core::Map<self::D3<self::B<dynamic, dynamic>*, (core::Null*, core::Null*) →* dynamic>*, self::D3<self::B<dynamic, dynamic>*, (core::Null*, core::Null*) →* dynamic>*>* md3;
+static field core::List<self::D4<self::B<dynamic, dynamic>*, (core::Null*, core::Null*) →* dynamic>*>* ld4;
+static field core::Map<self::D4<self::B<dynamic, dynamic>*, (core::Null*, core::Null*) →* dynamic>*, self::D4<self::B<dynamic, dynamic>*, (core::Null*, core::Null*) →* dynamic>*>* md4;
+static field core::List<self::E<(core::Null*) →* dynamic>*>* le;
+static field core::Map<self::E<(core::Null*) →* dynamic>*, self::E<(core::Null*) →* dynamic>*>* me;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.outline.expect
index 5f6a80b..18774f6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.outline.expect
@@ -1,4 +1,15 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart:12:9: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+// class B<TypeU extends A> {}
+//         ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart:10:16: Context: Bound of this variable references variable 'TypeT' from the same declaration.
+// class A<TypeT, TypeS extends TypeT> {}
+//                ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -10,10 +21,10 @@
   synthetic constructor •() → self::B<self::B::TypeU*>*
     ;
 }
-class C<TypeV extends self::B<dynamic>* = dynamic> extends core::Object {
+class C<TypeV extends self::B<dynamic>* = self::B<dynamic>*> extends core::Object {
   synthetic constructor •() → self::C<self::C::TypeV*>*
     ;
 }
-static field self::C<dynamic>* c;
+static field self::C<self::B<dynamic>*>* c;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.outline.expect
index 81293ce..c2e470a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.outline.expect
@@ -1,4 +1,15 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart:11:9: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+// class B<TypeU extends A> {}
+//         ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart:9:16: Context: Bound of this variable references variable 'TypeT' from the same declaration.
+// class A<TypeT, TypeS extends TypeT> {}
+//                ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.outline.expect
index 6729f04..33a14b2 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.outline.expect
@@ -1,9 +1,23 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+// typedef Fisk = void Function<TypeY extends Hest>();
+//         ^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:30: Context: Bound of this variable references raw type 'Hest'.
+// typedef Fisk = void Function<TypeY extends Hest>();
+//                              ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:9:12: Context: Bound of this variable references raw type 'Fisk'.
+// class Hest<TypeX extends Fisk> {}
+//            ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
-typedef Fisk = <TypeY extends self::Hest<dynamic>* = dynamic>() →* void;
-class Hest<TypeX extends <TypeY extends self::Hest<dynamic>* = dynamic>() →* void = dynamic> extends core::Object {
+typedef Fisk = <TypeY extends core::Object* = dynamic>() →* void;
+class Hest<TypeX extends <TypeY extends core::Object* = dynamic>() →* void = <TypeY extends core::Object* = dynamic>() →* void> extends core::Object {
   synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.outline.expect
index a6fe87c..1283fc5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.outline.expect
@@ -1,9 +1,23 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart:10:14: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+// typedef void Fisk<TypeY extends Hest>();
+//              ^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart:10:19: Context: Bound of this variable references raw type 'Hest'.
+// typedef void Fisk<TypeY extends Hest>();
+//                   ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart:8:12: Context: Bound of this variable references raw type 'Fisk'.
+// class Hest<TypeX extends Fisk> {}
+//            ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
-typedef Fisk<TypeY extends self::Hest<dynamic>* = dynamic> = () →* void;
-class Hest<TypeX extends () →* void = dynamic> extends core::Object {
+typedef Fisk<TypeY extends core::Object* = dynamic> = () →* void;
+class Hest<TypeX extends () →* void = () →* void> extends core::Object {
   synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.outline.expect
index b15092d..a14595a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.outline.expect
@@ -1,8 +1,16 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart:8:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+// Try providing type arguments to 'Hest' here.
+// class Hest<TypeX extends Hest> {}
+//            ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<dynamic>* = dynamic> extends core::Object {
+class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.outline.expect
index 2c55b6f..667c623 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.outline.expect
@@ -1,8 +1,21 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart:8:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+// Try providing type arguments to 'Hest' here.
+// class Hest<TypeX extends Hest, TypeY extends Hest> {}
+//            ^^^^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart:8:32: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+// Try providing type arguments to 'Hest' here.
+// class Hest<TypeX extends Hest, TypeY extends Hest> {}
+//                                ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<dynamic, dynamic>* = dynamic, TypeY extends self::Hest<dynamic, dynamic>* = dynamic> extends core::Object {
+class Hest<TypeX extends core::Object* = dynamic, TypeY extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::Hest<self::Hest::TypeX*, self::Hest::TypeY*>*
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.outline.expect
index ce84ab3..84aeb37 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.outline.expect
@@ -1,8 +1,16 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart:9:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+// Try providing type arguments to 'Hest' here.
+// class Hest<TypeX extends Map<Hest, Hest>> {}
+//            ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends core::Map<self::Hest<dynamic>*, self::Hest<dynamic>*>* = dynamic> extends core::Object {
+class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.outline.expect
index 39ff531..e90977d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.outline.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
     ;
 }
-class Fisk<TypeY extends self::Hest<self::Hest<core::Object*>*>* = dynamic> extends core::Object {
+class Fisk<TypeY extends self::Hest<self::Hest<core::Object*>*>* = self::Hest<self::Hest<core::Object*>*>*> extends core::Object {
   synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.outline.expect
index 35c5f78..09fd8ad 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.outline.expect
@@ -1,12 +1,31 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Hest, TypeZ extends Hest> {}
+//            ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:9:12: Context: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+//            ^^^^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:11:32: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Hest, TypeZ extends Hest> {}
+//                                ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:9:12: Context: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+//            ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = dynamic> extends core::Object {
+class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = self::Hest<dynamic>*> extends core::Object {
   synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
     ;
 }
-class Fisk<TypeY extends self::Hest<dynamic>* = dynamic, TypeZ extends self::Hest<dynamic>* = dynamic> extends core::Object {
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic, TypeZ extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
   synthetic constructor •() → self::Fisk<self::Fisk::TypeY*, self::Fisk::TypeZ*>*
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.outline.expect
index 286a5ac..261be38 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.outline.expect
@@ -1,11 +1,19 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart:15:12: Error: Generic type 'LinkedListEntry' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'LinkedListEntry' here.
+// class Hest<X extends LinkedListEntry> {}
+//            ^
+//
 import self as self;
 import "dart:collection" as col;
 import "dart:core" as core;
 
 import "dart:collection";
 
-class Hest<X extends col::LinkedListEntry<dynamic>* = dynamic> extends core::Object {
+class Hest<X extends col::LinkedListEntry<col::LinkedListEntry<dynamic>*>* = dynamic> extends core::Object {
   synthetic constructor •() → self::Hest<self::Hest::X*>*
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.outline.expect
index 760a2bd..b4a29e8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.outline.expect
@@ -1,8 +1,15 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart:11:12: Error: Type variables can't have generic function types in their bounds.
+// class Fisk<TypeY extends Function<TypeZ extends Hest<Null>>(TypeZ)> {}
+//            ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = dynamic> extends core::Object {
+class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = self::Hest<dynamic>*> extends core::Object {
   synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.outline.expect
index 175cfb3..cda7cca 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.outline.expect
@@ -1,16 +1,35 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:12:15: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Naebdyr<TypeZ extends Map<Hest, Fisk>> {}
+//               ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:8:12: Context: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+//            ^^^^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:12:15: Error: Generic type 'Fisk' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Fisk' here.
+// class Naebdyr<TypeZ extends Map<Hest, Fisk>> {}
+//               ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:10:12: Context: Bound of this variable references variable 'TypeY' from the same declaration.
+// class Fisk<TypeY extends Fisk<TypeY>> {}
+//            ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = dynamic> extends core::Object {
+class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = self::Hest<dynamic>*> extends core::Object {
   synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
     ;
 }
-class Fisk<TypeY extends self::Fisk<self::Fisk::TypeY>* = dynamic> extends core::Object {
+class Fisk<TypeY extends self::Fisk<self::Fisk::TypeY>* = self::Fisk<dynamic>*> extends core::Object {
   synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
     ;
 }
-class Naebdyr<TypeZ extends core::Map<self::Hest<dynamic>*, self::Fisk<dynamic>*>* = dynamic> extends core::Object {
+class Naebdyr<TypeZ extends core::Map<self::Hest<self::Hest<dynamic>*>*, self::Fisk<self::Fisk<dynamic>*>*>* = dynamic> extends core::Object {
   synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ*>*
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.outline.expect
index ed0fbab..fb1db93 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.outline.expect
@@ -1,11 +1,24 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart:11:7: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+// class Hest<TypeX extends lib.Hest> {}
+//       ^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart:11:12: Context: Bound of this variable references raw type 'Hest'.
+// class Hest<TypeX extends lib.Hest> {}
+//            ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle_lib.dart:16:12: Context: Bound of this variable references raw type 'Hest'.
+// class Hest<TypeY extends lib.Hest> {}
+//            ^^^^^
+//
 import self as self;
-import "non_simple_many_libs_same_name_cycle_lib.dart" as non;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle_lib.dart" as lib;
 
-class Hest<TypeX extends non::Hest<dynamic>* = dynamic> extends core::Object {
+class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
     ;
 }
@@ -13,13 +26,13 @@
   ;
 
 library non_simple_many_libs_same_name_cycle_lib;
-import self as non;
+import self as self2;
 import "non_simple_many_libs_same_name_cycle.dart" as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle.dart" as lib;
 
-class Hest<TypeY extends self::Hest<dynamic>* = dynamic> extends core::Object {
-  synthetic constructor •() → non::Hest<non::Hest::TypeY*>*
+class Hest<TypeY extends self::Hest<dynamic>* = self::Hest<dynamic>*> extends core::Object {
+  synthetic constructor •() → self2::Hest<self2::Hest::TypeY*>*
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.outline.expect
index a81c103..2337453 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.outline.expect
@@ -1,12 +1,23 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Map<Hest, Hest>> {}
+//            ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart:9:12: Context: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+//            ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = dynamic> extends core::Object {
+class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = self::Hest<dynamic>*> extends core::Object {
   synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
     ;
 }
-class Fisk<TypeY extends core::Map<self::Hest<dynamic>*, self::Hest<dynamic>*>* = dynamic> extends core::Object {
+class Fisk<TypeY extends core::Map<self::Hest<self::Hest<dynamic>*>*, self::Hest<self::Hest<dynamic>*>*>* = dynamic> extends core::Object {
   synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.outline.expect
index 57cdeed..bd2bd0e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.outline.expect
@@ -1,16 +1,27 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Hest> {}
+//            ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart:9:12: Context: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+//            ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = dynamic> extends core::Object {
+class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = self::Hest<dynamic>*> extends core::Object {
   synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
     ;
 }
-class Fisk<TypeY extends self::Hest<dynamic>* = dynamic> extends core::Object {
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
   synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
     ;
 }
-class Naebdyr<TypeZ extends self::Fisk<dynamic>* = dynamic> extends core::Object {
+class Naebdyr<TypeZ extends self::Fisk<dynamic>* = self::Fisk<dynamic>*> extends core::Object {
   synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ*>*
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.outline.expect
index 49f116a..2097fc5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.outline.expect
@@ -1,12 +1,23 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart:12:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Hest> {}
+//            ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart:10:12: Context: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+//            ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = dynamic> extends core::Object {
+class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = self::Hest<dynamic>*> extends core::Object {
   synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
     ;
 }
-class Fisk<TypeY extends self::Hest<dynamic>* = dynamic> extends core::Object {
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
   synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
     ;
 }
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 77163cf..ff215ac 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* = dynamic> extends core::Object {
+class A<T extends core::num* = core::num*> extends core::Object {
   synthetic constructor •() → self::A<self::A::T*>*
     ;
 }
-class B<T extends self::A<dynamic>* = dynamic> extends core::Object {
+class B<T extends self::A<core::num*>* = self::A<core::num*>*> extends core::Object {
   synthetic constructor •() → self::B<self::B::T*>*
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.outline.expect
index c1cd644..040e2a3 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.outline.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Comparable<self::A::X>* = dynamic> extends core::Object {
+class A<X extends core::Comparable<self::A::X>* = core::Comparable<dynamic>*> extends core::Object {
   synthetic constructor •() → self::A<self::A::X*>*
     ;
 }
-class B<Y extends self::A<dynamic>* = dynamic> extends core::Object {
+class B<Y extends self::A<dynamic>* = self::A<dynamic>*> extends core::Object {
   synthetic constructor •() → self::B<self::B::Y*>*
     ;
 }
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 a2a9d19..2075628 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,10 +2,10 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T>* = dynamic> extends core::Object {
+class A<T extends self::A<self::A::T>* = self::A<dynamic>*> extends core::Object {
   synthetic constructor •() → self::A<self::A::T*>*
     ;
 }
-static field self::A<dynamic>* a;
+static field self::A<self::A<dynamic>*>* a;
 static method main() → dynamic
   ;
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 c64d3c5..63d1e70 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
@@ -8,11 +8,11 @@
   synthetic constructor •() → self::B*
     ;
 }
-class X<T extends self::B* = dynamic> extends core::Object {
+class X<T extends self::B* = self::B*> extends core::Object {
   synthetic constructor •() → self::X<self::X::T*>*
     ;
 }
-class Y extends self::X<dynamic> {
+class Y extends self::X<self::B*> {
   synthetic constructor •() → self::Y*
     ;
 }
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 a05dade..a9a5b64 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,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-typedef A<T extends core::num* = dynamic> = (T*) →* dynamic;
+typedef A<T extends core::num* = core::num*> = (T*) →* dynamic;
 class B extends core::Object {
   synthetic constructor •() → self::B*
     ;
-  method foo((dynamic) →* dynamic a) → dynamic
+  method foo((core::num*) →* dynamic a) → dynamic
     ;
-  method bar() → (dynamic) →* dynamic
+  method bar() → (core::num*) →* 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 e1932d8..9af14c6 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* = dynamic> = (T*) →* dynamic;
-static field dynamic a;
+typedef A<T extends core::num* = core::num*> = (T*) →* dynamic;
+static field core::List<(core::num*) →* dynamic>* a;
 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 e1932d8..a1238c5 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* = dynamic> = (T*) →* dynamic;
-static field dynamic a;
+typedef A<T extends core::num* = core::num*> = (T*) →* dynamic;
+static field core::Map<(core::num*) →* dynamic, (core::num*) →* dynamic>* a;
 static method main() → dynamic
   ;
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 434a8b9..345eb14 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* = dynamic> = (T*) →* dynamic;
-class B<T extends (dynamic) →* dynamic = 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 •() → self::B<self::B::T*>*
     ;
 }
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
new file mode 100644
index 0000000..7fd0a96
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.outline.expect
@@ -0,0 +1,9 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef B<S extends (S) →* dynamic = (dynamic) →* dynamic> = (S*) →* dynamic;
+static field ((dynamic) →* dynamic) →* dynamic b;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/nnbd/late.dart.outline.expect b/pkg/front_end/testcases/nnbd/late.dart.outline.expect
index 0c33cf6..3ab3586 100644
--- a/pkg/front_end/testcases/nnbd/late.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/late.dart.outline.expect
@@ -1,140 +1,18 @@
 library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd/late.dart:5:6: Error: Expected ';' after this.
-// late int lateStaticField;
-//      ^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:5:10: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
-// Try adding the name of the type of the variable or the keyword 'var'.
-// late int lateStaticField;
-//          ^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:6:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
-// Try adding the name of the type of the variable or the keyword 'var'.
-// late final int finalLateStaticField;
-// ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:6:1: Error: Expected ';' after this.
-// late final int finalLateStaticField;
-// ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:6:16: Error: The final variable 'finalLateStaticField' must be initialized.
-// Try adding an initializer ('= <expression>') to the declaration.
-// late final int finalLateStaticField;
-//                ^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:9:8: Error: Expected ';' after this.
-//   late int lateInstanceField;
-//        ^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:9:12: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
-// Try adding the name of the type of the variable or the keyword 'var'.
-//   late int lateInstanceField;
-//            ^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:10:3: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
-// Try adding the name of the type of the variable or the keyword 'var'.
-//   late final int finalLateInstanceField = 0;
-//   ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:10:3: Error: Expected ';' after this.
-//   late final int finalLateInstanceField = 0;
-//   ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:12:15: Error: Expected ';' after this.
-//   static late int lateStaticField;
-//               ^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:12:15: Error: 'int' is already declared in this scope.
-//   static late int lateStaticField;
-//               ^^^
-// pkg/front_end/testcases/nnbd/late.dart:9:8: Context: Previous declaration of 'int'.
-//   late int lateInstanceField;
-//        ^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:12:19: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
-// Try adding the name of the type of the variable or the keyword 'var'.
-//   static late int lateStaticField;
-//                   ^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:13:10: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
-// Try adding the name of the type of the variable or the keyword 'var'.
-//   static late final int finalLateStaticField = 0;
-//          ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:13:10: Error: Expected ';' after this.
-//   static late final int finalLateStaticField = 0;
-//          ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:13:10: Error: 'late' is already declared in this scope.
-//   static late final int finalLateStaticField = 0;
-//          ^^^^
-// pkg/front_end/testcases/nnbd/late.dart:10:3: Context: Previous declaration of 'late'.
-//   late final int finalLateInstanceField = 0;
-//   ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:9:3: Warning: 'late' isn't a type.
-//   late int lateInstanceField;
-//   ^^^^
-// pkg/front_end/testcases/nnbd/late.dart:9:3: Context: This isn't a type.
-//   late int lateInstanceField;
-//   ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:10:14: Warning: 'int' isn't a type.
-//   late final int finalLateInstanceField = 0;
-//              ^^^
-// pkg/front_end/testcases/nnbd/late.dart:10:14: Context: This isn't a type.
-//   late final int finalLateInstanceField = 0;
-//              ^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:12:10: Warning: 'late' isn't a type.
-//   static late int lateStaticField;
-//          ^^^^
-// pkg/front_end/testcases/nnbd/late.dart:12:10: Context: This isn't a type.
-//   static late int lateStaticField;
-//          ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:13:21: Warning: 'int' isn't a type.
-//   static late final int finalLateStaticField = 0;
-//                     ^^^
-// pkg/front_end/testcases/nnbd/late.dart:13:21: Context: This isn't a type.
-//   static late final int finalLateStaticField = 0;
-//                     ^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:5:1: Warning: 'late' isn't a type.
-// late int lateStaticField;
-// ^^^^
-// pkg/front_end/testcases/nnbd/late.dart:6:1: Context: This isn't a type.
-// late final int finalLateStaticField;
-// ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:6:12: Warning: 'int' isn't a type.
-// late final int finalLateStaticField;
-//            ^^^
-// pkg/front_end/testcases/nnbd/late.dart:5:6: Context: This isn't a type.
-// late int lateStaticField;
-//      ^^^
-//
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field invalid-type int;
-  field dynamic lateInstanceField;
-  field dynamic late;
-  final field invalid-type finalLateInstanceField;
-  field dynamic lateStaticField;
-  final field invalid-type finalLateStaticField;
+  late field core::int* lateInstanceField;
+  late final field core::int* finalLateInstanceField;
+  late static field core::int* lateStaticField;
+  late static final field core::int* finalLateStaticField;
   synthetic constructor •() → self::Class*
     ;
   method method() → dynamic
     ;
 }
-static field invalid-type int;
-static field dynamic lateStaticField;
-static field dynamic late;
-static final field invalid-type finalLateStaticField;
+late static field core::int* lateStaticField;
+late static final field core::int* finalLateStaticField;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/nullable_param.dart.outline.expect b/pkg/front_end/testcases/nnbd/nullable_param.dart.outline.expect
index b50f3c71..0a3ac11 100644
--- a/pkg/front_end/testcases/nnbd/nullable_param.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_param.dart.outline.expect
@@ -2,26 +2,6 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/nullable_param.dart:5:6: Error: This requires the 'non-nullable' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-//   int? field;
-//      ^
-//
-// pkg/front_end/testcases/nnbd/nullable_param.dart:6:6: Error: This requires the 'non-nullable' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-//   int? bar(int? x);
-//      ^
-//
-// pkg/front_end/testcases/nnbd/nullable_param.dart:6:15: Error: This requires the 'non-nullable' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-//   int? bar(int? x);
-//               ^
-//
-// pkg/front_end/testcases/nnbd/nullable_param.dart:17:54: Error: This requires the 'non-nullable' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// int test_nullable_function_type_formal_param({int f()? : null}) {
-//                                                      ^
-//
 // pkg/front_end/testcases/nnbd/nullable_param.dart:4:7: Error: The non-abstract class 'Foo' is missing implementations for these members:
 //  - Foo.bar
 // Try to either
diff --git a/pkg/front_end/testcases/nnbd/required.dart.outline.expect b/pkg/front_end/testcases/nnbd/required.dart.outline.expect
index 156e7c1..97154f2 100644
--- a/pkg/front_end/testcases/nnbd/required.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/required.dart.outline.expect
@@ -1,60 +1,17 @@
 library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd/required.dart:5:29: Error: Expected '}' before this.
-// method({int a, required int b, required final int c}) {}
-//                             ^
-//
-// pkg/front_end/testcases/nnbd/required.dart:8:31: Error: Expected '}' before this.
-//   method({int a, required int b, required final int c, required covariant final int d}) {}
-//                               ^
-//
-// pkg/front_end/testcases/nnbd/required.dart:12:50: Error: Expected '}' before this.
-// typedef Typedef1 = Function({int a, required int b});
-//                                                  ^
-//
-// pkg/front_end/testcases/nnbd/required.dart:14:39: Error: Expected '}' before this.
-// typedef Typedef2({int a, required int b});
-//                                       ^
-//
-// pkg/front_end/testcases/nnbd/required.dart:16:31: Error: Expected '}' before this.
-// Function({int a, required int b}) field;
-//                               ^
-//
-// pkg/front_end/testcases/nnbd/required.dart:5:16: Warning: Type 'required' not found.
-// method({int a, required int b, required final int c}) {}
-//                ^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/required.dart:8:18: Warning: Type 'required' not found.
-//   method({int a, required int b, required final int c, required covariant final int d}) {}
-//                  ^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/required.dart:12:37: Warning: Type 'required' not found.
-// typedef Typedef1 = Function({int a, required int b});
-//                                     ^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/required.dart:14:26: Warning: Type 'required' not found.
-// typedef Typedef2({int a, required int b});
-//                          ^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/required.dart:16:18: Warning: Type 'required' not found.
-// Function({int a, required int b}) field;
-//                  ^^^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 
-typedef Typedef1 = ({a: core::int*, int: invalid-type}) →* dynamic;
-typedef Typedef2 = ({a: core::int*, int: invalid-type}) →* dynamic;
+typedef Typedef1 = ({a: core::int*, required b: core::int*}) →* dynamic;
+typedef Typedef2 = ({a: core::int*, required b: core::int*}) →* dynamic;
 class Class extends core::Object {
   synthetic constructor •() → self::Class*
     ;
-  method method({core::int* a, invalid-type int}) → dynamic
+  method method({core::int* a, required core::int* b, required final core::int* c, required covariant final core::int* d}) → dynamic
     ;
 }
-static field ({a: core::int*, int: invalid-type}) →* dynamic field;
-static method method({core::int* a, invalid-type int}) → dynamic
+static field ({a: core::int*, required b: core::int*}) →* dynamic field;
+static method method({core::int* a, required core::int* b, required final core::int* c}) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/outline.status b/pkg/front_end/testcases/outline.status
index 3b44d70..4037f63 100644
--- a/pkg/front_end/testcases/outline.status
+++ b/pkg/front_end/testcases/outline.status
@@ -2,247 +2,41 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE.md file.
 
-general/incomplete_field_formal_parameter: Fail # Fasta doesn't recover well
-general/redirecting_factory_chain_test: Fail # Missing support for RedirectingFactoryConstructor.
-general/redirecting_factory_simple_test: Fail # Missing support for RedirectingFactoryConstructor.
-general/redirecting_factory_typeargs_test: Fail # Missing support for RedirectingFactoryConstructor.
-general/redirecting_factory_typeparam_test: Fail # Missing support for RedirectingFactoryConstructor.
-general/redirecting_factory_typeparambounds_test: Fail # Missing support for RedirectingFactoryConstructor.
+general/abstract_members: TypeCheckError
+general/bug30695: TypeCheckError
+general/bug30695: TypeCheckError
+general/ignore_function: TypeCheckError
+general/mixin_application_override: TypeCheckError
+general/override_check_accessor_after_inference: TypeCheckError
+general/override_check_accessor_basic: TypeCheckError
+general/override_check_accessor_with_covariant_modifier: TypeCheckError
+general/override_check_after_inference: TypeCheckError
+general/override_check_basic: TypeCheckError
+general/override_check_with_covariant_modifier: TypeCheckError
 
-inference/async_closure_return_type_flatten: Fail
-inference/async_closure_return_type_future: Fail
-inference/async_closure_return_type_future_or: Fail
-inference/block_bodied_lambdas_async_all_returns_are_futures: Fail
-inference/block_bodied_lambdas_async_all_returns_are_values: Fail
-inference/block_bodied_lambdas_async_mix_of_values_and_futures: Fail
-inference/block_bodied_lambdas_async_star: Fail
-inference/block_bodied_lambdas_basic: Fail
-inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference: Fail
-inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level: Fail
-inference/block_bodied_lambdas_infer_bottom_async: Fail
-inference/block_bodied_lambdas_infer_bottom_async_star: Fail
-inference/block_bodied_lambdas_infer_bottom_sync: Fail
-inference/block_bodied_lambdas_infer_bottom_sync_star: Fail
-inference/block_bodied_lambdas_lub: Fail
-inference/block_bodied_lambdas_nested_lambdas: Fail
-inference/block_bodied_lambdas_no_return: Fail
-inference/block_bodied_lambdas_sync_star: Fail
-inference/bottom: Fail
-inference/bottom_in_closure: Fail
-inference/circular_reference_via_closures: Fail
-inference/circular_reference_via_closures_initializer_types: Fail
-inference/conflicts_can_happen: Fail
+inference/conflicting_fields: TypeCheckError
 inference/conflicts_can_happen2: Fail
-inference/constructors_downwards_with_constraint: Fail
-inference/constructors_infer_from_arguments: Fail
-inference/constructors_infer_from_arguments_const: Fail
-inference/constructors_infer_from_arguments_const_with_upper_bound: Fail
-inference/constructors_infer_from_arguments_downwards_from_constructor: Fail
-inference/constructors_infer_from_arguments_factory: Fail
-inference/constructors_infer_from_arguments_factory_calls_constructor: Fail
-inference/constructors_infer_from_arguments_named: Fail
-inference/constructors_infer_from_arguments_named_factory: Fail
-inference/constructors_infer_from_arguments_redirecting: Fail
-inference/constructors_infer_from_arguments_redirecting_factory: Fail
-inference/constructors_reverse_type_parameters: Fail
-inference/constructors_too_many_positional_arguments: Fail
+inference/conflicts_can_happen: Fail
 inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer: Fail
-inference/dont_infer_field_type_when_initializer_is_null: Fail
-inference/dont_infer_type_on_dynamic: Fail
-inference/dont_infer_type_when_initializer_is_null: Fail
-inference/downward_inference_miscellaneous: Fail
-inference/downwards_inference_assignment_statements: Fail
-inference/downwards_inference_async_await: Fail
-inference/downwards_inference_for_each: Fail
-inference/downwards_inference_initializing_formal_default_formal: Fail
-inference/downwards_inference_inside_top_level: Fail
-inference/downwards_inference_on_constructor_arguments_infer_downwards: Fail
-inference/downwards_inference_on_function_arguments_infer_downwards: Fail
-inference/downwards_inference_on_function_expressions: Fail
-inference/downwards_inference_on_function_of_t_using_the_t: Fail
-inference/downwards_inference_on_generic_constructor_arguments_empty_list: Fail
-inference/downwards_inference_on_generic_constructor_arguments_infer_downwards: Fail
-inference/downwards_inference_on_generic_function_expressions: Fail
-inference/downwards_inference_on_instance_creations_infer_downwards: Fail
-inference/downwards_inference_on_list_literals_infer_downwards: Fail
-inference/downwards_inference_on_list_literals_infer_if_value_types_match_context: Fail
-inference/downwards_inference_on_map_literals: Fail
-inference/downwards_inference_yield_yield_star: Fail
-inference/field_refers_to_static_getter: Fail
-inference/field_refers_to_top_level_getter: Fail
-inference/future_or_subtyping: Fail
-inference/generic_functions_return_typedef: Fail
-inference/generic_methods_basic_downward_inference: Fail
-inference/generic_methods_dart_math_min_max: Fail
 inference/generic_methods_do_not_infer_invalid_override_of_generic_method: Fail
-inference/generic_methods_downwards_inference_affects_arguments: Fail
-inference/generic_methods_downwards_inference_fold: Fail
 inference/generic_methods_handle_override_of_non_generic_with_generic: Fail
-inference/generic_methods_infer_generic_function_parameter_type: Fail
-inference/generic_methods_infer_generic_function_parameter_type2: Fail
-inference/generic_methods_infer_generic_function_return_type: Fail
-inference/generic_methods_infer_generic_instantiation: Fail
-inference/generic_methods_infer_generic_method_type: Fail
-inference/generic_methods_inference_error: Fail
-inference/generic_methods_iterable_and_future: Fail
-inference/generic_methods_nested_generic_instantiation: Fail
-inference/generic_methods_uses_greatest_lower_bound: Fail
+inference/inconsistent_overrides: TypeCheckError
 inference/infer_assign_to_index: Fail
 inference/infer_assign_to_property: Fail
 inference/infer_assign_to_property_custom: Fail
-inference/infer_assign_to_ref: Fail
-inference/infer_binary_custom: Fail
-inference/infer_binary_double_double: Fail
-inference/infer_binary_double_int: Fail
-inference/infer_binary_int_double: Fail
-inference/infer_binary_int_int: Fail
-inference/infer_conditional: Fail
-inference/infer_consts_transitively_2: Fail
-inference/infer_consts_transitively_2_a: Fail
-inference/infer_consts_transitively_2_b: Fail
-inference/infer_consts_transitively_b: Fail
-inference/infer_correctly_on_multiple_variables_declared_together: Fail
-inference/infer_from_complex_expressions_if_outer_most_value_is_precise: Fail
-inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields: Fail
-inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2: Fail
-inference/infer_from_variables_in_cycle_libs_when_flag_is_on: Fail
-inference/infer_from_variables_in_cycle_libs_when_flag_is_on2: Fail
-inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a: Fail
-inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a: Fail
-inference/infer_from_variables_in_non_cycle_imports_with_flag: Fail
-inference/infer_from_variables_in_non_cycle_imports_with_flag2: Fail
-inference/infer_from_variables_in_non_cycle_imports_with_flag2_a: Fail
-inference/infer_from_variables_in_non_cycle_imports_with_flag_a: Fail
-inference/infer_generic_method_type_named: Fail
-inference/infer_generic_method_type_positional: Fail
-inference/infer_generic_method_type_positional2: Fail
-inference/infer_generic_method_type_required: Fail
-inference/infer_list_literal_nested_in_map_literal: Fail
-inference/infer_local_function_return_type: Fail
-inference/infer_parameter_type_setter_from_field: Fail
-inference/infer_parameter_type_setter_from_setter: Fail
-inference/infer_prefix_expression: Fail
-inference/infer_prefix_expression_custom: Fail
-inference/infer_return_of_statement_lambda: Fail
-inference/infer_statics_transitively: Fail
-inference/infer_statics_transitively2: Fail
-inference/infer_statics_transitively3: Fail
-inference/infer_statics_transitively3_a: Fail
-inference/infer_statics_transitively_2_a: Fail
-inference/infer_statics_transitively_a: Fail
-inference/infer_statics_transitively_b: Fail
-inference/infer_statics_with_method_invocations: Fail
-inference/infer_statics_with_method_invocations_a: Fail
-inference/infer_throw: Fail
+inference/infer_field_override_multiple: TypeCheckError
+inference/infer_method_missing_params: TypeCheckError
 inference/infer_type_cast: Fail
-inference/infer_type_on_overridden_fields2: Fail
-inference/infer_type_on_overridden_fields4: Fail
-inference/infer_type_on_var: Fail
-inference/infer_type_on_var2: Fail
-inference/infer_type_on_var_from_field: Fail
-inference/infer_type_on_var_from_top_level: Fail
-inference/infer_type_regardless_of_declaration_order_or_cycles: Fail
-inference/infer_type_regardless_of_declaration_order_or_cycles_b: Fail
-inference/infer_typed_list_literal: Fail
-inference/infer_typed_map_literal: Fail
-inference/infer_types_on_generic_instantiations_3: Fail
-inference/infer_types_on_generic_instantiations_4: Fail
-inference/infer_types_on_generic_instantiations_5: Fail
-inference/infer_types_on_generic_instantiations_in_library_cycle: Fail
-inference/infer_types_on_generic_instantiations_in_library_cycle_a: Fail
-inference/infer_types_on_generic_instantiations_infer: Fail
-inference/infer_types_on_loop_indices_for_each_loop: Fail
-inference/infer_types_on_loop_indices_for_loop_with_inference: Fail
-inference/infer_variable_void: Fail
-inference/inferred_initializing_formal_checks_default_value: Fail
-inference/inferred_nonstatic_field_depends_on_static_field_complex: Fail
-inference/inferred_nonstatic_field_depends_on_top_level_var_simple: Fail
-inference/inferred_type_block_closure_no_args_no_return: Fail
-inference/inferred_type_cascade: Fail
-inference/inferred_type_custom_binary_op: Fail
-inference/inferred_type_custom_binary_op_via_interface: Fail
-inference/inferred_type_custom_index_op: Fail
-inference/inferred_type_custom_index_op_via_interface: Fail
-inference/inferred_type_custom_unary_op: Fail
-inference/inferred_type_custom_unary_op_via_interface: Fail
-inference/inferred_type_extract_method_tear_off: Fail
-inference/inferred_type_extract_method_tear_off_via_interface: Fail
-inference/inferred_type_from_top_level_executable_tear_off: Fail
-inference/inferred_type_invoke_method: Fail
-inference/inferred_type_invoke_method_via_interface: Fail
-inference/inferred_type_is_enum: Fail
-inference/inferred_type_is_enum_values: Fail
-inference/inferred_type_is_typedef: Fail
-inference/inferred_type_is_typedef_parameterized: Fail
-inference/inferred_type_uses_synthetic_function_type: Fail
-inference/inferred_type_uses_synthetic_function_type_function_typed_param: Fail
-inference/inferred_type_uses_synthetic_function_type_named_param: Fail
-inference/inferred_type_uses_synthetic_function_type_positional_param: Fail
-inference/inferred_type_uses_synthetic_function_type_required_param: Fail
-inference/inferred_type_via_closure_multiple_levels_of_nesting: Fail
-inference/inferred_type_via_closure_type_depends_on_args: Fail
-inference/inferred_type_via_closure_type_independent_of_args_field: Fail
-inference/inferred_type_via_closure_type_independent_of_args_top_level: Fail
-inference/instantiate_to_bounds_generic2_has_bound_defined_after: Fail
-inference/instantiate_to_bounds_generic2_has_bound_defined_before: Fail
-inference/instantiate_to_bounds_generic2_no_bound: Fail
-inference/instantiate_to_bounds_generic_has_bound_defined_after: Fail
-inference/instantiate_to_bounds_generic_has_bound_defined_before: Fail
-inference/instantiate_to_bounds_invoke_constructor_no_bound: Fail
-inference/instantiate_to_bounds_invoke_constructor_type_args_exact: Fail
-inference/instantiate_to_bounds_not_generic: Fail
-inference/lambda_does_not_have_propagated_type_hint: Fail
-inference/list_literals: Fail
-inference/list_literals_can_infer_null_bottom: Fail
-inference/list_literals_top_level: Fail
-inference/map_literals: Fail
-inference/map_literals_can_infer_null: Fail
-inference/map_literals_top_level: Fail
-inference/method_call_with_type_arguments_instance_method: Fail
-inference/method_call_with_type_arguments_instance_method_identifier_sequence: Fail
-inference/method_call_with_type_arguments_static_method: Fail
-inference/method_call_with_type_arguments_top_level_function: Fail
-inference/no_error_when_declared_type_is_num_and_assigned_null: Fail
-inference/null_coalescing_operator: Fail
-inference/null_coalescing_operator_2: Fail
-inference/null_literal_should_not_infer_as_bottom: Fail
-inference/propagate_inference_to_field_in_class: Fail
-inference/propagate_inference_to_field_in_class_dynamic_warnings: Fail
-inference/propagate_inference_transitively: Fail
-inference/propagate_inference_transitively2: Fail
-inference/reference_to_typedef: Fail
-inference/refine_binary_expression_type_type_parameter_t_double: Fail
-inference/refine_binary_expression_type_type_parameter_t_int: Fail
-inference/refine_binary_expression_type_type_parameter_t_t: Fail
-inference/static_method_tear_off: Fail
-inference/unsafe_block_closure_inference_closure_call: Fail
-inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param: Fail
-inference/unsafe_block_closure_inference_constructor_call_explicit_type_param: Fail
-inference/unsafe_block_closure_inference_constructor_call_implicit_type_param: Fail
-inference/unsafe_block_closure_inference_constructor_call_no_type_param: Fail
-inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param: Fail
-inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2: Fail
-inference/unsafe_block_closure_inference_function_call_explicit_type_param: Fail
-inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2: Fail
-inference/unsafe_block_closure_inference_function_call_implicit_type_param: Fail
-inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr: Fail
-inference/unsafe_block_closure_inference_function_call_no_type_param: Fail
-inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr: Fail
-inference/unsafe_block_closure_inference_in_list_dynamic: Fail
-inference/unsafe_block_closure_inference_in_list_typed: Fail
-inference/unsafe_block_closure_inference_in_list_untyped: Fail
-inference/unsafe_block_closure_inference_in_map_dynamic: Fail
-inference/unsafe_block_closure_inference_in_map_typed: Fail
-inference/unsafe_block_closure_inference_in_map_untyped: Fail
-inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param: Fail
-inference/unsafe_block_closure_inference_method_call_explicit_type_param: Fail
-inference/unsafe_block_closure_inference_method_call_implicit_type_param: Fail
-inference/unsafe_block_closure_inference_method_call_no_type_param: Fail
-inference/void_return_type_subtypes_dynamic: Fail
+inference/infer_types_on_generic_instantiations_infer: TypeCheckError
+inference/mixin_inference_outwards_3: TypeCheckError
+inference/mixin_inference_outwards_4: TypeCheckError
+inference/mixin_inference_unification_1: TypeCheckError
+inference/mixin_inference_unification_2: TypeCheckError
+inference_new/infer_field_getter_setter_mismatch: TypeCheckError
+inference_new/infer_field_override_accessors: TypeCheckError
+inference_new/infer_field_override_getter_overrides_setter: TypeCheckError
 
-rasta/issue_000047: Fail
 rasta/native_is_illegal: Pass # Issue 29763
-rasta/type_with_parse_error: Fail
 
-instantiate_to_bound/body_typedef_super_bounded_type: Fail # Issue 33444
-instantiate_to_bound/typedef_super_bounded_type: Fail # Issue 33444
+runtime_checks_new/mixin_forwarding_stub_field: TypeCheckError
+runtime_checks_new/mixin_forwarding_stub_setter: TypeCheckError
diff --git a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.outline.expect b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.outline.expect
index e6caacb..dfa4ba4 100644
--- a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.outline.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/bad_constructor_redirection.dart:6:21: Warning: Too many positional arguments: 0 allowed, but 1 found.
+// pkg/front_end/testcases/rasta/bad_constructor_redirection.dart:6:21: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //   const C() : this.x(1);
 //                     ^
diff --git a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.outline.expect b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.outline.expect
index d7e7781..a7b1099 100644
--- a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.outline.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:20: Warning: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:20: Error: Too few positional arguments: 1 required, 0 given.
 //   const B() : super();
 //                    ^
 //
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect
index f3e48bc..256fe64 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect
@@ -2,22 +2,6 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/class_hierarchy.dart:5:17: Warning: Type 'Missing' not found.
-// class A extends Missing {}
-//                 ^^^^^^^
-//
-// pkg/front_end/testcases/rasta/class_hierarchy.dart:7:20: Warning: Type 'Missing' not found.
-// class B implements Missing {}
-//                    ^^^^^^^
-//
-// pkg/front_end/testcases/rasta/class_hierarchy.dart:9:23: Warning: Type 'Missing' not found.
-// class C = Object with Missing;
-//                       ^^^^^^^
-//
-// pkg/front_end/testcases/rasta/class_hierarchy.dart:9:7: Error: The type 'Missing' can't be mixed in.
-// class C = Object with Missing;
-//       ^
-//
 // pkg/front_end/testcases/rasta/class_hierarchy.dart:5:17: Error: Type 'Missing' not found.
 // class A extends Missing {}
 //                 ^^^^^^^
@@ -30,11 +14,15 @@
 // class C = Object with Missing;
 //                       ^^^^^^^
 //
-// pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Warning: Couldn't find constructor 'Missing'.
+// pkg/front_end/testcases/rasta/class_hierarchy.dart:9:7: Error: The type 'Missing' can't be mixed in.
+// class C = Object with Missing;
+//       ^
+//
+// pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Couldn't find constructor 'Missing'.
 //   factory D() = Missing;
 //                 ^
 //
-// pkg/front_end/testcases/rasta/class_hierarchy.dart:12:11: Warning: Redirection constructor target not found: 'Missing'
+// pkg/front_end/testcases/rasta/class_hierarchy.dart:12:11: Error: Redirection constructor target not found: 'Missing'
 //   factory D() = Missing;
 //           ^
 //
diff --git a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.outline.expect b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.outline.expect
index c9b0d8b..2188126 100644
--- a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.outline.expect
@@ -1,6 +1,7 @@
 library;
 import self as self;
+import "dart:core" as core;
 
-static const field dynamic c = 1;
+static const field core::int* c = 1;
 static method main() → dynamic
   ;
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 185910f..3938bc8 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect
@@ -2,14 +2,28 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Warning: Couldn't find constructor 'Missing'.
+// pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Couldn't find constructor 'Missing'.
 //   factory A.c() = Missing;
 //                   ^
 //
-// pkg/front_end/testcases/rasta/generic_factory.dart:16:11: Warning: Redirection constructor target not found: 'Missing'
+// pkg/front_end/testcases/rasta/generic_factory.dart:16:11: Error: Redirection constructor target not found: 'Missing'
 //   factory A.c() = Missing;
 //           ^
 //
+// pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
+//  - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+//  - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+//   factory A.b() = B<C1>.a;
+//                   ^
+//
+// pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
+//  - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+//  - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+//   factory B.b() = C<C2>;
+//                   ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/issue_000002.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000002.dart.outline.expect
index 1e569d8..742dcd7 100644
--- a/pkg/front_end/testcases/rasta/issue_000002.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000002.dart.outline.expect
@@ -12,6 +12,6 @@
   static factory fac(dynamic value) → self::Foo*
     ;
 }
-static field dynamic list;
+static field core::List<core::int*>* list;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/issue_000006.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000006.dart.outline.expect
index 0ff4007..6de5524 100644
--- a/pkg/front_end/testcases/rasta/issue_000006.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000006.dart.outline.expect
@@ -1,6 +1,7 @@
 library;
 import self as self;
+import "dart:core" as core;
 
-static field dynamic list;
+static field core::List<core::int*>* list;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/issue_000026.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000026.dart.outline.expect
index 147a7db..cdccc71 100644
--- a/pkg/front_end/testcases/rasta/issue_000026.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000026.dart.outline.expect
@@ -4,15 +4,15 @@
 
 class C extends core::Object {
   field dynamic a;
-  field dynamic b;
-  field dynamic c;
+  field core::int* b;
+  field core::int* c;
   synthetic constructor •() → self::C*
     ;
 }
 class D extends core::Object {
   field dynamic a;
-  field dynamic b;
-  field dynamic c;
+  field core::int* b;
+  field core::int* c;
   constructor •() → self::D*
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000033.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000033.dart.outline.expect
index 44fbbbc..feabb09 100644
--- a/pkg/front_end/testcases/rasta/issue_000033.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000033.dart.outline.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Warning: Method not found: 'JS'.
+// pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Method not found: 'JS'.
 // @JS()
 //  ^^
 //
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.outline.expect
index 35d0544..cd96d0f 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.outline.expect
@@ -17,11 +17,11 @@
 //   C notEvenAConstructor(a) = h;
 //                            ^
 //
-// pkg/front_end/testcases/rasta/issue_000044.dart:7:1: Warning: Type 'a' not found.
+// pkg/front_end/testcases/rasta/issue_000044.dart:7:1: Error: Type 'a' not found.
 // a b(c) = d;
 // ^
 //
-// pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Warning: Couldn't find constructor 'h'.
+// pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Error: Couldn't find constructor 'h'.
 //   C notEvenAConstructor(a) = h;
 //                              ^
 //
diff --git a/pkg/front_end/testcases/rasta/issue_000047.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000047.dart.outline.expect
index ab80bb0b..de792f5 100644
--- a/pkg/front_end/testcases/rasta/issue_000047.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000047.dart.outline.expect
@@ -1,5 +1,13 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/issue_000047.dart:5:17: Error: Expected ')' before this.
+// typedef void T(C<C>);
+//                 ^
+//
 import self as self;
 
-static method main() → invalid-type
+typedef T = (dynamic) →* void;
+static method main() → (dynamic) →* void
   ;
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 45c7070..afa2636 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.outline.expect
@@ -11,7 +11,7 @@
   constructor empty() → self::A<self::A::N*, self::A::S*, self::A::U*>*
     ;
   const constructor c(self::A::U* u, self::A::S* s) → self::A<self::A::N*, self::A::S*, self::A::U*>*
-    : self::A::field = const <dynamic>[null], super core::Object::•()
+    : self::A::field = const <core::Null*>[null], super core::Object::•()
     ;
   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*>*
     ;
diff --git a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.outline.expect b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.outline.expect
index a53eb28..186fdea 100644
--- a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.outline.expect
@@ -24,7 +24,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field dynamic x;
+  field core::String* x;
   constructor •() → self::A*
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/static.dart.outline.expect b/pkg/front_end/testcases/rasta/static.dart.outline.expect
index eac130a..c9bb1ac 100644
--- a/pkg/front_end/testcases/rasta/static.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.outline.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  static const field dynamic staticConstant = 42;
-  static field dynamic staticField;
+  static const field core::int* staticConstant = 42;
+  static field core::int* staticField;
   synthetic constructor •() → self::Foo*
     ;
   static method staticFunction() → dynamic
diff --git a/pkg/front_end/testcases/rasta/type_with_parse_error.dart.outline.expect b/pkg/front_end/testcases/rasta/type_with_parse_error.dart.outline.expect
index 6b89dbc..36905b0 100644
--- a/pkg/front_end/testcases/rasta/type_with_parse_error.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/type_with_parse_error.dart.outline.expect
@@ -1,15 +1,23 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/type_with_parse_error.dart:21:7: Error: Expected ';' after this.
+//   int i
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •() → void
+  synthetic constructor •() → self::A*
     ;
   method foo() → dynamic
     ;
 }
-class B extends core::Object {
-  constructor •() → void
+class B<T extends core::Object* = dynamic> extends core::Object {
+  field core::int* i;
+  synthetic constructor •() → self::B<self::B::T*>*
     ;
 }
 static method main() → dynamic
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 bdc4a96..254a3b9 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.outline.expect
@@ -1,9 +1,16 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29981.dart:6:3: Error: Expected 1 type arguments.
+//   C<String, String> field;
+//   ^
+//
 import self as self;
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  field self::C<dynamic>* field;
+  field invalid-type field;
   synthetic constructor •() → self::C<self::C::T*>*
     ;
 }
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.outline.expect b/pkg/front_end/testcases/regress/issue_31188.dart.outline.expect
index c60e8a0..a5b32ff 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.outline.expect
@@ -10,7 +10,7 @@
 // type T = Map<A, B>
 //                  ^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:1: Warning: Type 'type' not found.
+// pkg/front_end/testcases/regress/issue_31188.dart:7:1: Error: Type 'type' not found.
 // type T = Map<A, B>
 // ^^^^
 //
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 7a2a75f..d75581b 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.outline.expect
@@ -2,12 +2,12 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_31190.dart:6:3: Warning: Can't use type arguments with type variable 'T'.
+// pkg/front_end/testcases/regress/issue_31190.dart:6:3: Error: Can't use type arguments with type variable 'T'.
 // Try removing the type arguments.
 //   T<U> v;
 //   ^
 //
-// pkg/front_end/testcases/regress/issue_31190.dart:6:5: Warning: Type 'U' not found.
+// pkg/front_end/testcases/regress/issue_31190.dart:6:5: Error: Type 'U' not found.
 //   T<U> v;
 //     ^
 //
diff --git a/pkg/front_end/testcases/regress/issue_32200.dart.outline.expect b/pkg/front_end/testcases/regress/issue_32200.dart.outline.expect
index 496a079..75340ee 100644
--- a/pkg/front_end/testcases/regress/issue_32200.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32200.dart.outline.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_32200.dart:8:3: Warning: 'self.Foo' can't be used as a type because 'self' doesn't refer to an import prefix.
+// pkg/front_end/testcases/regress/issue_32200.dart:8:3: Error: 'self.Foo' can't be used as a type because 'self' doesn't refer to an import prefix.
 //   self.Foo self;
 //   ^^^^^^^^
 //
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect b/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect
index 6a0f6b8..e4d2c10 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_32660.dart:21:3: Warning: The method 'D.foo' has fewer named arguments than those of overridden method 'E.foo'.
+// pkg/front_end/testcases/regress/issue_32660.dart:21:3: Error: The method 'D.foo' has fewer named arguments than those of overridden method 'E.foo'.
 //   foo(int x) => x;
 //   ^
 // pkg/front_end/testcases/regress/issue_32660.dart:25:3: Context: This is the overridden method ('foo').
@@ -12,7 +12,7 @@
 // class E extends D {
 //       ^
 //
-// pkg/front_end/testcases/regress/issue_32660.dart:6:3: Warning: The method 'A.foo' has fewer named arguments than those of overridden method 'B.foo'.
+// pkg/front_end/testcases/regress/issue_32660.dart:6:3: Error: The method 'A.foo' has fewer named arguments than those of overridden method 'B.foo'.
 //   foo(int x) => x;
 //   ^
 // pkg/front_end/testcases/regress/issue_32660.dart:10:3: Context: This is the overridden method ('foo').
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.outline.expect b/pkg/front_end/testcases/regress/issue_34291.dart.outline.expect
index 40c4590..98135e9 100644
--- a/pkg/front_end/testcases/regress/issue_34291.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.outline.expect
@@ -1,7 +1,13 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_34291.dart:9:1: Error: Expected 0 type arguments.
+// lib.A<B> foo() {}
+// ^
+//
 import self as self;
 import "dart:core" as core;
-import "issue_34291_lib.dart" as iss;
 
 import "org-dartlang-testcase:///issue_34291_lib.dart" as lib;
 
@@ -9,16 +15,16 @@
   synthetic constructor •() → self::B*
     ;
 }
-static method foo() → iss::A*
+static method foo() → invalid-type
   ;
 static method main() → dynamic
   ;
 
 library;
-import self as iss;
+import self as self2;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → iss::A*
+  synthetic constructor •() → self2::A*
     ;
 }
diff --git a/pkg/front_end/testcases/regress/issue_34498.dart.outline.expect b/pkg/front_end/testcases/regress/issue_34498.dart.outline.expect
index da300e9..79df073 100644
--- a/pkg/front_end/testcases/regress/issue_34498.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34498.dart.outline.expect
@@ -2,23 +2,23 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_34498.dart:8:3: Warning: 'lib.MyClass' can't be used as a type because 'lib' doesn't refer to an import prefix.
+// pkg/front_end/testcases/regress/issue_34498.dart:8:3: Error: 'lib.MyClass' can't be used as a type because 'lib' doesn't refer to an import prefix.
 //   lib.MyClass get lib => null; // (1)
 //   ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_34498.dart:10:3: Warning: 'foo' isn't a type.
+// pkg/front_end/testcases/regress/issue_34498.dart:10:3: Error: 'foo' isn't a type.
 //   foo foo() {}
 //   ^^^
 // pkg/front_end/testcases/regress/issue_34498.dart:10:7: Context: This isn't a type.
 //   foo foo() {}
 //       ^^^
 //
-// pkg/front_end/testcases/regress/issue_34498.dart:20:3: Warning: Can't use type arguments with type variable 'T'.
+// pkg/front_end/testcases/regress/issue_34498.dart:20:3: Error: Can't use type arguments with type variable 'T'.
 // Try removing the type arguments.
 //   T<String> foo() {}
 //   ^
 //
-// pkg/front_end/testcases/regress/issue_34498.dart:12:3: Warning: Type 'Missing' not found.
+// pkg/front_end/testcases/regress/issue_34498.dart:12:3: Error: Type 'Missing' not found.
 //   Missing bar() {}
 //   ^^^^^^^
 //
diff --git a/pkg/front_end/testcases/regress/issue_34850.dart.outline.expect b/pkg/front_end/testcases/regress/issue_34850.dart.outline.expect
index 8f7f0f5..71b4abc 100644
--- a/pkg/front_end/testcases/regress/issue_34850.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34850.dart.outline.expect
@@ -27,21 +27,29 @@
 // Future<List<>> f3() async {
 //             ^^
 //
-// pkg/front_end/testcases/regress/issue_34850.dart:5:2: Warning: Type 'foo' not found.
+// pkg/front_end/testcases/regress/issue_34850.dart:5:2: Error: Type 'foo' not found.
 // <foo<
 //  ^^^
 //
-// pkg/front_end/testcases/regress/issue_34850.dart:11:1: Warning: Type 'foo' not found.
+// pkg/front_end/testcases/regress/issue_34850.dart:5:2: Error: Expected 0 type arguments.
+// <foo<
+//  ^
+//
+// pkg/front_end/testcases/regress/issue_34850.dart:11:1: Error: Type 'foo' not found.
 // foo
 // ^^^
 //
-// pkg/front_end/testcases/regress/issue_34850.dart:14:1: Warning: 'Future' isn't a type.
+// pkg/front_end/testcases/regress/issue_34850.dart:14:1: Error: 'Future' isn't a type.
 // Future<List<>> f3() async {
 // ^^^^^^
 // pkg/front_end/testcases/regress/issue_34850.dart:12:1: Context: This isn't a type.
 // Future<List<int>> f2() async => null;
 // ^^^^^^
 //
+// pkg/front_end/testcases/regress/issue_34850.dart:14:1: Error: Expected 0 type arguments.
+// Future<List<>> f3() async {
+// ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.outline.expect b/pkg/front_end/testcases/regress/issue_35259.dart.outline.expect
index 67e0fdb..83a6c1d 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.outline.expect
@@ -9,19 +9,19 @@
 //   factory Supertype() = Unresolved;
 //           ^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_35259.dart:6:25: Warning: Couldn't find constructor 'Unresolved'.
+// pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Couldn't find constructor 'Unresolved'.
 //   factory Supertype() = Unresolved;
 //                         ^
 //
-// pkg/front_end/testcases/regress/issue_35259.dart:7:25: Warning: Couldn't find constructor 'Unresolved'.
+// pkg/front_end/testcases/regress/issue_35259.dart:7:25: Error: Couldn't find constructor 'Unresolved'.
 //   factory Supertype() = Unresolved;
 //                         ^
 //
-// pkg/front_end/testcases/regress/issue_35259.dart:7:11: Warning: Redirection constructor target not found: 'Unresolved'
+// pkg/front_end/testcases/regress/issue_35259.dart:7:11: Error: Redirection constructor target not found: 'Unresolved'
 //   factory Supertype() = Unresolved;
 //           ^
 //
-// pkg/front_end/testcases/regress/issue_35259.dart:6:11: Warning: Redirection constructor target not found: 'Unresolved'
+// pkg/front_end/testcases/regress/issue_35259.dart:6:11: Error: Redirection constructor target not found: 'Unresolved'
 //   factory Supertype() = Unresolved;
 //           ^
 //
diff --git a/pkg/front_end/testcases/regress/issue_36647.dart.outline.expect b/pkg/front_end/testcases/regress/issue_36647.dart.outline.expect
index b7df60a..47f8846 100644
--- a/pkg/front_end/testcases/regress/issue_36647.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_36647.dart.outline.expect
@@ -53,7 +53,7 @@
 // class xxx xx XXX extends XXX {
 //              ^^^
 //
-// pkg/front_end/testcases/regress/issue_36647_lib2.dart:5:11: Warning: Type 'xx' not found.
+// pkg/front_end/testcases/regress/issue_36647_lib2.dart:5:11: Error: Type 'xx' not found.
 // class xxx xx XXX extends XXX {
 //           ^^
 //
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 ddce3da..e13202c 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
@@ -6,7 +6,7 @@
 class C<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T*>*
     ;
-  method f<U extends (self::C::T*) →* void = dynamic>(self::C::f::U* x) → void
+  method f<U extends (self::C::T*) →* void = (self::C::T*) →* void>(self::C::f::U* x) → void
     ;
 }
 static method g(self::C<core::num*>* c) → void
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 717c2fb..463d57a 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
@@ -5,9 +5,9 @@
 class C<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T*>*
     ;
-  method f<generic-covariant-impl U extends self::C::T* = dynamic>(self::C::f::U* x) → void
+  method f<generic-covariant-impl U extends self::C::T* = self::C::T*>(self::C::f::U* x) → void
     ;
-  method g1<generic-covariant-impl U extends self::C::T* = dynamic>() → void
+  method g1<generic-covariant-impl U extends self::C::T* = self::C::T*>() → void
     ;
 }
 static method g2(self::C<core::Object*>* c) → void
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 ebf34c1..a30e2aa 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
@@ -5,7 +5,7 @@
 class C<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T*>*
     ;
-  method f<generic-covariant-impl U extends self::C::T* = dynamic>(self::C::f::U* x) → void
+  method f<generic-covariant-impl U extends self::C::T* = self::C::T*>(self::C::f::U* x) → void
     ;
 }
 static method g1(dynamic d) → void
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 2f68f15..3c7dca2 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
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 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 {
+class B<T extends core::Object* = dynamic, U extends (self::B::T*) →* void = (dynamic) →* void> extends core::Object {
   synthetic constructor •() → self::B<self::B::T*, self::B::U*>*
     ;
   operator +(dynamic other) → self::B<self::B::T*, (self::B::T*) →* 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 63c538e..9a2b5c5 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
@@ -9,7 +9,7 @@
     ;
   method g({generic-covariant-impl self::B::T* x}) → void
     ;
-  method h<generic-covariant-impl U extends self::B::T* = dynamic>() → void
+  method h<generic-covariant-impl U extends self::B::T* = self::B::T*>() → void
     ;
 }
 class C extends self::B<core::int*> {
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 c22b5fd..4aaa576 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
@@ -1,4 +1,19 @@
 library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart:48:7: Error: The return type of the method 'M.y' is 'int', which does not match the return type, 'Object', of the overridden method, 'I.y'.
+//  - 'Object' is from 'dart:core'.
+// Change to a subtype of 'Object'.
+//   int y;
+//       ^
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart:43:12: Context: This is the overridden method ('y').
+//   void set y(covariant Object value);
+//            ^
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart:51:7: Context: Override was introduced in the mixin application class 'C'.
+// class C = B with M implements I<int>;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
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 9b609d2..e7cad7c 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
@@ -1,4 +1,19 @@
 library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart:53:18: Error: The parameter 'value' of the method 'M.y' has type 'int', which does not match the corresponding type, 'Object', in the overridden method, 'I.y'.
+//  - 'Object' is from 'dart:core'.
+// Change to a supertype of 'Object', or, for a covariant parameter, a subtype.
+//   void set y(int value) {
+//                  ^
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart:43:12: Context: This is the overridden method ('y').
+//   void set y(covariant Object value);
+//            ^
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart:58:7: Context: Override was introduced in the mixin application class 'C'.
+// class C = B with M implements I<int>;
+//       ^
+//
 import self as self;
 import "dart:core" as core;